Friday, October 13, 2017

Wish List: Clojure tethered to an MCU running Forth

I want to do 2 things:

  1. Use the power of a full desktop system (e.g. Linux, Emacs, Clojure, etc) to play with some SPI/I2C peripherals
  2. Compile a very limited subset of Clojure/Lisp to Forth for flashing into a microcontroller

Essentially, I want to take the "tethered" Forth environment (i.e. a full blown interactive development environment talking directly to an MCU),  but instead of Forth (Gforth, etc) on the desktop I want to use Clojure/Lisp  (basically a language with very rich desktop support).  

#1 is pretty easy.  I can pick a popular Forth like Mecrisp (which runs on lots of MCUs) and talk to it's Forth interpreter from the Clojure REPL. 

#2 is harder, but necessary if I don't want to use #1 just for prototyping.

But why not just use a terminal and Mecrisp (for #1)?

Each Cortex M arm chip comes with a ton of definitions (registers, bit names, etc) that I don't want loaded onto the chip. Also, every little "helper" function I write (to enrich the Forth REPL)  takes space on the MCU

 Tethered Forths don't have this problem (as you leverage the desktop Forth to handle such things).   

But, while Gforth is very nice, it still isn't as "rich" as I want regarding integration into Linux/Emacs (i.e. not enough batteries included).


  1. I want this too! However, I've been thinking about Factor for the desktop environment. This way I have stack-based languages for both ends.

    Don't get me wrong, I like Clojure based on what I know about it (which is not a whole lot) but I love that Factor is like a super-Forth. I just wish that Factor was better known and more accepted as a main-stream language.

  2. @frogman: Factor is interesting. The concept still applies: Use a rich development language and a tethered Forth. I think Lisp is an interesting approach because it is somewhat of a mirror of Forth (prefix rather than post notation). Certainly having Forth or a Forth-like language like Factor would be more synergistic, but I am curious how (a subset of) Lisp would translate to Forth.

  3. I think it's implied that Budapest is where Hawkeye was supposed to kill Black Widow. He ends up saving her and they both fight to escape fighting the backup that was supposed to be assisting Hawkeye. That's why Hawkeye remembers it "very differently" and Secretary Peirce tries to stop Black Widow by saying the truth about Budapest will be known. Once it is known, people will know the identity of the Black Widow who did all those horrible things.

  4. man you have incredible programming and didactic skills! Thanks for the amazing work, finally i could understand that. And dont let to care of you kid to work, im also a father, trust me i know what im talking about hahaahah. Congrats!