MyNixOS website logo
Description

Emulate a 'Forth' Programming Environment.

Emulates a 'Forth' programming environment with added features to interface between R and 'Forth'. Implements most of the functionality described in the original "Starting Forth" textbook <https://www.forth.com/starting-forth/>.

froth: FORTH for R

froth is a Forth implementation for R. If you're new to froth or Forth, check out the detailed overview or my in-depth tutorial.

froth is distributed by CRAN. You can download it for your R installation by running:

install.packages("froth")

This implementation comes with a number of differences from other FORTHs:

  • uses R operators for arithmetic, so 3 2 / returns 1.5
  • arbitrary R objects can be pushed onto the stack
  • built-in R print methods; use .R to format according to the print method for the top of the parameter stack
  • obfuscated memory (no direct or emulated hardware-level memory access)
  • no distinction between compiled and interpreted words (loops are possible outside of definitions!)
  • Use of R lists for internal arrays; arrays of bytes are not supported
  • ' will always look for the next token, not the next token from input stream. This makes it identical to ['] in function definitions. I may change this later.

This will (likely) not be a 1:1 copy of Gforth, I think I'd rather have a forth implementation that is robust and works in R than one that exactly imitates existing Gforth. But...tbd.

TODOs

  • any kind of I/O functionality (though you can read files into froth from R)
Metadata

Version

1.1.0

License

Unknown

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows