Today for example I got the last of the compiler bugs dealt with such that I can compile and run a simple Tangent program:
Type foo => enum{ values{ a } };
stuff( x:foo ) => void{
debug "in stuff.";
}
entrypoint => void{
debug "in entrypoint.";
stuff foo.a;
}
Here debug is a hacked in keyword to Console.WriteLine string constants. Hurrah laziness. This runs nicely and prints the two lines as you would expect. One thing that is nifty/evil about this incarnation of Tangent is the ability to use phrases in more places than method declarations. So even though we can only do basic things at the moment, all of the syntax inference exists to do evil things like:
Type foo bar => enum{ values{ a, a+b } };
stuff( x:foo bar ) => void{
debug "in stuff.";
}
entrypoint => void{
debug "in entrypoint.";
stuff foo bar.a + b;
}
This too prints the same two lines even in this elemental stage. Note that the added spaces in stuff foo bar.a + b; are not really necessary for the compiler. The inference of operations is done on Type, not spacing. You'll still need spaces to distinguish foo bar and foobar (2 identifiers vs 1) but symbols do not need spacing to distinguish them.
In this example, it's just mostly evil; dot as member access doesn't work fantastic for the literate syntax. The idea though is that it will provide better, cleaner code to read when programmers create phrases to describe their problem domain.
Hopefully the extra-long weekend will allow more work to show more stuff being more cool.
No comments:
Post a Comment