65a3ed7ca4
1267d006 added one more memory test a9782eda added two tests that try to be quite hard on the lbm_memory. 5c0841f8 small additions to matvec bcb1ad7f added vector multiplication by scalar ce5025cc small additions to matvec. 1758b335 renamed blas_extensions to matvec extensions as they wont provide the same set of operations as a blas library usually does 2e48e6b4 fix silly typo in lbm_memory.c 62154010 only initialized mutices 1 time d1dbfd7c added a test of events cb97d623 only add events to the event queue if there is an event handler 7a642222 removed usage of send_message in process_events e3a68115 events are moving into the evaluator 64239a9b tweaks to random extensions d61950d9 removed a print from sierpinski f8a1d586 added sierpinski and flake examples to sdlrepl 72d8e4f4 added random number extensions to sdlrepl ba9c449a changed constants involved in the pseudorandom generator. 8806e369 remove left over debug printing 10cc7fab added random number generator extensions 184c756b added memory leakage tests for string extensions 4373713d work in progress linear_algebra extensions 135591bd added str-merge test 7bff0e97 added a test. more to follow e1aad339 added a small set of runtime system related extensions 5495b5da updates to custom type interface. 4e3b408a rename strnlen to strlen_max 03644f64 pulling in string extensions from vedderb\bldc into string_extensions.c 294f013b grabbed a few extra array-extensions into array_extensions.c from Vedderb/BLDC 87f95e67 adding all the Math extensions from Vedder/BLDC to math_extensions.c git-subtree-dir: lispBM/lispBM git-subtree-split: 1267d006e90085920a3de720480dc2d19d71c8ff |
||
---|---|---|
benchmarks | ||
chibios-examples | ||
doc | ||
docker | ||
esp-examples/repl | ||
examples | ||
include | ||
mascot | ||
notes | ||
old | ||
platform | ||
repl | ||
sdlrepl | ||
src | ||
tests | ||
utils | ||
videos | ||
zephyr-examples | ||
.clang_complete | ||
.gitignore | ||
.travis.yml | ||
CODE_OF_CONDUCT.md | ||
LICENSE | ||
Makefile | ||
README.md | ||
flash_nrf52_with_stlink.sh | ||
lispbm.mk | ||
mktags.sh | ||
runinfer.sh | ||
runsa.sh | ||
setup_fw_build.sh | ||
zephyr-source-me.sh |
README.md
lispBM (LBM)
LispBM is a lisp or scheme like programming language for microcontrollers. LispBM also borrows a couple of ideas from Erlang when it comes to concurrency, message passing, pattern matching and process monitoring. The LispBM runtime system can be compiled for either 32 or 64 bit platforms and runs on a wide range of hardware such as for example STM32, NRF52, ESP32 or X86. When running the LispBM runtime system on a microcontroller it can be built on top of ChibiOS, FreeRTOS or ZephyrOS or, if you are adventurous, on bare-metal. LispBM can also be built to run on topof a regular linux.
The LispBM mascot, Lispy the llama, was created by PixiLadyArt. Thank you, Pixi!
Want to get involved and help out?
There are lots of interesting things to code on in and around the LispBM runtime system.
- Are you interested in microcontrollers and programming languages?
- You find it fun to mess around in C code with close to zero comments?
- Then join in the fun. Lots to do, so little time!
- Poke me by mail bo(dot)joel(dot)svensson(whirly-a)gmail(dot)com.
Documentation
- Work in progress LispBM language reference.
- Work in progress LispBM programming manual
- C code documentation can be found here.
- LispBM's internals are documented as a series of blog posts.
- There are demonstrations on YouTube.
Features
- heap consisting of cons-cells with mark and sweep garbage collection.
- Built-in functions: cons, car, cdr, eval, list, +, -, >, <, = and more.
- Some special forms: Lambdas, closures, lets (letrecs), define and quote.
- 28-Bit signed/unsigned integers and boxed 32-Bit Float, 32-Bit signed/unsigned values.
- Arrays (in progress), string is an array.
- Quasiquotation.
- Concurrency.
- Message-passing.
- Pattern-matching.
Vague or continuosly ongoing todos
- Doxygen?
- Tutorials?
- Be much more stringent on checking of error conditions etc.
- Make uniform how to return success or failure. It is sometimes bool and sometimes int right now.
Compile a 64bit binary for linux
-
Build the repl:
cd repl
and thenmake all64
-
Run the repl:
./repl
Compile a 32bit binary for linux (Requires 32bit libraries. May need something like "multilib" on a 64bit linux)
-
Build the repl:
cd repl
and thenmake
-
Run the repl:
./repl
Compile on Raspberry Pi
To build the library exeute the following command in the lispbm folder:
PLATFORM=pi make
To build the repl
example repl do:
cd repl
make pirepl
Then start it up using ./repl
Building the library is not a prerequisite for building the repl anymore.
SDL and LispBM
In the sdlrepl
directory there is a start of a set of SDL bindings for LispBM.
To build this repl you need the following dependencies:
- libsdl2-dev -
sudo apt-get install libsdl2-dev
- libsdl2-image-dev -
sudo apt-get install libsdl2-image-dev
Then compile the repl using the command make