Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added last commit info #23

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

damon-kwok
Copy link

@damon-kwok damon-kwok commented Dec 9, 2021

Preview

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

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

Common Lisp

  • last-commit SBCL [Type-L] high performance native code compiler, native threading support, type inference engine
  • last-commit 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
  • last-commit Clasp [Type-L] compiled using LLVM, seamless integration with existing libraries
  • last-commit ECL [Type-L] embeddable and portable, can build standalone executables
  • See list of additional implementations.

Scheme

  • last-commit 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)
  • last-commit Guile [Type-S] embedable, useful for extending programs with scripting
  • last-commit Racket [Type-S] large standard library, powerful macro system, includes DrRacket IDE
  • last-commit Cyclone [Type-S] Scheme-to-C compiler, R7RS, native threading support, generates fast native binaries
  • last-commit Microscheme [Type-S] Scheme subset for microcontrollers (like Arduino boards)
  • last-commit Loko Scheme [Type-S] runs on bare hardware
  • See list of additional implementations and benchmarks.

C/C++

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

C#

Erlang

Fortran

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

Go

  • last-commit Joker [Type-C] interpreter, linter, great for scripting, Go interop is very limited
  • last-commit Zygo [Type-B] embedable, call into native Go using reflection, optional infix syntax
  • last-commit ZYLISP [Type-A] simple Lisp that compiles to Go (source or bytecode)

Java

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

JavaScript

  • last-commit BiwaScheme [Type-S] compact Scheme written in JavaScript, integrates well with web browsers and Node
  • last-commit ClojureScript [Type-C]
  • last-commit 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
  • last-commit JSLisp (source) [Type-L] Lisp-2, similar to Common Lisp, includes GUI library and IDE
  • last-commit LIPS [Type-S] similar to BiwaScheme, has better notation to call JS functions
  • last-commit Lumen [Type-A] self-hosted Lisp for Lua and JavaScript, uses arrays as first-class datastructures
  • last-commit Parenscript [Type-L] Common Lisp to JavaScript translator, native JS types, native calling convention
  • last-commit RacketScript [Type-S] Racket to JavaScript compiler, interop with both Racket and JS ecosystem
  • last-commit Valtan [Type-L] Common Lisp to JavaScript compiler
  • last-commit Whalesong [Type-S] Racket to JavaScript compiler
  • last-commit Wisp [Type-C] Clojure-like, has protocols, no persistent data structures

Julia

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

Lua

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

Objective-C

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

OCaml

Python

  • last-commit Hy [Type-A] compiles to Python AST, use Python ML libraries, runs on PyPy
  • last-commit Hissp [Type-A] compiles to a functional subset of Python, macro metaprogramming with Python ecosystem
  • last-commit Pixie [Type-B] Clojure inspired, written in RPython, custom GC and JIT

R

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

Rust

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

Shell

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

VHDL

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

WASM

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

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.

@dundalek
Copy link
Owner

Thanks, that's a cool idea, although it seems to add a bit of clutter. So I will not include it on the main page, but it might be great if we start collecting extended metadata. I had some thoughts about it: #13 (comment)

@dundalek dundalek force-pushed the master branch 2 times, most recently from 292322e to 47a47c4 Compare July 21, 2023 08:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants