Hi All, I am finally announcing an initial release of my new experimental low-level programming language which I am calling Sysmel (For SYStem MEtaprogramming Language).
GitHub Page: https://github.com/ronsaldo/sysmel Short native game demo: https://www.youtube.com/watch?v=tRoPMbPvqH0 Sysmel is designed to be a flexible language, and a flexible compiler front-end. The support for garbage collection in Sysmel is an optional feature by design, and the support for dynamic objects and dynamic message lookup it is also optional. If garbage collection is disabled, the code written in Sysmel is mostly equivalent to C/C++ code (only single inheritance is supported for now), but with a hybrid syntax between Smalltalk and C++. For the final code generation I am using my custom SSA intermediate representation (the same one that I used in Lowtalk, and in) which it is currently tested with the following two backends: - LLVM textual IR backend. This is used for generating native object files by reusing the LLVM infrastructure. This backend also supports emitting DWARF debugging information so the resulting programs can be debugged with gdb. - Spir-V backend, for generating shaders for Vulkan and executing them in the GPU. One of the objectives of Sysmel is to support the full Smalltalk object model without a VM and with real multi-threading support. So far message lookup is already implemented, but there is still many basic primitives missing, and the implementation of a proper GC that allows implementing #allInstances and #become: . As a quick workaround, currently only the Boehm conservative GC is supported for having an initially working environment. In the near future, Woden Engine will adopt Sysmel at least as its shading language for programming the GPU. In a farther future, a higher performance version of the Woden Engine will be made by using Sysmel, mostly because it seems to be much easier to support real multi-threading in Sysmel by making a completely new system. I am also re-implementing my previous experiment for converting Pharo block closures into shaders by reusing the Sysmel intermediate level AST, and its type inference machinery. The current version of this new Block -> to Shader infrastructure can only perform basic Map and Reduce operations with blocks that do not define local variables (they will be supported in a future version) in linear arrays. Best regards, Ronie
