A portable and concise Forth implementation in modern C++
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Go to file
Clyne 5162349f92
CHAR return zero on no input
10 months ago
forth CHAR return zero on no input 10 months ago
libalee no more cstring; 16mhz/115200 msp430; fix dict init 10 months ago
msp430 no more cstring; 16mhz/115200 msp430; fix dict init 10 months ago
tests@45b7ecc1e3 support long definitions; add tests as submodule 11 months ago
.gitignore msp430: add compressed register/flag wordset 11 months ago
.gitmodules support long definitions; add tests as submodule 11 months ago
LICENSE initial commit 2 years ago
Makefile msp430: more dict space; prepare for hal impl 10 months ago
README.md add SOURCE-ID 11 months ago
alee-standalone.cpp msp430: more dict space; prepare for hal impl 10 months ago
alee.cpp no more cstring; 16mhz/115200 msp430; fix dict init 10 months ago
alee.hpp move libalee into folder 2 years ago
memdict.hpp -Wconversion 2 years ago
splitmemdict.hpp -Wconversion 2 years ago
splitmemdictrw.hpp no more cstring; 16mhz/115200 msp430; fix dict init 10 months ago

README.md

Alee Forth

Alee Forth is a concise Forth implementation written in modern C++ that aims for portability, minimal memory footprint, and execution efficiency.

Cross-platform compatibility

Alee Forth relies on the C++20 standard. It does not rely on any operating system. As a result, portability extends down to microcontroller targets with < 16kB flash and < 1 kB of RAM. See the msp430 folder for an example of such a port.

System-specific functionality is achieved through a sys Forth word. This word calls a user-supplied C++ function that implements whatever functionality is needed.

Forth compatibility

Alee Forth uses the Forth 2012 test suite to ensure standards compliance. The entire "core" word-set is implemented as well as most of the "core extension" word-set. The compiled program contains a minimal set of fundamental words with libraries in the forth directory supplying these larger word-sets. The "core" word-set can be compiled into the program by building the standalone target.

Missing core extension words:

PARSE-NAME REFILL RESTORE-INPUT S\" SAVE-INPUT

Building

Alee requires make and a compiler that supports C++20. Simply running make will produce the libalee.a library and a REPL binary named alee. The core word-sets can be passed into alee via the command line: ./alee forth/core.fth forth/core-ext.fth.

Other available build targets:

  • small: Optimize for minimal binary size.
  • fast: Optimize for maximum performance on the host system.
  • standalone: Builds the core dictionary (core.fth) into the binary.
  • msp430-prep and msp430: Builds a binary for the MSP430G2553 microcontroller. See the msp430 folder for more information.

If building for a new platform, review these files: Makefile, libalee/types.hpp, and libalee/state.hpp. It is possible to modify the implementation to use 32-bit words, but this will require re-writing the core word-sets.