jai is an exciting new programming language being developed by Jonathan Blow (Wikipedia, Twitter). The stated aim of the language is to be a better language for programming games than C++, but the language really is a general alternative to C++ with the following goals:
- high performance
- joy of programming
- simplicity
- low friction
- designed for good programmers
This website contains resources and information about this new language.
Jai libraries
The progsbase library collection will be made available in jai immediately after jai is released. The technology that makes it possible to make these libraries for jai is described in the book Foundations of Computer Science. You can also check out the video introduction.
Jai Language Presentations
Jonathan Blow maintains a playlist for the presentations on his YouTube Page.
Here are the presentations in chronological order:
- A programming language for games — Q&A
- Declarations and Factorability — Q&A
- Base language, compile-time execution
- Iteration and arrays, uninitialized values, enums — Q&A
- Data-Orientation: SOA, composition — Q&A
- Run-Time (and Compile-Time) Type Information — Q&A
- Arguments and Return Values — Q&A
- Polymorphic Procedures — Part 1, Part 2 — Q&A
- Implicit Context, custom allocators — Q&A
- Bounds check, here strings, overloading
- Self-browsing code, compiler message loop, workspaces.
- Code Modification — Q&A
- Structs with Parameters (including Q&A)
- First-Class (-Ish?) Types — Q&A
- Iterators, (Overloading x Polymorphism) — Q&A
- Quick Lambdas, Looping Polymorph Solver — Q&A
- LLVM Back-End, Speed Overview — Part 1, Part 2 — Q&A
- Backend Speedup — Q&A
- Renamers, Static If — Q&A, Preestreem Q&A
- Relative Pointers — Q&A
- Switch, For, Location — Q&A
- Temporary Storage, Expandable Context, Placeholders — Q&A
- Constructors, Destructors — Q&A
- Implicit Polymorphism, Stronger Type_Info, Identifier Backslashes — Q&A
- enum_flags, unions, anonymous structs — Q&A
- Arguments after varargs, array-to-bool, C string ergonomics
- Small Features + Improvements — Q&A
- Macros and Iteration — Q&A
- Q&A with Programming Language Beta Users
Resources Recommended in Talks
In the above talks, a number of readings and listentings are recommended. Here are some of the recommendations.
- Mike Acton’s CppCon 2014 keynote Data-Oriented Design and C++ — Slides
- John Carmack on Inlined Code
- Casey Muratory – Semantic Compression
- Andrei Alexandrescu – Systematic Error Handling in C++
Jai Livestreams
Jonathan Blow often programs jai live at his his Twitch channel. All the videoes are archived in this YouTube playlist.
- Default values, explicit uninitialization — Part 1, Part 2
- Namespaces, using — Part 1, Part 2
- Working on the Dependency System — Part 1, Part 2
- Hammering on Font Code — Part 1, Part 2
- Array data pointers, Cast syntax change
- Auto-cast
- #char directive, starting on ? operator
- Replacing printf — Part 1, Part 2, Part 3
- Adding sound to a sample game
- Compressed audio usage for sample program — Part 1, Part 2
- Asynchronous ogg decompression, ADPCM handling
- Discussion: Iteration
- Discussion of SIMD, SOA, AOSOA
- Discussion: Animation, Language Design, Understandable Code, Productivity
- Discussion: Making Programming Language Parsers, etc — Q&A
- Programming Discussion: Speed, w/ special guest Sean Barrett
Jai Tools
- jai compiler – not released publically yet, but Jonathan Blow is adding more and more people to a Beta Program.
- jai Revolution — jai plugin for Visual Studio
- Jai.vim — VIM syntax highlighting
- Sublime Text 3 syntax highlighting
- JaiLang – Jai plugin for the text editor Sublime Text
- jai-mode – Emacs syntax highlighting