Lumi Language Goals and Features¶
Prioritized Goals¶
Enforce safe and reliable code, free from:
illegal memory access
memory corruption
memory leaks
integer overflow
unexpected crashes
etc…
Allow writing of efficient code, suitable for real-time embedded:
Modern programming languages solve goal #1 by making everything dynamically allocated and garbage collected, but this is inefficient and unpredictable. Lumi will allow as much efficiency and freedom as possible, as long as goal #1 is not harmed.
Be flexible, easy to write, and easy to maintain:
This goal binds together 3 different goals:
Flexible - whenever possible Lumi should allow choosing from a variety of options
Easy to write - Lumi code should be easy to learn and writing code should be as efficient as possible
Easy to maintain - It should be easy to find and fix bugs and add new features, even in large and complex projects
The above goals are bound together because no one is prioritized above the other and they sometimes contradict. Lumi will do its best to reach all of them with minimum harm to each one.
Features¶
Code generating: Lumi compiler will initially generate C code. Other “modern machine language” codes may also be generated, such as: Java (for Android and other devices), Objective-C/Swift (for Apple devices), JavaScript/WebAssembly (for web application), and more…
Safe Memory Management - allowing easy trade-off between flexibility and performance by the user
Thread Safety - Lumi code is ensured to be thread safe
Integer Ranges and Overflow Prevention - Lumi code is ensured to be free from integer overflow and underflow
Type System - Lumi is strongly typed, and allows variety of typing styles with different trade-offs between simplicity, generality and performance
Exception-like error handling implemented with return values
Strict coding conventions - all Lumi code should look the same
Built-in support for productivity features:
testing and mocking
documentation
profiling