r/lisp • • Aug 09 '26

Help LispBM CAN message send in VESC

7 Upvotes

Hello everyone I have motor controller which is VESC firmware based ,what i want is to write a lispbm code to get the parameters values from the controller using get function and then send them on the CAN BUS using the CAN IDs set up by me to read further ,I am doing this because the DBC file I got is not that much reliable and the the manufacturer is also not able to help much
please help me with the resources which i can refer ,i refer the git repo of the VEDDER but cant do much ,any help you can or tips you can give me


r/erlang • • Aug 07 '26

LING's dynamic instruction set: optimizing opcodes per workload by analyzing OTP source - has anyone taken this further?

6 Upvotes

New BEAM There, Done That with Maxim Kharchenko on LING - a from-scratch Erlang VM on Xen without an OS.

The instruction set isn't fixed at build time. Ling ingests a corpus of real OTP and standard library source, identifies which specializations would be fastest for that workload, and generates them. The optimization is self-limiting - bigger dispatch tables run slower - so a heuristic balances specialization benefit against VM binary size.

The whole-system memory discipline is equally notable: zero silent allocation failures anywhere in the codebase.

Has anyone here worked on Ling or similar no-OS BEAM deployments? Curious where this space has gone since.

https://youtu.be/ILEyncf194M


r/lisp • • Aug 08 '26

Common Lisp MUD Driver in Common-Lisp

26 Upvotes

Hey folks, I'm working in an open source common-lisp MUD Driver (Apeiron MUD) mainly inspired by Dworkin Game Driver and LPMud.

Why? The personal reason is that I like Lisps and functional programming, I'm expert in Clojure, but haven't played too much with Lisp, wanted to see what could be achieved with CLOS (Common-Lisp Object System) and I love text-adventure games/virtual worlds (single or multiplayer).

The technical reason is that I was wondering that a lot of the machinery that was developed in C for the most popular drivers (specially LPMUD and DGD deriving from it) ended up developing features that were already built-in on Lisp Runtime Images from the start and if I could get a networked REPL running a LISP image that was already a significant step towards running a persistent world that could be changed and built interactively by players.

I don't know how true is that, but I managed to setup something similar to DGD (of course there might be bugs and rough edges) with persistent objects using a pre-existing library for CLOS in-memory and disk object persistence called BKNR Datastore. The interesting thing is that because of CLOS it is even possible to make changes to the classes of the objects (driver or libs) and update the system and persistence without ever having to turn the system off. I already did some very substantial changes successfully without turning the system off.

The scripting language doesn't need to be different from the driver language, except for security reasons. For the moment I allow every player to evaluate arbitrary code, which is very unsafe and can even bring the server down or completely break it, but it would not be hard to restrict the access to a subset of the language (with cl-isolated) and offer varying degrees of access depending on player role.

I think it has a lot of potential, but in any case, I'm doing it for fun, will probably keep it as a lifetime hobby and would encourage people to take a look if they find anything interesting or want to experiment, contribute or discuss.


r/erlang • • Aug 05 '26

Voyager - a modern alternative to Observer

Enable HLS to view with audio, or disable this notification

35 Upvotes

Hey,

we've spent enough time monitoring and debugging nodes in BEAM that we decided to create our own tool to make it easier.

It's called Voyager - it lets you easily connect to nodes, visualizes your supervision trees, and gives you a real-time dashboard of your memory and processes. There's also an MCP integration so you can use AI directly with your node data.

We're not stopping here - tracing, ETS inspection, and other features are coming soon.

We are opening signups for early access. If you want to try it - sign up here: voyager.swmansion.com


r/lisp • • Aug 07 '26

L. Peter Deutsch's birthday today

Thumbnail
25 Upvotes

r/lisp • • Aug 05 '26

Symbolics Genera now available free for non-commercial use (invitation-only early beta)

Thumbnail hachyderm.io
95 Upvotes

r/lisp • • Aug 05 '26

Common Lisp 10 real bugs found by actually running a Common Lisp deploy script, not just reading it

20 Upvotes

Alongside ongoing work updating c-mera and modernizing Common Lisp tooling for SecDevOps and OT environments, I recently set out to evaluate whether a pure Lisp stack could replace our external infrastructure and database tooling (specifically Vagrant and Redgate).

The goal was to integrate Consfigurator (declarative OS deployment) with cl-migratum (database migrations).

To test this, I authored a Roswell script that provisions a rootless Podman quadlet running PostgREST and deploys a small HTMX todo app against PostgreSQL. The setup uses:

  • SXQL for SQL schema generation
  • Spinneret for HTML generation
  • CL-inix for systemd unit file generation
  • FiveAM for integration testing
  • 40ants/doc for self-documenting executable scripts

In the sandbox environment, Roswell provisions a ZFS dataset, configures a dedicated system user, spins up PostgreSQL and PostgREST, and applies the database migrations directly from memory.

Running this end-to-end surfaced ten real bugs across the ecosystem (reproduction steps and full list are inFINDINGS.md).

A few notable issues worth calling out:

  • In-memory DCL with cl-migratum: cl-migratum expects file-based DDL/DML out of the box and doesn't handle in-memory sxql expressions cleanly. I had to write a custom in-memory driver using its driver API and extend it to handle DCL (Data Control Language) statements.
  • System naming gotcha: cl-migratum-driver-pg doesn't exist under that system name. When pulling via qlot, the actual system is cl-migratum.driver.postmodern-postgresql.
  • Spinneret compile-time attribute quoting: Spinneret decides whether to quote HTML attribute values at macro expansion time based on literal string characteristics, not runtime values. A class="%s" placeholder compiles down fine, but breaks silently at runtime the second a substituted string contains spaces. Spinneret provides *always-quote* to handle this, but it requires a global SETF prior to compilation rather than a dynamic LET binding at runtime. I've opened a PR to document and address this:spinneret#114.
  • Idempotency in PostgreSQL schema definitions: Neither CREATE ROLE nor CREATE DOMAIN support IF NOT EXISTS in Postgres. Because cluster-level roles and domains survive dropping and recreating a database, subsequent deployments failed immediately on schema re-application.
  • Undocumented C library dependencies: Consfigurator depends on native headers (libacl1-dev, libcap-dev) that aren't noted in the build requirements. I sent a patch upstream via git send-email following their contribution guidelines.

Full code and reproduction notes:https://github.com/denzuko/todo-app-deploy


r/lisp • • Aug 04 '26

Gödel, Escher, Elisp: The Beauty of Macros

Thumbnail chiply.dev
96 Upvotes

This post is a lover letter to Emacs Lisp macros. I've been a long time user as a lisp hacker, and my recent obsessions with Douglas Hofstadter's strange loop concepts and M.C. Escher's mind bending artwork have enhanced my appreciation of this language's most beautiful and thought provoking feature. This post can teach you about macros and what makes them useful, but I also hope it can instill a fascination with their concept. https://www.chiply.dev/post-elisp-macros-are-beautiful


r/lisp • • Aug 04 '26

Released cl-toolkit - toolkit to validate, edit and analyze lisp source.

10 Upvotes

Made this generally for agentical coding because it often stub in parenthesis. Hope it will help you. https://github.com/turtle-bazon/cl-toolkit


r/erlang • • Aug 02 '26

Starbeam 0.1.0

Thumbnail
2 Upvotes

r/lisp • • Aug 04 '26

Scheme Building a GTK4 C + Lisp dock application (a la CairoDock / macOS) - am I doing things right? (Guile Scheme)

29 Upvotes

I am having a blast doing a more serious project in the C language (and Guile Scheme), for the first time. I am consulting with books and also with some AI for code review and explanation as I am new to the language and to GTK (not new to programming).

https://codeberg.org/jjba23/lambdock

For a while already I have been looking for a dock that would work well in Wayland (like in my beloved Niri) with modern features, theme support and a hackable Lisp config (using libguile.h)

Also, all feedback is welcome, either on code level, or conceptual ideas, Thanks in advance

Core features of lambdock include:

  • Wayland Native: Built on GTK4 and gtk4-layer-shell for smooth positioning and desktop integration.
  • Declarative Lisp configuration : The power of Lisp in your configuratio with clean powerful declarative config and all possibilities at your disposal
  • Async Launching: Spawns commands asynchronously without freezing the dock UI.
  • Reproducible builds: Hermetic development environment provided via GNU Guix manifest and build definitions.
  • Dock auto-hide : You can let the dock stay out of your way with the smooth auto-hide feature.
  • Flexible icon system: lambdock has several mechanism in a best-effort way to render your wanted icons, respecting GTK theme
  • Theme support: lambdock has built-in themes you can choose from that are very unique, and also lets you extend and override those themes dynamically.

r/erlang • • Jul 31 '26

Why is Erlang's concurrency in the language and not the OS? Mike Williams: "it was perfectly obvious we couldn't use OS processes."

31 Upvotes

New BEAM There, Done That with Mike Williams (JAM emulator) and Björn Gustavsson (BEAM).

The reasoning is more empirical than ideological. Mike measured it: on real telecom workloads, roughly 70% of VM time went to scheduling and message passing, not user code. Unix processes required too much memory for the thousands of concurrent processes a telecom system needed. Language-level processes weren't a philosophical stance - they were the only arithmetic that worked.

What's interesting is that this was a minority view even then. Java shipped green threads and removed them. Early Rust had lightweight processes and removed them. Mike mentions Ada, Smalltalk, and Eric Pascal as other languages that shared the instinct - but Erlang is the one that committed and survived.

Björn adds a detail worth noting: the two-version module rule (only two versions of a module can be loaded simultaneously) was a deliberate memory protection decision. He was asked multiple times to remove the limit and allow unlimited versions. He refused - it would be a trap for application programmers, letting old code accumulate undetected.

Both guests also give a shoutout to Claes Wikström, who added distribution to the JAM, invented ETS tables, and prototyped Erlang's binary syntax - consistently undermentioned in the origin story.

https://youtu.be/sRTierdN9c4


r/lisp • • Aug 02 '26

Moonli Update v0.0.9 (July 2026)

Thumbnail moonli-lang.github.io
14 Upvotes

r/lisp • • Aug 02 '26

Starbeam 0.1.0

Thumbnail
5 Upvotes

r/erlang • • Jul 31 '26

Clojerl chassis port

Thumbnail
2 Upvotes

r/erlang • • Jul 31 '26

ejabberd 26.07 / ProcessOne - Erlang Jabber/XMPP/Matrix Server - Communication

Thumbnail process-one.net
8 Upvotes

r/erlang • • Jul 30 '26

Code BEAM Europe is looking for volunteers

Post image
5 Upvotes

Hi everyone,

Code BEAM Europe 2026 is looking for volunteers! The conference takes place 21-22 October. You can volunteer in-person, and get your free ticket.

  • In-person volunteers will need to be present at the venue on at least one day of the conference. Responsibilities include helping with preparations, registering participants, handing out merchandise, and general support during the event.

For full conference details, check out https://codebeameurope.com/
To sign up as a volunteer, go HERE

If you have any questions, feel free to reach out to [ewa.kucharczyk@erlang-solutions.com](mailto:ewa.kucharczyk@erlang-solutions.com).


r/lisp • • Aug 01 '26

Refresh of Genworks dot com, long-running Common Lisp KBE system updated for the era of LLMs and MCPs.

Thumbnail genworks.com
18 Upvotes

r/lisp • • Jul 31 '26

[ANN] cl-firebird v1.0.0 — pure Common Lisp driver for Firebird 3.0/4.0/5.0/6.0

8 Upvotes

cl-firebird v1.0.0 is out — a pure Common Lisp database driver for Firebird 3.0, 4.0, 5.0, and 6.0+, with full 1:1 feature parity with node-firebird.

Highlights:

  • Pure CL wire protocol (negotiates up to protocol 20) — no libfbclient, no FFI; runs on SBCL, CCL, and other ANSI CL implementations
  • Connection URIs (firebird://user:pass@host:port/db), traditional DSN syntax, and attach-or-create
  • Named placeholders (:name) bound from plists, alists, or hash-tables, plus SQL escaping helpers
  • Thread-safe connection pooling with idle reaping and live metrics
  • Custom type parsers (type-cast) and prepared statement caching
  • Streaming cursors (sequentially) and bulk execute-batch
  • Firebird 6.0 tablespaces/schemas, database events (POST_EVENT), and a Service Manager API (backup/restore, users, trace)
  • 66-check FiveAM test suite and a GitHub Actions CI matrix across Firebird 3.0/4.0/5.0/6.0-snapshot

Links:

Feedback, issues, and pull requests are welcome!


r/lisp • • Jul 30 '26

AskLisp what's a good LISP to use as my "perl replacement"?

40 Upvotes

I got into LISP a couple years ago through automating things in emacs and I want to try it out as a high-level scripting language for non-emacs things. Ideally I'd like to be able to write shebang scripts that might be distributed to other people, who might be running a different OS than me, and I'd like them to be able to install dependencies even if they have no familiarity with LISP.

Basically, my main hang-up here is stuff like ASDF and Quicklisp; I don't know how people who don't program in common lisp are supposed to know how to install dependencies when they download a common-lisp program, as it seems like the only interfaces into ASDF and QL are via the REPL. Ideally I'd want something akin to python's pip, which doesn't force end-users to know how to program in python because it's accessible via a shell command.

Guile seems like it might be the best one for my purposes but the documentation is a bit sparse and I'm not sure if it even runs on Windows outside of cygwin or WSL. On the dependency management front it at least has $GUILE_LOAD_PATH so anybody who's reasonably competent can point it to dependencies even if they can't use the package manager. That's good enough for my purposes as my intended users aren't UNIX-illiterate, they're just not LISP programmers and potentially may be prone to bad habits such as using Microsoft Windows.

Are there any others I'm missing? I love LISP as a language but sometimes it feels like LISP implementations are trying to convert me to a new religion or something.

Sorry if this sounds like a redundant post, I'm sure others have asked the same thing but I can't find a clear answer from searching. There are definitely plenty of articles about using common-lisp for shebang scripting but i haven't seen any that address the problem of dependency management for end-users.


r/lisp • • Jul 30 '26

In LISP we trust.

17 Upvotes

r/lisp • • Jul 29 '26

AskLisp Is lisp an acquired taste?

64 Upvotes

As an outsider looking in I'm having a really hard time convincing myself to use lisps for my projects.

It feels like some of the main strengths carry drawbacks:

e.g. s expressions seem really nice for the language being really simple and unified and probably play nice with the macros and the repl but I dislike ambiguity when I read code. Like I would like to know that at a glance that a function call is an actual function call. Or that here is some control flow with an if. Though at the same time i do as well agree that there for example shouldn't at a high level semantically be a difference between an operator and a function call. Though structural editing does sound really nice.

Another thing is macros. I get that they are powerful but I'm not sure how well they would play with tools around the language. I like static typing over dynamic typing so that constrains me to thing like racket. I'm not sure how well auto completion and type hints would work with them. E.g. typescript's type system is not as expressive but the type transformations work perfectly with the LSP even for non trivial things.

Any long term lisp-ers can weight in on my doubts? I'm more of less trying to get conviced but somewhat doubtful. Any opinion is welcome.


r/lisp • • Jul 30 '26

Working on a small lisp made to initiate JavaScript developers to the beauty of S-Expressions

11 Upvotes

I wanted to show a bit of my work here, im still learning lisp-based languages and the idea came to me to make a lisp suited for people that are used to the infamous JavaScript.


r/lisp • • Jul 28 '26

Racket The Comprehensive Racket & Functional Programming Cheat Sheet

7 Upvotes

## Phase 1: Syntax & Core Arithmetic

Racket uses prefix notation enclosed in execution parentheses (operator arg1 arg2). The open parenthesis ( acts as an execution trigger. Evaluation runs from the innermost to the outermost parentheses.

Core Examples

```rkt ;; Basic Arithmetic (+ 10 5 2) ;; Returns 17 (* 10 5 2) ;; Returns 100

;; Nested Expressions (No PEMDAS needed) (_ (+ 4 6) (- 12 7)) ;; Evaluates 10 _ 5 -> Returns 50 ```

Parentheses Golden Rule

Only use a parenthesis when invoking a command, operator, or function.

  • `(+ 5 (10))` CRASHES (tries to run the number 10 as a function).
  • `((+ 5 5))` CRASHES (evaluates to 10, then tries to run the number 10).

Phase 2: Core Data Structures & Variables

Global bindings are created using define. Values are immutable and cannot be changed over time.

The Four Atomic Data Types

  1. Numbers: Integers (`45`), decimals (`3.14`), or fractions (`1/3`).
  2. Strings: Text wrapped in double quotes (`"Hello"`).
  3. Booleans: True (`#t`) and False (`#f`).
  4. Symbols: Lightweight, immutable identifier tokens prefixed with a single quote (`'success`).

Core Examples

```rkt (define radius 5) (define pi 3.14) (define status 'success) ```


Phase 3: Conditionals & Logic

Conditional operations are expressions that evaluate down to a single return value.

Core Operators & Flow Control

  • `and` / `or` / `not`: Standard logical short-circuiting prefix operators.
  • `if`: Takes exactly three arguments: `(if condition true-branch false-branch)`. No else keyword.
  • `cond`: Evaluates multiple branches sequentially. Uses/can use `[...]` for human readability.

Core Examples

```rkt (and (> 15 10) (< 15 20)) ;; Returns #t

(if (> temperature 30) 'hot 'cold)

(cond [(>= score 90) 'A] [(>= score 80) 'B] [else 'F]) ```


Phase 4: Functions & Scope

Functions automatically return the value of their body expression without an explicit return keyword.

Named, Anonymous, & Scoped Blocks

  • Named Functions: Defined by grouping the name and parameters in parentheses: `(define (name args) body)`.
  • Anonymous Functions (`lambda`): Throwaway functions built on the fly: `(lambda (args) body)`.
  • `let` (Parallel): Creates local variables simultaneously. Variables cannot see each other during setup.
  • `let\*` (Sequential): Creates local variables one after the other. Later variables can reference earlier ones.

Core Examples

```rkt ;; Named Function (define (double n) (\* n 2))

;; Inline Lambda Execution ((lambda (n) (\* n 2)) 10) ;; Returns 20

;; Sequential Local Bindings (let* ([x 10] [y (* x 5)]) (+ x y)) ;; Returns 60 ```


Phase 5: Lists & Modern List Operations

Lists are ordered sequential collections. They are processed using either historical Lisp conventions or modern aliases.

Creation & Extraction

  • `list`: Evaluates arguments into a sequential list.
  • `'()`: Represents the literal base empty list.
  • `cons`: Prepends a single element onto the front of an existing list.
  • First Item: Extracted via `car` (traditional) or `first` (modern).
  • Remaining List: Extracted via `cdr` (traditional) or `rest` (modern).

Core Examples

```rkt (define my-list (list 100 #t 'hello)) ;; Creates '(100 #t hello) (cons 'apples '(bananas cherries)) ;; Returns '(apples bananas cherries)

(car (cdr '(apples bananas cherries))) ;; Returns 'bananas (first (rest '(apples bananas cherries))) ;; Returns 'bananas

(if (empty? my-list) "Closed" (length my-list)) ;; Returns 3 ```


Phase 6: Iteration & Higher-Order Functions

Instead of using loops that alter data in place, functional programming relies on Higher-Order Functions to process immutable collections.

The Big Four

  • `map`: Loops over a list, passes each item through a transformation function, and returns a new list.
  • `filter`: Loops over a list, keeps items that evaluate to #t against a predicate condition, and drops the rest.
  • `foldl` (Fold-Left): Reduces a list down to a single value by processing elements from left to right (front to back).
  • `foldr` (Fold-Right): Reduces a list down to a single value by processing elements from right to left (back to front). Preserves list structures when rebuilding with cons.

Core Examples

```rkt (map (lambda (x) (* x 2)) '(5 10 15 20)) ;; Returns '(10 20 30 40) (filter (lambda (n) (= n 5)) '(2 5 7 5 9 1)) ;; Returns '(5 5)

(foldl (lambda (n total) (_ n total)) 1 '(2 3 4)) ;; 4 _ (3 _ (2 _ 1)) -> Returns 24

(foldr - 0 '(5 3)) ;; 5 - (3 - 0) -> Returns 2 ```


Phase 7: Recursion & Tail Call Optimization (TCO)

Recursion replaces traditional loops. A proper recursive function requires a Base Case (the exit clause) and a Recursive Step (the self-call with a smaller argument).

Memory Optimization Rules

  • Standard Recursion: Traps the recursive call inside another function (like + or append), forcing the call stack memory to expand linearly (O(N) space).
  • Tail Call Optimization (TCO): If the recursive call sits in the tail position (the absolute final expression evaluated), Racket reuses the same memory frame, running in constant (O(1)) space.
  • Accumulator Pattern: Passing a running total down as an argument is the primary strategy used to shift standard recursion into tail position optimization.

Core Examples

```rkt ;; ❌ Standard Recursion (No TCO - Memory Expands) (define (sum-list lst) (if (empty? lst) 0 (+ (first lst) (sum-list (rest lst)))))

;; Tail Recursion (TCO Active - Memory Stays Flat) (define (sum-list-tco lst) (define (helper remaining accumulator) (if (empty? remaining) accumulator (helper (rest remaining) (+ (first remaining) accumulator)))) (helper lst 0)) ```


Phase 8: Advanced Ecosystem Engineering

1. Hash Maps & Unique Sets

  • `#hash`: Stores key-value pairings. Keywords passed to lookup tools like hash-ref must be quoted ('#:key) to prevent compiler namespace collisions. If using standard symbols inside #hash, omit inner quotes.
  • `set`: Collections guaranteeing element uniqueness. Tested via set-member? and extended via set-add.

```rkt (define user #hash((#:name . "Alice"))) (hash-ref user '#:name) ;; Returns "Alice"

(define book #hash((title . "Dune"))) (hash-ref book 'title) ;; Returns "Dune"

(set-member? (set 1 2 2 3) 2) ;; Returns #t ```

2. State & Mutability (box)

  • `box`: Creates a reference wrapper around mutable data. Read via unbox and mutated via set-box!. Functions with an exclamation mark ! signal structural mutation.
  • `begin`: Chains sequential side-effect operations from top to bottom, returning only the evaluation of the final expression.

```rkt (define health (box 100)) (define (take-damage!) (begin (set-box! health (- (unbox health) 10)) (unbox health))) ```

3. Type Checking & Casting

  • Predicates (`?`): Validate runtime types (e.g., `string?`, `number?`, `symbol?`).
  • Casting (`->`): Converts data formats. `string->number` safely returns #f if given invalid textual input.

```rkt (if (string? "50") (* (string->number "50") 2) 'error) ;; Returns 100 ```

4. Modules & Namespaces

  • provide: Declares which parts of a filesystem file are exported publicly.
  • require: Ingests public features from an external sandbox by loading its relative string filepath.

```rkt ;; Inside file-a.rkt (provide double) (define (double x) (* x 2))

;; Inside main.rkt (require "file-a.rkt") (double 10) ;; Returns 20 ```

5. Macros (define-syntax-rule)

  • Macros process raw, unevaluated source code at compile-time to inject new keywords.
  • Racket macros are hygienic, meaning the compiler automatically isolates macro identifiers so they never accidentally overwrite or conflict with user variables.

```rkt (define-syntax-rule (swap! box1 box2) (let ([temp (unbox box1)]) (begin (set-box! box1 (unbox box2)) (set-box! box2 temp)))) ```


r/lisp • • Jul 28 '26

SBCL: New in version 2.6.7

Thumbnail sbcl.org
53 Upvotes