The simple title of this blog entry indicates that nothing much has happened in the last few months. Well, at least not much I thought was worth telling you.
I finished an alpha version of my build system as a proof of the feasibility to inject script like C# code in the .NET framework (see my blog entry C# Script).
After that I started a new properties core framework (the basic ideas are discussed in my previous blog entry MVC at the property granularity).
After two rewrites, I got the basic updating mechanisms working and the C# integration was not looking bad. It made sense to create some more test cases and I ended up designing a complete Tao and OpenGL based application framework in .NET.
Well, progress is slower as projects get bigger. After porting my math library from the previous 3D engine, I managed to implement half of a scene graph and a simple rendering engine. All in all it is working perfectly. The updating mechanism is completely hidden and the computations are incremental and only invoked when required. I even managed to implement incremental sets and maps. Well, incremental ordered lists seem to be much more difficult because iterator logic is required … and sorting will surely burn my brain, but I will try as soon the requirements are popping up.
And for fun I tried to create a generic LR top down parser, of which my first attempt sadly failed, nevertheless I created a nice syntax for specifying BNF grammars. My intention was to implement a Lexer for JavaScript.
Here is an example fragment that shows how C# may get close to the JavaScript specification with a little operator overloading
(from ECMA-262 7.4 Comments):
Comment.Rule = MultiLineComment | SingleLineComment; MultiLineComment.Rule = "/*" + MultiLineCommentChars.opt + "<strong>/"; MultiLineCommentChars.Rule = MultiLineNotAsteriskChar + MultiLineCommentChars.opt | '</strong>' + PostAsteriskCommentChars.opt; PostAsteriskCommentChars.Rule = MultiLineNotForwardSlashOrAsteriskChar + MultiLineCommentChars.opt | '<strong>' + PostAsteriskCommentChars.opt; MultiLineNotAsteriskChar.Rule = SourceCharacter.butNot('</strong>'); MultiLineNotForwardSlashOrAsteriskChar.Rule = SourceCharacter.butNot((Rule)'/' | '*'); SingleLineComment.Rule = "//" + SingleLineCommentChars.opt; SingleLineCommentChars.Rule = SingleLineCommentChar + SingleLineCommentChars.opt; SingleLineCommentChar.Rule = SourceCharacter.butNot(LineTerminator);
So, hopefully I can present some more finished work in one of my next posts. Writing framework components and parser algorithms is a wonderful work but very time consuming.
yours
Armin