A portable and concise Forth implementation in modern C++
 
 
 
 
 
Go to file
Clyne 5991370657
consteval and other refactoring
forth >number
libalee consteval and other refactoring
msp430 align builtin dictionary
.gitignore build core.fth into executable
LICENSE initial commit
Makefile switch to c++20
README.md >number
alee-standalone.cpp align builtin dictionary
alee.cpp -Wconversion
alee.hpp move libalee into folder
compat.txt >number
memdict.hpp -Wconversion
splitmemdict.hpp -Wconversion

README.md

Alee Forth

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

Cross-platform compatibility

Alee relies on the C++17 standard. Alee does not rely on operating-system-specific functions, making portability easy.

The goal of portability extends down to microcontroller targets with kilobytes of memory. See the msp430 target for an example of a port.

System-specific functionality is obtained through a sys Forth word. This word calls a user-supplied C++ function that implements the necessary (or any additional) functionality.

Forth compatibility

Alee implements a large majority of the "core" and "core extension" word sets. Implementation is tracked in compat.txt, with missing words listed below. Fundamental words are built into Alee (written in C++); the rest of the implementation is in core.fth and core-ext.fth.

Running Alee without core.fth or core-ext.fth passed as arguments will leave you with a minimal word set. The standalone target will package the core.fth dictionary into the program.

Missing core features:

  • Pictured numeric output conversion (e.g. <# #>)

Missing core extensions:

.R HOLDS PAD PARSE PARSE-NAME REFILL RESTORE-INPUT S\" SAVE-INPUT SOURCE-ID U.R U> UNUSED WITHIN [COMPILE]

Alee aims for compliance with common Forth standards like Forth 2012 and ANS Forth. Compliance is tested using a Forth 2012 test suite. Supported test files are in the test directory, with tests for unimplemented words commented out.

Building

Alee requires make and a C++17-compatible compiler. Simply running make will produce the libalee.a library and a REPL binary named alee. Note that this binary has no built-in libraries; these can be passed in by calling ./alee core.fth core-ext.fth.

There are other 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: Builds a binary for the MSP430G2553 microcontroller. The standalone target must be built first for the core dictionary.

If building for a new platform, see Makefile, types.hpp, and state.hpp for available configuration options.