Make it your own. Everything is created with extendability and modularity in mind. The Compiler is composed of multiple small programs which can be used and modified independently. They communicate with easy-to-understand formats.
I made this decision to simplify the parsing of code and also because it makes code easier to read, as there is nothing that's 'hidden' away in some macro.
ESPL1000 is a learning Project for me so anything might change whenever.
I chose strict evaluation over lazy evaluation because lazy evaluation is harder to reason about as a programmer, in my opinion.
This greatly simplifies the parser. An Operator should map to a small sequence of machine instructions.
This simplifies development as there are many tools available for C development.
In my opinion, it does not make sense to force unneccessary indentation on people. The name of the file is the namespace of a translation unit. structs and functions can be declared and defined directly, without needing a wrapper like a class or namespace construct. This also makes code easier to read without context.
There are no nested method definitions or nested structures. Indentation is limited to the minimum necessary. I have personally never seen a case where it was necessary or 'better' in any way to declare a nested function or anything like that.
ESPL1000 provides the basic building blocks like loops and if-statements that are classics to most programming languages. Extra stuff like bloated syntax is avoided whenever possible.
Having 'NULL' makes it hard to understand code without context and knowledge of the code around it. Good code should make sense on it's own. So it should be obvious when a variable might not contain anything. So NULL will not be implemented in ESPL1000.
ESPL1000 has no ability to declare any global variables. Everything is (currently) either inside a struct or method.
A function declared pure should not contain calls to impure function. Purity of a function should be checked by the Compiler.