Clyne 76dfbba524 | 2 years ago | |
---|---|---|
libalee | 2 years ago | |
test | 2 years ago | |
.gitignore | 2 years ago | |
LICENSE | 2 years ago | |
Makefile | 2 years ago | |
README.md | 2 years ago | |
alee-msp430.cpp | 2 years ago | |
alee-standalone.cpp | 2 years ago | |
alee.cpp | 2 years ago | |
alee.hpp | 2 years ago | |
compat.txt | 2 years ago | |
core.fth | 2 years ago | |
memdict.hpp | 2 years ago | |
msp430g2553.ld | 2 years ago | |
splitmemdict.hpp | 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" glossaries. 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
.
This means Alee should be executed as alee core.fth
to include these words. Alternatively, the standalone
target packages 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 contains and pre-loads the core dictionary.
The msp430
target builds Alee for the MSP430G2553 microcontroller. Like standalone
, the core dictionary is built into the binary.
Configurable constants and types are defined either in the Makefile or in types.hpp
.