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 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
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 — Part 1/1
- Auto-cast — Part 1/1
- #char directive, starting on ? operator — Part 1/1
- Replacing printf — Part 1, Part 2, Part 3
- Adding sound to a sample game — Part 1/1
- Compressed audio usage for sample program — Part 1, Part 2
- Asynchronous ogg decompression, ADPCM handling — Part 1/1
- Discussion: Iteration
Jai Tools
- jai compiler – not released yet …
- 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