Our great sponsors
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
You may be interested in Collapse OS, a "Forth operating system and a collection of tools and documentation with a single purpose: preserve the ability to program microcontrollers through civilizational collapse".
http://collapseos.org
I was introduced to Froth via [Factor](https://factorcode.org) (which I discovered as a jEdit user as both have the same initial author). Factor is a garbage collected higher order Forth that makes it more fun to program in (example: 'quotations', basically pushing lambdas on the stack). If I am doing coding puzzles I do it in Factor. Some might argue that it's not a real Forth because it's not as close to the metal... but you could rewrite Factor in Forth and then the distinction would be gone (think Lisp reader macros). I recommend people curious give it a try.
I've been playing with a language called Joy, created by Manfred von Thun, which seems to me to combine the best parts of Forth and Lisp while being simpler and more elegant than both. I suspect it might be the simplest useful language.
"A Conversation with Manfred von Thun" in Vector, journal of the British APL Association http://archive.vector.org.uk/art10000350
https://hypercubed.github.io/joy/joy.html
Kevin Albrecht’s mirror of Manfred von Thun’s original website for the Joy Programming Language http://www.kevinalbrecht.com/code/joy-mirror/index.html
https://joypy.osdn.io/ (My own project) Here's a flowchart (SVG) for the interpreter loop: https://github.com/calroc/Thun/blob/simpler/joy_interpreter_...
It boils down to quotation as the primary operation, denoted by enclosing expressions in square brackets. Various combinators accept quotes on the stack and prepend (or not) one or more of them to the pending expression under evaluation (like Continuation-Passing Style), and that's it. That's the whole evaluation model.
E.g. "branch" combinator accepts a Boolean value and two quoted expressions and put one of them onto the pending expression based on the Boolean value:
bool [ELSE] [THEN] branch