Thank you @neauoire - I love your work on uxn. It’s been a while since I first read about it, and I see it has blossomed into a whole ecosystem. Runs on most platforms, even ESP32. And apps can communicate to each other, like a miniature Unix.
uxn orca.com | piano.rom
It’s brilliant. I really resonate with its design decisions, the thinking that led up to its creation (Weathering Software Winter), stories of living on a solar-powered sailboat.. This year I’m moving out of the city (of a hundred spires) to a rural off-grid habitat, which makes me appreciate and re-think civilized life down to its “primitives” (water, food, electricity) including computers and communication networks.
..Off on a few tangents below.
In computing, language primitives are the simplest elements available in a programming language. A primitive is the smallest unit of processing available to a programmer of a given machine, or can be an atomic element of an expression in a language.
This diagram is from:
DRAKON (Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность, meaning “Friendly Russian Algorithmic Language Which Provides Clarity”) is a free and open source algorithmic visual programming and modeling language.
It was developed as part of the defunct Soviet Union Buran space program in 1986 following the need in increase of software development productivity. The visual language provides a uniform way to represent processes in flowcharts.
It’s satisfying (“provides clarity”) to get down to the basics, working from the ground up. Experiencing the realm of ideas as a tangible reality, manipulating concepts like in The Glass Bead Game.
I’ve continued exploring the rich discussions on this forum, and found:
The README in the project is a fun read, it contains so many good ideas, some of which I’ve also been rediscovering in my own experiments. I think it’s in the same conceptual/artistic direction as uxn, like a wizard conjuring up a microcosmic computer stack from nothing, one word at a time.
Then I found:
So good!
In order for code to be living structure, even the tools used to make the code need to be living structure. – Christopher Alexander
This is a demo of a language I’ve been working on called Loops & Logic.
It’s written in a superset of HTML for ease of learning, as its original purpose is to serve as a template language. But as I continue developing “smart editor” features with language integration, like:
- lint - verify syntax with helpful error messages
- format - prettify code formatting, optionally automatic
- hints - autocomplete of tags and attributes, suggestions, info on hover about parts of an expression
- interactivity - number slider, color picker, select list of available values
It seems to be evolving into a Lisp-like environment for interactively creating hypertext documents. The user interface is a common pattern, with code editor and a visual canvas for live feedback.
One of the next questions I’m solving is how to provide a more seamless HTML-like syntax for styling (without CSS) and behavior (without JavaScript). I suppose with magic attributes like color
and action
.
Bret Victor’s Learnable Programming is often in the back of my mind. (Also Seymour: Live Programming for the Classroom.)
Recently saw this remote Lisp server via SMS (short message service).
It’s lovely how it shows the essence of computation and communication. An expression is received, evaluated, then a value is returned. A function is defined, then later invoked in a subsequent message. The last command is remotely reading the voltage level of an analog GPIO pin.
And scary how open it is, someone would only need the phone number or IP address of the server, and a bit of Lisp to access the system. Depending on what’s connected, they can blink LED lights, display a message, read sensor data, open curtains and doors, water the plants, feed the cat..
The above is a “prototype” (text in a window) in my C99 stack. I wonder if/how the Lisp program can actually work as an HTTP server in a browser, ideally peer to peer.
Last week I finished porting uLisp (8K LOC) from Arduino code to plain C, and wrote a minimal REPL in the terminal.
It’s a fun exercise for me to (re)learn C and make my own tiny Lisp machine (virtual for now). I feel I’m going in the right direction because all the code I’m writing is super portable, to all platforms that a C compiler can target including Wasm.
My guess for this minimum is the WASM tooling, according to the principle-whose-name-I-cant-remember that says that the expected time for some technology to stay around is the time it has been around already.
Earlier this year Wasm version 2 was announced, and I’m already nostalgic for the simpler v1 with only a handful of op codes. There are a number of small Wasm compilers (from C, Lisp, WAT, etc.) that I’ve seen people write, but Wasm v2 will require significantly more effort to implement. It’s no longer simple to understand.
The Lindy effect is a theorized phenomenon by which the future life expectancy of some non-perishable things, like a technology or an idea, is proportional to their current age.
So C99 should be good for another 25 years (quarter century). Seeing how we have all kinds of emulators of retro computers running in the browser, in big part thanks to WebAssembly, I think we’ll see C compilers for centuries, eventually an interplanetary or extraterrestrial language.