A month has passed since the 0.4.0 announcement so it is about time to say hello to yet another EndBASIC release because 0.5.0 is here! So, what’s new? Not much… unless you look under the covers, in which case a ton has changed. Look:

$ git diff --shortstat endbasic-0.4.0 endbasic-0.5.0
 107 files changed, 4488 insertions(+), 3651 deletions(-)

EndBASIC currently clocks at around 13,000 lines of code so, by this simple metric, about 30% of the codebase has been touched between 0.4.0 and 0.5.0. That is significant, so what has happened then?

0.5.0 is a quality-focused release that addresses some long-standing structural problems and miscellaneous issues. It also comes with some new goodies, but those are minimal and secondary. The TL;DR, in order of importance, is:

  1. The core language parser and the standard library now live in separate crates, ensuring that the former remains tiny and completely agnostic to any commands. Yes, not even PRINT is part of the core language, which has some… “interesting” implications. I’ll talk more about that and how you can embed EndBASIC in a follow-up post, but for now I’ll say that the core interpreter weighs about 2,500 lines and 480kb of compiled code.

  2. Almost all unit tests have been rewritten to be more concise and robust by adding a common Tester infrastructure. Writing unit tests for new commands and functions was a drag before, so I hope this will speed up development later on. Furthermore, this infrastructure is public, so any consumers of EndBASIC can use it too for their own validation.

  3. Support for an AUTOEXEC.BAS (yes, BAS, not BAT!).

  4. A myriad of small changes to address pending to-dos.

Changing 30% of a codebase with the confidence that things continue to work is difficult, but I was able to do those changes in only a dozen hours of free time or so—and I’m actually very confident I did not break anything. Why? Because two reasons. The first is that the codebase is extensively unit-tested; the original “cost” of writing the tests has already paid itself off multiple times. And, second, Rust excels at letting you refactor code knowing that, if it compiles, it is most likely correct.

Separately, and after my last post explaining why I’m putting time in this project, some folks have asked “Where is EndBASIC headed?". I do have a rather specific vision of what I’d like this project to look like, but the path to get there will be haphazard because there are no firm plans. In practical terms: I want to continue adding language features (such as arrays, user-defined functions, and file manipulation); I want to test if my kids can actually learn anything through this environment as originally planned; and I have some pie-in-the-sky ideas for what the web version would be. These include fancier graphics and the ability to generate “music”, and also having “accounts”, with the idea being that you could share programs with other students users and even have a BBS-like message board or chat system.

Anyhow.

You can dive right in by visiting https://endbasic.jmmv.dev/ for an interactive session (doesn’t really work on Android yet, sorry) or following the project at https://github.com/jmmv/endbasic/. Thanks, and enjoy!

Want more posts like this one? Take a moment to subscribe.

Enjoyed this article? Spread the word or join the ongoing discussion.