@fap @ghostdancer @jk Apparently Naughty Dog are using !scheme for game scripting again! But this time they didn't fall for the temptation of writing their own:
> Sony's Naughty Dog game studio has created just such a large project, actually a framework for creating projects. Roughly speaking, Sony's Racket-based architecture provides languages for describing scenes, transitions between scenes, scores for scenes, and more. Domain specialists use the languages to describe aspects of the game. The Racket implementation composes these domain-specific programs, then compiles them into dynamically linked libraries for a C-based game engine
#racket 6.12 is what I'm using an it was released in late January. Mostly a few very specific fixes, but this one stands out:
> The `lazy-require-syntax` form supports lazy loading of macro transformers. Note that the macros must obey certain implementation constraints (see the `lazy-require-syntax` documentation).
I wonder if this is only useful for (and I guess, sometimes detrimental from) a performance perspective, or if it enables some qualitatively new ways of doing things?
> The current implementation is now considerably more complete. DrRacket still doesn’t run well, but Racket-on-Chez can build a full Racket distribution in reasonable time and space.
I love that I can just hover over a symbol in the code, and I get arrows pointing to where it's bound, used or which (require) imported it. Also live error messages while typing are nice.
> OMeta is a new object-oriented language for pattern matching. It is based on a variant of Parsing Expression Grammars (PEGs) which we have extended to handle arbitrary data types. OMeta's general-purpose pattern matching facilities provide a natural and convenient way for programmers to implement tokenizers, parsers, visitors, and tree transformers, all of which can be extended in interesting ways using familiar object-oriented mechanisms.
So it's even buzzword-compliantly up-to-date. The official implementation is in !smalltalk but there is one in !scheme too, and other languages.
No, they're not. Can they be made such? In !scheme ? In !guile ?
Quick search gave me no immediate answer (but I did find stuff like this).
A mail convo somewhere seemed to say that R6RS says everything is mutable except when explicitly not, and mentioned strings from symbol->string as immutable.
Here Chuck is talking about how he got tired of all the various loop construct and says that what he is doing today is just recurse into yourself if you need a loop.
What he is describing is basically a named let and a tail call. Very cool. The similarities, or maybe duality, of !scheme and !forth have never been more obvious.
> (Jeff) You might point out that your semicolon after WORD results in tail recursion and converting the call in WORD to a jump and that is how it functions.
> (Chuck) So there is no reason to make that a call since you are never going to go anywhere afterwards so you just make that jump. In fact in all my latest Forths semicolon kind of meant either return or jump depending on the context and it's optimized in the compiler to do that. It's a very simple look back optimization that actually saves a very important resource, the return stack.
> I find it fascinating how Tcl manages to do several things opposite from common wisdom (dynamic scope, references by name only, are the two main ones) yet somehow ends up with equivalent power to more abstract languages like Scheme.
And indeed someone even implemented !scheme in it too:
In the last 15 mins or so, he shows #programsynthesis using barliman. Test Driven Development, where all you do is write the tests, and the theorem prover writes the code (or you can help it by writing the skeleton of the code). Awesomesauce.