knitr::opts_chunk$set(echo = TRUE)
Forth is a pretty darn cool language. Despite being older than C, Forth is a high level, typeless, stack-oriented programming language that doubles as an extremely lightweight operating system. Think BASIC, but...cooler.
The beauty of Forth is its simplicity. The system is comprised of a single data stack and a dictionary, essentially a linked list containing definitions called "words". Each word links to executable code. When a user enters text, the interpreter traverses the dictionary for each entered word and executes the corresponding code. Forth's stack-oriented design means usage of variables is limited.
froth
brings a Forth-like system to R. You can drop into a command-line editor, or call Forth operations from R. Since froth
runs on top of R, it supports all of R's data structures. froth
is not as fast as modern implementations of Forth, but this package is more intended as a fun way to play with Forth-style syntax than as a replacement for existing Forths. However, stack-oriented algorithms do have their advantages, and you may find that your R code could benefit from froth
!
The included vignettes detail a crash course on froth
-style Forth, using many examples based on the excellent guide on forth.com. If you find bugs or have any suggestions for additional features, feel free to let me know on GitHub!
This section is intended for people that experienced in Forth, so if you're just here to learn how to use froth
, feel free to skip ahead to the tutorial.
I am not an expert on Forth, especially given that there are people that have been programming in Forth longer than I have been alive. There may be some mistakes I've made in this implementation that are unintentional--if you find a difference from Forth that I haven't mentioned, feel free to leave me a comment on GitHub.
However, there are a few known differences that I implemented intentionally:
list
structure, so each cell can hold arbitrary amounts of stuff. This also means byte arrays are not supported.FORGET
, '
, or I/O from froth
. Words/variables can be redefined any time, but they'll destructively overwrite the previous definition.Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.