Skip to content

Latest commit

 

History

History
65 lines (51 loc) · 2.81 KB

comparison-to-other-js-lisps.markdown

File metadata and controls

65 lines (51 loc) · 2.81 KB

Comparison of eslisp to other JS-lisps

Here's an overview of other compile-to-JS lisps and how they compare to eslisp. I'll go in rough order of decreasing similarity.

Independent JS lisp implementations

Jisp is the most similar existing project. It has implemented macros slightly differently in the details, and is more opinionated about how code should be written; everything is an expression, sometimes at the cost of a one-to-one language mapping. It is currently not actively maintained.

Sibilant also emphasises staying close to JavaScript semantics, but unlike eslisp, it accepts extensive syntactic sugar and its macros (though featureful) are cumbersome to write.

LispyScript adds syntactic sugar quite aggressively. Its "macros" are really just substitution templates: they can't do computation, which allows only extremely simple uses.

Subsets of other lisps in JS

wisp is a Clojure subset, inheriting its syntax and many ideas, but is friendlier to JavaScript. It is more mature and featureful than eslisp. However, its syntax inherits some Clojure-isms that translate awkwardly to JS and its macros compile to an internal representation, so they can't be defined in separate modules.

Ralph is a Dylan subset. It compiles to JavaScript and has a quasiquoting macro system, but it again has lots some syntax that doesn't translate obviously into JS. Allows macros to be defined in separate modules. Currently not actively maintained.

Compilers hosted on other lisps

ClojureScript is a heavy approach; a full Clojure compiler targeting JavaScript. Unlike eslisp, it requires the JVM and totally overrides JS' semantics. (The non-JVM self-hosted implementation does not yet support macros at the time of writing.)

Parenscript similarly requires a Common Lisp compiler. It uses CL idioms, but is implemented instead as a CL library, allowing it to make a little more effort than ClojureScript to produce readable JavaScript output.

Lisp interpreters in JS

SLip, Javathcript, Fargo (and many others) are interpreters; they work on internal code representations and so have limited interoperability with other JavaScript.