In this tutorial, we made our basic language cooperate better with Racket at large:
We added a def statement for making named functions.
We added support for exports of functions and variables defined in a BASIC program, and imports of Racket libraries. We learned about using parameters to exert remote influence on function behavior.
We saw how to adjust the REPL to make it read & evaluate certain BASIC statements and expressions, by extracting a parser from the middle of our brag grammar.
We made command-line arguments available to our BASIC programs, and learned how to manage hygiene correctly when using a macro to introduce identifiers.
Congratulations! You’ve made it to the end of the Beautiful Racket tutorials. Whether you’ve skipped around, or gone straight through, I appreciate your time and energy.
I’ve tried to cover all the essential concepts of making languages with Racket. (If I missed something, let me know.)
I hope you’ll continue to find these tutorials, and the explainers that follow, useful resources as you embark on your own language projects.
I also recommend the master recipe, which consolidates the whole language process onto a single page.
Believe it or not, there’s still a lot more to say. In the months to come, I plan to add more tutorials that highlight other aspects of making languages with Racket. (For instance, making a text-based language like Pollen.)
I hope you find making programming languages as productive & interesting as I have. Nothing I’ve said here should be taken as definitive. Rather, it’s a starting point for you to develop your own techniques and make your own discoveries. Have fun & break things!