Scheme on Java on Common Lisp

Three languages in one brain: genius mashup or cursed sandwich

TLDR: A new demo lets Common Lisp and Scheme talk while running Java inside the same app, no extra bridges needed. Comments split between delight, plagiarism accusations, and performance tests, with fans calling it gloriously weird and skeptics asking if it can run real apps—hinting at future seamless multi‑language tooling.

How many languages can one app juggle? This tech demo crams Scheme (a minimalist coding language) onto Java (the widely used engine called the Java Virtual Machine) inside Common Lisp (a classic hacker favorite), all running in a single process — no bridges, no sockets, just nested calls. You can bounce numbers, strings, and lists across the boundary, call Scheme from Lisp, even ask Java’s String to shout “HELLO, WORLD” in uppercase, and the result comes right back. It’s not fast and not for production, but the proof-of-concept shows deep language interoperability via Kawa and SBCL.

Reactions were a rollercoaster. One camp cheered the chaos as “delightfully perverse,” joking that AI won’t blush at “perverting Lisp with Java.” The skeptics brought heat: a blunt “plagiarizing other people’s work?” sparked pushback and fact-checking. The tinkerers swooned over the “vintage procedural” vibes and wondered if you could skip the middle layers and poke the machine’s assembler directly. The pragmatists set a bar: if it can run a real app like SweetHome3D at usable speeds, it’s a win. Memes flew — “three languages walk into a bar,” “no serialization, just vibes” — while veterans noted it’s still a demo. Whether genius or cursed, the thread agreed on one thing: this mashup is weird, clever, and impossible to ignore.

Key Points

  • cl-kawa demonstrates Common Lisp and Kawa Scheme interop within one SBCL process via OpenLDK, without FFI or process boundaries.
  • Kawa compiles Scheme to Java bytecode; OpenLDK transpiles that bytecode to Common Lisp, which SBCL compiles to native assembly.
  • Capabilities include evaluating Scheme from Common Lisp, calling Scheme procedures, registering Common Lisp functions for Scheme, and exchanging basic values.
  • Prerequisites: SBCL, OpenLDK, Java 8 JDK (with rt.jar), and the Kawa 3.1.1 JAR (downloaded via Maven or manually).
  • A Hello World example shows a CL → Scheme → Java call chain using java.lang.String and String.toUpperCase(), with environment variables JAVA_HOME and optional LDK_CLASSPATH.

Hottest takes

"the description sounds delightfully perverse" — zombot
"Do you want a medal for plagiarizing other people's work?" — rhkalth
"run something like SweetHome3D at usable speeds" — anthk
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.