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).


frogman said...

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.

Todd Coram said...

@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.