I ran across Cassette, a programming language today. I liked some of the stuff on the webpage and think it is interestingly aligned with the Future of Coding community.
I made Cassette as a simple language for “playful programming”. Playful programming is writing something for the sake of writing it. It’s making a software 3D renderer or a GIF reader, even though better implementations of those already exist. It’s making generative art programs and drawing them with a pen plotter. Cassette itself is playful programming—there are certainly other scripting languages that may be better for personal projects like these, but this one is mine.
Continuing,
In particular, I wanted Cassette to feel “essential”, where each aspect of the language reflects some fundamental aspect of computing (from a functional language perspective, at least). For example, I consider garbage collection, lexical scopes, and immutable types essential. The result is a little boring, but I hope it’s a good platform to play with other programming concepts.
Emphasis mine.
I’m not sure what the bolded part means. It feels unhelpful as a design principle. I mean, every language designer thinks the things they’re putting into their language are essential; otherwise they wouldn’t be putting them in there. This leaves entirely unresolved how to determine what is and isn’t essential.
The one way I can see for this principle to be substantive is as a statement of minimalism – excluding conveniences in favor of radical simplicity. But given that the “future work” section of the page includes “Bignum support” and “Destructuring assignment”, it hardly seems that the author is eschewing conveniences! Is destructuring assignment a “fundamental aspect of computing”? If so, what in the world isn’t? If not, how does the bolded statement constrain or guide the design of the language?
For me the essential bit was worth highlighting when taken as essence and accident