That recent change I made to speed up the processing also revealed a bug that occurred whenever a function scope was resized. This led to an overhaul of the variable storage system that may or may not have been necessary but will speed things up anyways because there are fewer function calls to make.
At the same time, I’ve decided to change some language semantics. Previously, when assigning data (such as a number) to a variable, the original function was retained, but the return was now a “constant return”. This meant that calling the function on the variable would return this “constant return” rather than the function, yet the members of the original function were still accessible. This “constant return” feature was originally designed to be a shortcut, but, ironically, it goes against the intended language design because this syntactic sugar was actually intended to be a shortcut for creating a new function. Now it will be.
The current problem I was having arose during situations of pointer assignment. In order to separate a pointer from the function it pointed to, you would have to assign it a new function (using function-building syntax). Assigning a number or data to it should (at least for user expectation) create a new function. After all, the assignment symbol should have one meaning. With the fix, now it does.
I suppose the reason it was overlooked for so long is because I had other things to think about.
The change also means that it resembles other languages like Python a little better. When you want to change some data by pointer, you have create a pointer to its parent and change it via the parent.
parent.child = 10 pointer ~ parent pointer.child = 20 print(parent.child:) # prints 20 #
Recall that tilde (~) is used for setting pointers.
The engine now labels this language version 3, engine version 0.5. That should be easy to remember.