FORTH is interesting as a language not as ugly and boring as C, yet more lightweight than lisp. For the uno (328PU) ulisp requires 97% of the program store space, and 74% of your dynamic memory, while Arduino-FVM needs 36% of program storage space and 69% of dynamic memory. There is more for me to explore as far as space efficiency goes, but anyway I’m giving FORTH a try.
There are a few different FORTH implementations for Arduino – I was looking for the easiest path to get set-up. I landed on Arduino-FVM simply because it was the first one I found that was an Arduino sketch/library which I load quickly without having to learn anything new about how to upload to the 328. I just had to install the FVM library, and then compile a sketch which gives me the actual interpreter to load on the microcontroller.
You can’t really learn the fundamentals of FORTH programming from just looking at Arduino-FVM documentation; so I installed gforth on my Guix desktop computer and used the gforth info page that has nice reference material and an extensive tutorial. Then I looked at the Arduino-FVM source code, which documents the parameters for the arduino-specific words.
This one liner will blink the LED on and off:
: blink true 13 pinmode begin 500 delay 13 digitaltoggle again ; blink
For those total unfamiliar with FORTH, it is sort of like doing programming on a reverse polish notation calculator, but with a larger stack available.
3 thoughts on “Learning FORTH on Arduino”
For those totally unfamiliar with programming on a reverse polish notation calculator, it has been said that it is like Python and Assembly code had a child that joined a circus as a high wire act.
Hackaday abbreviated this to say Forth was like a “flamethrower crawling with cobras” because you literally can change the mathematical meaning of 2+2 to equal 5….
You mean, 2 2 + .
LikeLiked by 1 person
I confirmed that on gforth it is possible:
: + 1 + + ; redefined + ok
2 2 ok
. 5 ok
I tried this on Arduino-FVM and it didn’t work (the interpreter freezes) but I think Arduino-FVM is not fully ANS FORTH compliant anyway.
LikeLiked by 1 person