{"id":13720411,"url":"https://github.com/svenssonjoel/lispBM","last_synced_at":"2025-05-07T12:31:23.164Z","repository":{"id":38621044,"uuid":"152950119","full_name":"svenssonjoel/lispBM","owner":"svenssonjoel","description":"An interpreter for a concurrent lisp with message-passing and pattern-matching.","archived":false,"fork":false,"pushed_at":"2025-05-05T07:40:56.000Z","size":27007,"stargazers_count":105,"open_issues_count":1,"forks_count":11,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-05-05T08:35:56.182Z","etag":null,"topics":["chibios","concurrency","esp32","freertos","functional-programming","interpreter","language","lisp","microcontroller","nrf52","pattern-matching","programming-language","quasiquotation","repl","riscv32","stm32f4","zephyr"],"latest_commit_sha":null,"homepage":"http://www.lispbm.com","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/svenssonjoel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-10-14T07:32:37.000Z","updated_at":"2025-05-05T07:41:00.000Z","dependencies_parsed_at":"2023-10-22T10:32:03.037Z","dependency_job_id":"d74f56f1-2b51-49e0-b899-cb2309ddc2ae","html_url":"https://github.com/svenssonjoel/lispBM","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/svenssonjoel%2FlispBM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/svenssonjoel","download_url":"https://codeload.github.com/svenssonjoel/lispBM/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252876394,"owners_count":21818173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chibios","concurrency","esp32","freertos","functional-programming","interpreter","language","lisp","microcontroller","nrf52","pattern-matching","programming-language","quasiquotation","repl","riscv32","stm32f4","zephyr"],"created_at":"2024-08-03T01:01:03.486Z","updated_at":"2025-05-07T12:31:18.149Z","avatar_url":"https://github.com/svenssonjoel.png","language":"C","funding_links":[],"categories":["Libraries","C","Misc"],"sub_categories":["Languages \u0026 Runtimes","WASM"],"readme":"# lispBM (LBM)\n\nLispBM is a lisp or scheme like programming language for\nmicrocontrollers.  LispBM also borrows a couple of ideas from Erlang\nwhen it comes to concurrency, message passing, pattern matching and\nprocess monitoring.  The LispBM runtime system can be compiled for\neither 32 or 64 bit platforms and runs on a wide range of hardware\nsuch as for example STM32, NRF52, ESP32 or X86.  When running the\nLispBM runtime system on a microcontroller it can be built on top of\nChibiOS, FreeRTOS or ZephyrOS or, if you are adventurous, on bare-metal.\nLispBM can also be built to run on top of a regular linux. \n\n![LispBM mascot](https://github.com/svenssonjoel/lispBM/blob/master/mascot/lispbm_llama_small.png)\n\nThe LispBM mascot, Lispy the llama, was created by\n[PixiLadyArt](https://www.instagram.com/pixiladyart/). Thank you, Pixi! \n\n## Want to get involved and help out?\n\nThere are lots of interesting things to code on in and around the\nLispBM runtime system. I would love to interact with people who are interested\nin high-level programming languages on microcontrollers (or elsewhere) so please\ndo not be shy to make contact. Together we can make great stuff happen ;)\n\n1. Are you interested in microcontrollers and programming languages?\n2. You find it fun to mess around in C code with close to zero comments?\n3. Then join in the fun. Lots to do, so little time!\n4. Poke me by mail bo(dot)joel(dot)svensson(whirly-a)gmail(dot)com.\n\nThere are areas where insights and help would matter greatly. Some I can\nthink of are:\n\n1. Running LispBM on system simulators.\n2. LispBM efficiency, compilation, byte-code and real time garbage collection.\n3. Code size optimisation. Do more with less, while maintaining performance.\n4. Documentation and testing.\n5. Useful extension libraries.\n6. Lisp scriptable home automation.\n7. Lisp scriptable MIDI sequencers.\n8. Lisp scriptable Audio synthesizers.\n9. ...\n\n## Getting started \n\nThe easiest way to get started with LispBM programming is to use\n[VESC-Tool](https://vesc-project.com/vesc_tool) together with the\n[VESC EXPRESS Firmware](https://github.com/vedderb/vesc_express) on an [esp32c3](https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/hw-reference/esp32c3/user-guide-devkitm-1.html).\n\nVESC-Tool gives you access to a very capable [IDE](https://vesc-project.com/sites/default/files/lisp%20overview.png) for lisp programming on embedded systems\nand the VESC Express firmware provides built in functionality to interface with CAN, WIFI, BLE and UART\nas well as GPIO and display drivers.\n\nIf you are looking for a more bare-bones way to add scripting capabilities to your\nembedded system, LispBM is quite platform independent and can be compiled for many\ndifferent MCUs and systems. LispBM can tie into the rest of your application via\nwhat we call \"extensions\" which are C functions that can be called from your LispBM scripts. \n\n### Documentation\n\n - Work in progress [LispBM language reference](./doc/lbmref.md).\n - Gotchas and caveats [Gotchas and caveats](./doc/gotchas.md).\n - Work in progress [LispBM programming manual](./doc/manual).\n - C code documentation can be found [here](http://svenssonjoel.github.io/lbmdoc/html/index.html).\n - LispBM's internals are documented as a series of (now quite outdated) [blog posts](http://svenssonjoel.github.io).\n - There are [demonstrations on YouTube](https://youtube.com/playlist?list=PLtf_3TaqZoDOQqZcB9Yj-R1zS2DWDZ9q9).\n\n## The LBM REPL\n\nThere is an example REPL implementation that runs on X86 32 or 64bit in the `repl` directory.\nThe REPL depends on libreadline.\n\n\n**REPL Dependencies for 32Bit executable on 64Bit linux:**\n* libreadline\n* lib32readline\n* gcc-multilib\n\nOn Ubunty you can obtain the depencies by:\n`sudo apt-get install gcc-multilib libreadline-dev lib32readline-dev`\n\nThen issue command `make` in the repl directory.\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvenssonjoel%2FlispBM","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsvenssonjoel%2FlispBM","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsvenssonjoel%2FlispBM/lists"}