Thoughts about the desirable properties of a Lisp optimised for fast 3d games use.
- Generational and/or incremental garbage collection.
- Native vector, matrix and quaternion types that map to SIMD
- Property lists
- Simple function call syntax
- Fast single dimensional arrays
- Unhygenic macros
- Optional compile-time type declarations
- Integrated shader compiler
- Good FFI - to bind to c/c++ libraries
- Fast, streamable file I/O library
- Datatypes /library specifically for geometry - flexible mesh loading/compilation
- Datatypes / library specifically for texture and image processing
- Datatypes / library for spatial structures: quadrees, bsp trees, octtrees, r-trees
- Aggressive optimization: register colouring, scheduling, peephole..etc
Incremental means gc collection can be time-bounded; generational will be more effective in culling short lived, small objects, and give us cache wins. Allocation should be trivial as possible.
De riguer for fast 3d operations: an inline assembler build into the language, coupled with macro expansion would probably mean that these not be coded
Too useful for lots of things
Ditto: perfect for game AI
CL's function call syntax is relatively complicated and makes optimisation harder.
A big system can be build from a relatively small one via CL-style macro-expansion..
Ideal for rolling gustom syntax. CL's readtable has too many characters reserved. We need to keep ours free
Enables an optimiser to do a better job, and keeps more unboxed values arond
Shaders are just too useful not to have: an embedded lisp style shader with macroexpansion facilities would help a great deal.
Needed for multiplayer games, and editors that run alongside the game
A lot of exisiting code is in C - eg OpenGL
Streaming in new data as the game runs is very important for large worlds.
We will need to allocate hunks of memory for talking to 'C' libraries and just because we can? Not sure about this one
We will need acres of geometry, as usual..
And acres of texture maps, etc applied to them
Good Scene management requires these
Goes without saying
That will do for now..;-)