Clyne a51428cff0 | 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.cpp | 2 years ago | |
alee.hpp | 2 years ago | |
compat.txt | 2 years ago | |
core.fth | 2 years ago | |
corewords.cpp | 2 years ago | |
corewords.hpp | 2 years ago | |
dictionary.cpp | 2 years ago | |
dictionary.hpp | 2 years ago | |
memdict.hpp | 2 years ago | |
parser.cpp | 2 years ago | |
parser.hpp | 2 years ago | |
state.cpp | 2 years ago | |
state.hpp | 2 years ago | |
types.hpp | 2 years ago |
README.md
Alee Forth
Still very much in development! Not suitable for real applications yet.
Alee is a portable and concise Forth implementation in modern C++. Its primary aims are for reduced program size and execution efficiency. Portability includes bare-metal platforms, with intentions to support microcontrollers with kilobytes of memory.
Cross-platform compatibility
Alee relies on the C++17 standard. Alee does not rely on operating-system-specific functions, making portability easy. See the msp430
target for an example of a port.
System-specific functionality such as text output is contained to a sys
word. This word calls a user-supplied user_sys
C++ function that should implement the necessary (or any additional) system-specific functionality.
Forth compatibility
A base dictionary is being built by working through the "core" and "core extension" glossaries. These glossaries are listed in compat.txt
, with "yes" indicating that the word is implemented either in core.fth
or within Alee itself. core.fth
may be compiled into a binary for loading on targets without filesystems.
Alee Forth 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 non-passing or unimplemented tests 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 (not target) system.