Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/omarbassam88/lisp-spectrum

Exploring the Lisp Family of languages
https://github.com/omarbassam88/lisp-spectrum

clojure common-lisp gambit guile lisp scheme

Last synced: 24 days ago
JSON representation

Exploring the Lisp Family of languages

Awesome Lists containing this project

README

        

#+title: The Lisp Spectrum
#+author: Omar Bassam
#+date: [2024-08-07 Wed]
#+startup: nonum

This project aims to explore the extensive spectrum of the Lisp family of languages. Lisp is renowned for its high flexibility and great control, offering programmers a powerful toolset. However, the abundance of available options can be overwhelming, leading to choice fatigue. Therefore, this project seeks to compile essential information about the major Lisp dialects, detailing their unique features, tools, and learning resources. The project tries to provide beginner friendly guide for Lisp in general and for each dialect as well. It should be understandable and useful to the reader whether they are new to programming, with or without experience in a lisp dialect.

The Lisps we will be exploring:
- [[file:common-lisp/][Common Lisp]]
- [[file:scheme/][Scheme]]
- Chez Scheme
- Racket
- Chibi Scheme
- [[file:chicken//][Chicken Scheme]]
- [[file:gambit/][Gambit Scheme]]
- Gerbil Scheme
- [[file:guile/][Guile Scheme]]
- [[file:clojure/][Clojure]]
- ClojureScript
- Fennel
- [[file:janet/][Janet]]
- Jank

* Why Lisps
** Syntax
Lisp has a simple syntax that can be learned in a day. All code is written as expressions, known as S-Expressions, which are lists with prefix notation. The first element is the operator, and the rest are arguments.

#+begin_src lisp
(+ 1 2 3 4)
(list 1 2 (list 3 4))
(defun foo (a b c d) (+ a b c d))
#+end_src

** REPL
The REPL is a major selling point for Lisp, allowing for interactive, incremental program development. This feature has influenced many modern languages to offer similar interactive experiences.
** Code as data
Lisp code has the same structure as lists, enabling the creation of macros with list-processing functions. This facilitates the development of Domain-Specific Languages (DSLs).
* Lisp Resources
- [[http://www-formal.stanford.edu/jmc/recursive.pdf][John McCarthy Original Paper on LISP: Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I]]
- [[https://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf][Lisp 1.5 Manual]]
- [[https://web.mit.edu/6.001/6.037/sicp.pdf][Book: Structure and Interpretation of Computer Programs]]

* Editor Configuration
** Emacs
Emacs is the de facto standard for working with Lisps. This is due to the fact that it partly written and configurable with Emacs Lisp, another lisp dialect similar to Common Lisp. For every lisp you'll find an =init.el= file that you can use as an example for a quick setup to work with each lisp in Emacs out of the box. However there are some common packages that are worth mentioning here that will make your life much easier when working with lisps in Emacs:
*** Structural Editing
**** Paredit
- [[http://danmidwood.com/content/2014/11/21/animated-paredit.html][The Animated Guide to Paredit]]
**** Parinfer
- [[https://shaunlebron.github.io/parinfer/][Official Website]]
*** UI Enhancements
**** Rainbow Delimiters
A UI Enhancement to auto color pairs of parenthesis

* Comparison Criteria
** Installation and Setup
We explore the different ways of installing every lisp such as:
- The availability of official packages in different package managers.
- Install from a script.
- Installing from source code.

We will also look into the first time setup for every lisp.

** Resources
The availability of learning resources is crucial for any programming language. We will try to gather the most helpful resources for every lisp including:
- Documentation
- Books
- Videos
- Tutorials
- Community channels

** REPL
Ease and speed of interacting with the REPL, including the possibility of connecting to a remote REPL.

** Editor Integration
While Emacs is the de facto standard for working with Lisps, some have their own IDEs (e.g., Dr. Racket for Racket) or support through plugins in other editors. We will explore available editor options for each Lisp.

** Package and Project management
- Tools for managing packages and projects.
- Ease of installing/uninstalling packages.
- Possibility of installing a specific version for a package.
- Package installation scopes (global, project-level, or both).

** Standard Library and Ecosystem
We will discuss the built-in libraries for each Lisp and their usability. Additionally, we will explore the ecosystem for each Lisp, including where to find and download packages.

** Performance
This is very subjective as every lisp compiles to a different target(s). So, it's hard to decide whether the comparison of performance is between the lisp implementations or the target platforms.

** Interoperability with target platform(s)
Most lisps offer a way of interoperability with their target platform(s) or with other platforms as well. This can differ from one lisp to another, so this won't be a comparison but rather exploring the different options.

* Contributing
If you would like to contribute to this project please check the [[file:CONTRIBUTING.org][Contribution guidelines]] for more information.