Nice article. One thing that people are doing these days is using the #lang mechanism to easily turn a Redex [0] model into a quick-and-dirty prototype implementation of a new language, integrated with the Racket tooling (IDE etc.).<p>[0] <a href="http://docs.racket-lang.org/redex/tutorial.html" rel="nofollow">http://docs.racket-lang.org/redex/tutorial.html</a>
If anyone does not recognize dyoo, the owner of hashcollision.org is also the author of Whalesong, a Racket->Javascript system. I think it has been discussed before on HN.<p><a href="https://github.com/dyoo/whalesong" rel="nofollow">https://github.com/dyoo/whalesong</a><p>Needless to say, if this guy is fudging Racket, I am not sure what we can say about the rest of us and what we do with the language. Haha.<p>EDIT: Was the author, it seems he passed it off to another Racketer now that he is busy with other stuff. Should have clicked the link before posting.<p><a href="https://github.com/soegaard/whalesong" rel="nofollow">https://github.com/soegaard/whalesong</a>
If anyone is interested in seeing how the principles in the article can be used to implement a traditional language, I offer MiniPascal.<p><a href="https://github.com/soegaard/minipascal" rel="nofollow">https://github.com/soegaard/minipascal</a><p>The reader (lexer and parser) turns the source program into syntax objects. The main idea is to make a Racket macro for each Pascal construct. The Racket macro expands into normal Racket.<p><a href="https://github.com/soegaard/minipascal/blob/master/minipascal/compiler-simple.rkt" rel="nofollow">https://github.com/soegaard/minipascal/blob/master/minipasca...</a>
Overriding `read` is really neat!<p>While I was reading this I realized just about any scheme implementation could probably override their `read` like this as well. Obviously racket as an implementation has focused on making this work well.