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 08a5696e60
move (most) of core-ext to its own file
2 years ago
libalee packed literals again 2 years ago
test evaluate complete 2 years ago
.gitignore build core.fth into executable 2 years ago
LICENSE initial commit 2 years ago
Makefile move (most) of core-ext to its own file 2 years ago
README.md move (most) of core-ext to its own file 2 years ago
alee-msp430.cpp add cppcheck and test targets; some code size reductions 2 years ago
alee-standalone.cpp build core.fth into executable 2 years ago
alee.cpp linting; reduce msp430 binary size 2 years ago
alee.hpp move libalee into folder 2 years ago
compat.txt add case/endcase of/endof 2 years ago
core-ext.fth move (most) of core-ext to its own file 2 years ago
core.fth move (most) of core-ext to its own file 2 years ago
memdict.hpp linting; reduce msp430 binary size 2 years ago
msp430g2553.ld add msp430 linker 2 years ago
splitmemdict.hpp linting; reduce msp430 binary size 2 years ago

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 <# #>
  • Words for unsigned integers: U. U< UM* UM/MOD
  • >NUMBER
  • FIND

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.

To compile, simply run the make command. This will produce a library, libalee.a, as well as a REPL binary named alee.
A small target exists that optimizes the build for size.
A fast target exists that optimizes for maximum performance on the host system. The standalone target will produce a alee-standalone binary that has the core dictionary built in. The msp430 target builds Alee for the MSP430G2553 microcontroller. This target requires standalone for the core dictionary.

Configurable constants and types are defined either in the Makefile or in types.hpp.