• Stars
    star
    712
  • Rank 63,545 (Top 2 %)
  • Language
  • Created almost 5 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A list of Lisp-flavored programming languages

Awesome Lisp Languages

A list of lisp-flavored programming languages implemented on top of existing programming languages.

Why should I care as a lisp programmer?

If you already love s-expressions then lisp-flavored languages will make it nicer when you need to build on existing platforms. In case the target language does not support advanced features like macros and REPL-driven development, these can often be easily added by using the s-expressions layer.

The second point is about helping to spread lisp and its powerful ideas more. The example of Clojure and its relative popularity shows that being hosted on existing mainstream language and leveraging ecosystems of existing libraries is a key to broader adoption. It also lowers the barrier for people to try lisp and learn about the ideas behind it. Traditionally to learn lisp one needs to learn and get used to very unfamiliar syntax while at the same time being exposed to a completely new environment and ecosystem. Taking the environment out of the equation can make the experience of trying out lisp more approachable.

Why should I care as a programmer in other language?

Learning about Lisp will make you a better programmer. You can pick any language below based on the language you are familiar with to get you started with the lisp syntax more easily. It is also worth to read a post to get intuition for lisp syntax.

In general when one learns any new programming language it opens new horizons and improves programming insight. Modern programming languages are converging and sometimes are being very similar to each other. The similarities can be missed because they are hidden behind a specific syntax.

If we translate the languages to a common syntax the similarities are more apparent and the different concepts stand out more. That way we can focus on the new innovative concepts and ideas to broaden our horizons.

Classification

  • Type-A: Simple syntax mapping
    These languages usually just provide s-expressions (parentheses) syntax and are translated to the target language without extra features/semantics. Also sometimes being called transpilers.

  • Type-B: Syntax and additional semantics
    In addition to translating the syntax some additional features/semantics that are not present in the target language are added. Usually if a language does not fit in other category, it can be considered being a Type-B.

  • Type-C: Clojure-like
    Distintive syntax that besides parentheses also uses brackets and curly braces. Distinctive features are persistent data structures, namespaces and vars, protocols.

  • Type-L: Common Lisp
    Implementing ANSI Common Lisp standard or being inspired by it.

  • Type-S: Scheme
    Implementing some of RxRS standards or being inspired by Scheme.

Languages

Listed primarily by the language which can be used for interoperability / FFI.

Language section does not necessarily mean the language of the implementation. For example Ferret compiles into C++ but the compiler is written in Clojure. Or Carp interops with C but it is mostly written in Haskell. In case of SBCL it contains only small amounts of C, but it is implemented almost entirely in Common Lisp.

Multi Lang

  • Bigloo [Type-S] compiles into native binaries, interop with C, JVM, .NET
  • Lux [Type-B] functional, statically-typed Lisp that will run on several platforms
  • Mal is an educational lisp with implementations in dozens of languages. It is a great resource for learning about lisp implementation.
  • Ribbit [Type-S] small and portable Scheme implementation (R4RS, 4 KB footprint), AOT and incremental compilers, targets C, JavaScript, Python and Scheme
  • STELLA - strongly typed, object-oriented, compiles down to Common Lisp, C++, or Java
  • Shen [Type-B] implementations in many programming languages, builtin pattern-matching and logic programming, optional static typing and lazy evaluation
  • Wax [Type-A] tiny programming language, strongly statically typed, manual memory management, transpiles to C, C++, Java, TypeScript, Python, C#, Swift, Lua and WebAssembly
  • Zick Standard Lisp minimal lisp with 42 implementations

Common Lisp

  • SBCL [Type-L] high performance native code compiler, native threading support, type inference engine
  • CLISP [Type-L] uses bytecode compiler, easily portable
  • Clozure CL [Type-L] fast compilation speed, native threads, precise generational compacting garbage collector, convenient foreign-function interface
  • Clasp [Type-L] compiled using LLVM, seamless integration with existing libraries
  • ECL [Type-L] embeddable and portable, can build standalone executables
  • Coalton [Type-L] efficient, statically typed functional programming language that supercharges Common Lisp
  • See list of additional implementations.

Scheme

  • Chez Scheme [Type-S] compiles to native binaries, among the fastest available Scheme implementations, R6RS
  • Chicken Scheme [Type-S] produces portable and efficient C, supports R5RS and R7RS (work in progress)
  • Guile [Type-S] embedable, useful for extending programs with scripting
  • Racket [Type-S] large standard library, powerful macro system, includes DrRacket IDE
  • Cyclone [Type-S] Scheme-to-C compiler, R7RS, native threading support, generates fast native binaries
  • Microscheme [Type-S] Scheme subset for microcontrollers (like Arduino boards)
  • Loko Scheme [Type-S] runs on bare hardware
  • See list of additional implementations and benchmarks.

C/C++

  • C-Mera [Type-A] also includes extensions to generate code to run on CUDA, GLSL
  • Cakelisp [Type-A] performance-oriented, good for game development, compiles down to C/C++, macros and compile-time code modification
  • Carp [Type-B] statically typed, no GC (Rust-like borrow checking)
  • Dale [Type-B] Lisp-flavoured C with additional features, no GC, LLVM backend
  • Extempore [Type-S] designed for live coding and music performances, temporal scheduling based on audio card sample rate
  • FemtoLisp [Type-S] scheme-like lisp, powers the compiler of the Julia language
  • Ferret [Type-C] aimed towards embedded systems
  • Janet [Type-B] embedable, large standard library, GC
  • Jank [Type-C] LLVM-hosted, Clojure-compatible, type-analysis, JIT
  • jo_clojure [Type-C] Fast Embeddable Clojure in C/C++, including persistent datastructures and STM
  • Lcc [Type-A] Lisp-like syntax for writing C
  • Liz [Type-A] written as EDN, compiles to Zig, customizable memory allocators, native binaries for many architectures
  • Maru [Type-B] minimal self-hosting lisp, multimethods, user-defined types and structures, GC
  • PicoLisp [Type-B] compiled to bytecode and interpreted, C and Java interop, built-in database and GUI
  • Owl Lisp [Type-S] dialect of the Scheme, code can be interpreted or compiled into C files
  • Toccata [Type-C] Clojure-inspired, gradually typed, no nil values, reference counting, compiles into native binaries

C#

  • Clojure CLR [Type-C] great for game development with arcadia and unity

Erlang

Fortran

  • fscheme [Type-S] small scheme interpreter written in Fortran 95
  • Schemetran [Type-A] Expressing Fortran computations in Scheme, compiles to readable Fortran code

Go

  • Joker [Type-C] interpreter, linter, great for scripting, Go interop is very limited
  • Slick [Type-L] Lisp/Scheme-style s-expression surface syntax for the Go programming language
  • Zygo [Type-B] embedable, call into native Go using reflection, optional infix syntax
  • ZYLISP [Type-A] simple Lisp that compiles to Go (source or bytecode)

Java

  • ABCL [Type-L] CL interpreter and compiler, embedable using Java scripting API (JSR-223)
  • Armed Bear Clojure [Type-C+L] Common Lisp embedded in Clojure via ABCL
  • Clojure [Type-C]
  • Kawa [Type-S] scheme implementation (R7RS)
  • PicoLisp [Type-B] compiled to bytecode and interpreted, C and Java interop, built-in database and GUI
  • Venice [Type-C] Clojure-inspired, sandboxed, Java interop, 800+ builtin functions

JavaScript

  • BiwaScheme [Type-S] compact Scheme written in JavaScript, integrates well with web browsers and Node
  • ClojureScript [Type-C]
  • eslisp [Type-A] S-expression syntax for ECMAScript/JavaScript, Lisp-like macros
  • JACL [Type-L] extended subset of Common Lisp, async reader and REPL development workflow
  • JSLisp (source) [Type-L] Lisp-2, similar to Common Lisp, includes GUI library and IDE
  • LIPS [Type-S] similar to BiwaScheme, has better notation to call JS functions
  • Lumen [Type-A] self-hosted Lisp for Lua and JavaScript, uses arrays as first-class datastructures
  • Parenscript [Type-L] Common Lisp to JavaScript translator, native JS types, native calling convention
  • RacketScript [Type-S] Racket to JavaScript compiler, interop with both Racket and JS ecosystem
  • Valtan [Type-L] Common Lisp to JavaScript compiler
  • Whalesong [Type-S] Racket to JavaScript compiler
  • Wisp [Type-C] Clojure-like, has protocols, no persistent data structures

Julia

  • LispSyntax.jl [Type-A] Clojure-like lisp syntax to Julia translator with convenience macros, uses Julia's compiler and JIT

Lua

  • Fennel [Type-A] full Lua compatibility, embedable, compiled code with no runtime dependency
  • Lumen [Type-A] self-hosted Lisp for Lua and JavaScript, uses arrays as first-class datastructures
  • Urn [?] focus on minimalism, should work with LuaJIT, influenced by Common Lisp and Clojure

Objective-C

  • DreamLisp [Type-B] Clojure-inspired, originally based on MAL, added modules, lazy collections
  • nu [?] interpreted

OCaml

PHP

  • Phel [Type-C] Phel is a functional programming language that compiles to PHP.

Python

  • Hy [Type-A] compiles to Python AST, use Python ML libraries, runs on PyPy
  • Hissp [Type-A] compiles to a functional subset of Python, macro metaprogramming with Python ecosystem
  • Pixie [Type-B] Clojure inspired, written in RPython, custom GC and JIT
  • Basilisp [Type-C] Clojure-compatible, targeting Python3.6+

R

  • llr [Type-C] Clojure inspired, in R compiles and interops with R

Rust

  • BLisp [Type-B] statically typed scripting language, type inference, algebraic data types, generics
  • GameLisp [Type-B] scripting language for Rust game development, interpreted, pattern‑matching, coroutines, macros
  • Ketos [Type-B] scripting and extension language for Rust programs, compiled to bytecode
  • Rustly [Type-C] transpiler, only small subset of Clojure supported

Shell

  • Gherkin [Type-B] (dormant) implemented in Bash, shell interop
  • Fleck [Type-A] Clojure-like, based on Mal, packaged as single-file Bash script

VHDL

  • Vhdl Lisp - alternative s-expression based notation to describe programmable integrated circuits (FPGAs)

WASM

  • Arboreta WASM [?] Common Lisp tooling for WebAssembly
  • clj-wasm [Type-A] Clojure-flavored WASM's text format
  • Liz [Type-A] general purpose programming language, supports WASM compilation target
  • Schism [Type-S] self-hosting compiler from a subset of R6RS Scheme to WebAssembly
  • WebAssembly Scheme [Type-S] partial implementation of R7RS scheme, written using WebAssembly Text format

Misc

Contribute

Anything incorrect? Is there an interested project that is missing? Open an issue or PR to request adding a project to the list.

More Repositories

1

markmap

Visualize markdown documents as mindmaps
JavaScript
1,696
star
2

closh

Bash-like shell based on Clojure
Clojure
1,616
star
3

liz

Lisp-flavored general-purpose programming language (based on Zig)
Clojure
261
star
4

GrammKit

Generate diagrams for parser grammars
JavaScript
235
star
5

lazy-lsp.nvim

Neovim plugin to auto install LSP servers
Lua
192
star
6

latinize

Simple library to convert accents (diacritics) from strings to latin characters.
JavaScript
148
star
7

atom-markdown-mindmap

Visualize markdown files as mindmaps in Atom editor
CoffeeScript
117
star
8

warehouse

Warehouse.js is a data storage layer for node.js and browser providing unified API for many supported storage engines (MongoDB, MySQL, SQLite, in-memory and others).
JavaScript
103
star
9

clojurescript-guide

My notes on ClojureScript
69
star
10

react-blessed-contrib

A wrapper for blessed-contrib widgets to be rendered with react-blessed.
JavaScript
61
star
11

notcurses-zig-example

Demo showing how to use Notcurses library for building terminal UIs with Zig
Zig
60
star
12

kmdoc

KMDoc is a software for an intelligent representation of knowledge useful for quick learning and browsing.
JavaScript
43
star
13

casio-f91w-fsm

Interactive model of the Casio F-91W watch using statecharts
Clojure
29
star
14

longdown

Convert longform markdown files to outline format used by Logseq
Clojure
28
star
15

parpar.nvim

Plugin for Neovim that seamlessly integrates Parinfer and Paredit for editing lisp code
Lua
27
star
16

dinodoc

Polyglot documentation system for building unified documentation sites
Clojure
27
star
17

osquery-rest-adapter

Visualize information about your OS (REST adapter for osquery compatible with Vega)
JavaScript
26
star
18

stratify

Visualize structure and dependencies of Clojure codebases
Clojure
21
star
19

notcurses-clojure-example

Demo showing how to use Notcurses library for building terminal UIs with Clojure
C
16
star
20

humble-outliner

Clojure
13
star
21

bindem

A light-weight library providing Knockout-like two-way declarative data binding for Backbone.
JavaScript
13
star
22

knowledge-base

Notes on various subjects represented using KMDoc knowledge format
HTML
8
star
23

archieml-peg

Alternative parser for ArchieML in JavaScript using PEG (Parsing Expression Grammar)
JavaScript
8
star
24

dotfiles

Shell
7
star
25

git-sheet

Interactive page which presents most used git commands as a cheat sheet.
JavaScript
6
star
26

czech-stemmer

This is a port of stemmer for Czech language to Javascript, for both node.js and browser.
JavaScript
6
star
27

jquery-tagin

Simple jQuery Tag Input plugin with advanced features
JavaScript
5
star
28

userstyles

CSS
5
star
29

solid-cljs

Clojure
5
star
30

humble-graal

Compile HumbleUI apps with GraalVM
Clojure
5
star
31

recline-warehouse

code for integration of Recline.js with Warehouse.js and other various additions to Recline
JavaScript
4
star
32

intools

Clojure
4
star
33

github-comparison

Show comparison of github repos in a table with this simple javascript component.
JavaScript
4
star
34

testing-without-mocks-clojure

Clojure
4
star
35

daba

Clojure
3
star
36

MEB-Genetic-Algorithm

Genetic Algorithm implementation in javaScript solving Minimum Energy Broadcast Problem
JavaScript
2
star
37

whitescape.js

Library for escaping whitespace characters
JavaScript
2
star
38

QueryHammer

QueryHammer is a visual tool that helps you create queries interactively
JavaScript
2
star
39

adventofcode

Clojure
2
star
40

rama-clj-playground

Clojure
2
star
41

lumo-unpack-binding

Unpack binary node bindings for apps bundled with pkg-lumo
JavaScript
1
star
42

vmp

1
star
43

calculator-exercise

Clojure
1
star
44

cljs-stickies

Sticky notes demo app with Drag n Drop written in ClojureScript
Clojure
1
star
45

notemx

NoteMX is a note taking app for Android with Dropbox sync using React Native
JavaScript
1
star
46

livereloader

[Deprecated] Simple HTTP server with livereload functionality. No setup, other apps or browser extensions required.
JavaScript
1
star
47

x11-playground

JavaScript
1
star
48

cljs-kanban

Kanban board with drag and drop written in ClojureScript
Clojure
1
star
49

commandray

CommandRay is a graphical command-line tool to discover and execute commands more efficiently
JavaScript
1
star
50

cljs-date-format-tool

A simple tool that helps creating date format strings
Clojure
1
star
51

pickfile

JavaScript file picker component supporting drag and drop, file chooser and remote URL
JavaScript
1
star