Roy - Breaking Changes
I’ve made some breaking changes to Roy. The first is changing the grammar to use less parentheses. Before, you had to write:
if (not true) then (id 100) else (10 - 1)
Now you can write:
if not true then id 100 else 10 - 1
The problem is you can no longer do things like this:
if true then if true then true else false else false
But instead have to write:
if true then (if true then true else false) else false
Seems like a good trade-off to me.
The other breaking change is on the modules
branch. I’ve decided to
make tags be typed and compiled to normal JavaScript function
calls. This is possible with a really cool JavaScript trick:
var C = function() {
if(!(this instanceof C)) {
return new C();
}
};
The above code allows the construction of C
from JavaScript with
either C()
or new C()
.
But this breaks nullary tags, which must now be called with empty parens (just like nullary, external JavaScript functions):
let c = C ()
I’ve been making this change to unify the concepts of tags and functions for module loading. I’ve also been able to remove a heap of mutable state in doing so.
I’ll hopefully be able to merge in the modules
branch very soon.