Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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 intoC++
but the compiler is written inClojure
. OrCarp
interops withC
but it is mostly written inHaskell
. In case ofSBCL
it contains only small amounts ofC
, but it is implemented almost entirely inCommon Lisp
.Multi Lang
Common Lisp
Scheme
C/C++
C#
Erlang
Fortran
Go
Java
JavaScript
Julia
Lua
Objective-C
OCaml
Python
R
Rust
Shell
VHDL
WASM
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.