Jump to content

LISP: Difference between revisions

From EDM2
Ak120 (talk | contribs)
mNo edit summary
Ak120 (talk | contribs)
mNo edit summary
Line 2: Line 2:


==History==
==History==
It was first described in 1959 with working implementations arriving in the 1960's. Popular in early AI research but is also used as a scripting language in packages such as [[Emacs]], later variants have gained functional programming features and most modern variants have also gotten some object-oriented features, but referring to any LISP variant as an object-oriented or a functional programming language is taking religious fervour a step too far.
It was first described in 1959 with working implementations arriving in the 1960s. Popular in early AI research but is also used as a scripting language in packages such as [[Emacs]], later variants have gained functional programming features and most modern variants have also gotten some object-oriented features, but referring to any LISP variant as an object-oriented or a functional programming language is taking religious fervour a step too far.


The main problem LISP originally had in gaining any mainstream acceptance as a programming language was simply performance related, while LISP was perfectly acceptable for writing small programs in, large programs could only be done cost effectively after the advent of virtual memory, but that only happened in the late 60's on mainframes, in the 80's for minicomputers and workstations and in the 90's for microcomputers and by that time the LISP world had become so fragmented that it had difficulty maintaining any traction. This also lead a number of companies to release computer systems in the 1970's and 80's that were specifically designed to run LISP.
The main problem LISP originally had in gaining any mainstream acceptance as a programming language was simply performance related, while LISP was perfectly acceptable for writing small programs in, large programs could only be done cost effectively after the advent of virtual memory, but that only happened in the late 60s on mainframes, in the 80s for minicomputers and workstations and in the 90s for microcomputers and by that time the LISP world had become so fragmented that it had difficulty maintaining any traction. This also lead a number of companies to release computer systems in the 1970s and 80s that were specifically designed to run LISP.


==Standard LISP==
==Standard LISP==
As LISP implementations were already starting to diverge enough to make porting between systems difficult by the mid 60's, so a new informal standard was proposed in 1969 that mostly mimicked a minimalistic but fast LISP implementation done as Stanford University in the USA, this never became a popular standard on minicomputers or micros but a number of mainframe implementations followed it to take advantage of mathematical packages that had been developed on the Stanford [[IBM]] system. An implementation in [[BCPL]] called ''Cambridge Lisp'' became fairly common on some home computer systems in Europe in the latter half of the 80's as it was cheap, a variant of Cambridge Lisp re-written in [[C]] is available as an open source package. '''Portable Standard Lisp''' was a follow on to Standard Lisp that also failed to set the world on fire.
As LISP implementations were already starting to diverge enough to make porting between systems difficult by the mid 60s, so a new informal standard was proposed in 1969 that mostly mimicked a minimalistic but fast LISP implementation done as Stanford University in the USA, this never became a popular standard on minicomputers or micros but a number of mainframe implementations followed it to take advantage of mathematical packages that had been developed on the Stanford [[IBM]] system. An implementation in [[BCPL]] called ''Cambridge Lisp'' became fairly common on some home computer systems in Europe in the latter half of the 80s as it was cheap, a variant of Cambridge Lisp re-written in [[C]] is available as an open source package. '''Portable Standard Lisp''' was a follow on to Standard Lisp that also failed to set the world on fire.


==OS/2 Implementations==
==OS/2 Implementations==
* [[CLISP]] - Open Source - Discontinued
* [[CLISP]] - Open Source
* [[Lily]] - Embeddable LISP - Open Source - Discontinued
* [[Lily]] - Embeddable LISP - Open Source
* [[newLISP]] - Open Source - Current
* [[newLISP]] - Open Source
* [[RefLisp]] - Open source - Discontinued
* [[RefLisp]] - Open source
* [[SCM]] - Open source - Current
* [[SCM]] - Open source
* [[Valutron]] - Open source - Current
* [[Valutron]] - Open source
* [[xLISP]] - Open Source
* [[xLISP]] - Open Source


===Libraries===
===Libraries===
* [[Closer to MOP]] - CLOS/MOP compatibility layer - Open Source - Current
* [[Closer to MOP]] - CLOS/MOP compatibility layer - Open Source
* [[Closette]] - Meta-object protocol - Open source - Discontinued
* [[Closette]] - Meta-object protocol - Open source
* [[CL-XML]] - [[XML]] parser - Open source - Discontinued
* [[CL-XML]] - [[XML]] parser - Open source
* [[ContextL]] - Context programming extensions for [[CLOS]] - Open Source - Current
* [[ContextL]] - Context programming extensions for [[CLOS]] - Open Source
* [[Portable Common Loops]] - Object oriented abstractions - Open source - Discontinued
* [[Portable Common Loops]] - Object oriented abstractions - Open source
* [[Screamer]] - Nondeterministic programming - Open source - Some current development
* [[Screamer]] - Nondeterministic programming - Open source
* [[Snappy]] - Compression library - Open Source - Current
* [[Snappy]] - Compression library - Open Source


===Foreign libraries with LISP or Scheme bindings===
===Foreign libraries with LISP or Scheme bindings===
* [[Cairo]] - 2D graphics library (CL + Scheme) - Open source - Current
* [[Cairo]] - 2D graphics library (CL + Scheme) - Open source
* [[LibcURL]] - Internet URL (WWW, FTP) access (LISP + Scheme) - Open Source - Current
* [[LibcURL]] - Internet URL (WWW, FTP) access (LISP + Scheme) - Open Source
* [[Snappy]] - Compression lib. - Open Source - Current
* [[Snappy]] - Compression lib. - Open Source


===LISP related programmer's utilities===
===LISP related programmer's utilities===
* [[DTRACE]] - Debug tool - Open source - Discontinued
* [[DTRACE]] - Debug tool - Open source
* [[Exuberant ctags]] - Creates index files out of Scheme and LISP source files - Open source - Current
* [[Exuberant ctags]] - Creates index files out of Scheme and LISP source files - Open source


;Editor support
;Editor support
* [[Boxer]] - LISP syntax highlighting support built in - Commercial - Discontinued
* [[Boxer]] - LISP syntax highlighting support built in - Commercial
* [[Lugaru Epsilon]] - LISP syntax highlighting and auto-indent available as a separate download. - Commercial
* [[Lugaru Epsilon]] - LISP syntax highlighting and auto-indent available as a separate download.


;Source code snippets, archives and collections
;Source code snippets, archives and collections
Small programs or routines that you can integrate into your own programs or study to learn from, but are not delivered in library form.
Small programs or routines that you can integrate into your own programs or study to learn from, but are not delivered in library form.
* [[Artificial flavors]] - Open source - Discontinued.
* [[Artificial flavors]] - Open source
* [[SDRAW]] - A utility that draws ConsCell structures - Open source - Discontinued
* [[SDRAW]] - A utility that draws ConsCell structures - Open source
* [https://sourceforge.net/projects/clocc/files/ CLOCC - Common Lisp Open Code Collection] - Small open source applications.
* [https://sourceforge.net/projects/clocc/files/ CLOCC - Common Lisp Open Code Collection] - Small open source applications.
* [https://github.com/lispgames/lispgames.github.io/wiki LISP games Wiki] - Collection of mainly small LISP games
* [https://github.com/lispgames/lispgames.github.io/wiki LISP games Wiki] - Collection of mainly small LISP games
Line 50: Line 50:
==DOS Implementations==
==DOS Implementations==
<div style="column-count:2;-moz-column-count:2;-webkit-column-count:2">
<div style="column-count:2;-moz-column-count:2;-webkit-column-count:2">
*BYSO LISP - Commercial - Discontinued
*BYSO LISP - Commercial
*[[ECoLisp]] - Open Source - Sort of current
*[[ECoLisp]] - Open Source
*Expert LISP - Commercial - Discontinued
*Expert LISP - Commercial
*Intellect-UL LISP
*Intellect-UL LISP
*[[IQLISP]] - Commercial - Discontinued
*[[IQLISP]] - Commercial
*Le-Lisp - Commercial - Discontinued
*Le-Lisp - Commercial
*[[Microsoft LISP]] - Commercial - Discontinued
*[[Microsoft LISP]] - Commercial
*[[muLISP]] - Commercial - Discontinued
*[[muLISP]] - Commercial
*[[Norell LISP/88]] - Commercial - Discontinued
*[[Norell LISP/88]] - Commercial
*[https://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/others/franzlsp/pclisp/pclisp30.zip PC-LISP 3.0] - Shareware
*[https://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/others/franzlsp/pclisp/pclisp30.zip PC-LISP 3.0] - Shareware
*[[RefLisp]] - Open source - Discontinued
*[[RefLisp]] - Open source
*[[SCM]] - Open source - Current
*[[SCM]] - Open source
*TLC LISP - Commercial - Discontinued
*TLC LISP - Commercial
*Waltz LISP - Commercial - Discontinued
*Waltz LISP - Commercial
*[[UO-LISP]] - Commercial - Discontinued
*[[UO-LISP]] - Commercial
*[[XLISP]] - Open source - Discontinued
*[[XLISP]] - Open source
</div>
</div>


====Libraries====
====Libraries====
*[[Closette]] - Meta-object protocol - Open source - Discontinued
*[[Closette]] - Meta-object protocol - Open source
*Dblisp - dBase II/II database access for GCL - Commercial - Discontinued
*Dblisp - dBase II/II database access for GCL - Commercial
*[[Portable Common Loops]] - Object oriented abstractions - Open source - Discontinued
*[[Portable Common Loops]] - Object oriented abstractions - Open source
*[[Screamer]] - Nondeterministic programming - Open source - Some current development
*[[Screamer]] - Nondeterministic programming - Open source
*[[SLIB Portable Scheme Library]] - Portable version of Scheme in a library form - Open Source - Current
*[[SLIB Portable Scheme Library]] - Portable version of Scheme in a library form - Open Source


====Closely related languages====
====Closely related languages====
*Fjölnir - Open source - Discontinued
*Fjölnir - Open source


;Editor support
;Editor support
* [[Boxer]] - LISP syntax highlighting support built in - Commercial - Discontinued
* [[Boxer]] - LISP syntax highlighting support built in - Commercial


==Win-OS/2 implementations==
==Win-OS/2 implementations==
*Apteryx Lisp 1.04 - shareware
*Apteryx Lisp 1.04 - shareware
*[[Golden Common-LISP]] - Commercial - Current
*[[Golden Common-LISP]] - Commercial
*Goldworks - Commercial - Current
*Goldworks - Commercial
*IBM Common Lisp - As front-end only - Commercial - Discontinued
*IBM Common Lisp - As front-end only - Commercial
*Le-Lisp (ILOG)
*Le-Lisp (ILOG)
*[[RefLisp]] - Open source - Discontinued
*[[RefLisp]] - Open source
*[[SCM]] - Open source - Discontinued
*[[SCM]] - Open source


====Libraries====
====Libraries====
* [[Portable Common Loops]] - Object oriented abstractions - Open source - Discontinued
* [[Portable Common Loops]] - Object oriented abstractions - Open source


==Java Implementations==
==Java Implementations==
* [https://common-lisp.net/project/armedbear/ Armed Bear Common Lisp] - Open Source - Current
* [https://common-lisp.net/project/armedbear/ Armed Bear Common Lisp] - Open Source
* [[CLforJava]] - Open Source - Discontinued
* [[CLforJava]] - Open Source
* GNU [http://www.gnu.org/software/kawa/ Kawa Scheme]
* GNU [http://www.gnu.org/software/kawa/ Kawa Scheme]


Line 105: Line 105:


==JavaScript Implementations==
==JavaScript Implementations==
* [http://www.biwascheme.org/ Biwa Scheme] - Conforms to Revised(6) - Open source - Current
* [http://www.biwascheme.org/ Biwa Scheme] - Conforms to Revised(6) - Open source


;Related languages
;Related languages

Revision as of 03:10, 2 March 2019

LISP (LISt Processor) is a list processing language, one of the earliest programming language to feature a garbage collector.

History

It was first described in 1959 with working implementations arriving in the 1960s. Popular in early AI research but is also used as a scripting language in packages such as Emacs, later variants have gained functional programming features and most modern variants have also gotten some object-oriented features, but referring to any LISP variant as an object-oriented or a functional programming language is taking religious fervour a step too far.

The main problem LISP originally had in gaining any mainstream acceptance as a programming language was simply performance related, while LISP was perfectly acceptable for writing small programs in, large programs could only be done cost effectively after the advent of virtual memory, but that only happened in the late 60s on mainframes, in the 80s for minicomputers and workstations and in the 90s for microcomputers and by that time the LISP world had become so fragmented that it had difficulty maintaining any traction. This also lead a number of companies to release computer systems in the 1970s and 80s that were specifically designed to run LISP.

Standard LISP

As LISP implementations were already starting to diverge enough to make porting between systems difficult by the mid 60s, so a new informal standard was proposed in 1969 that mostly mimicked a minimalistic but fast LISP implementation done as Stanford University in the USA, this never became a popular standard on minicomputers or micros but a number of mainframe implementations followed it to take advantage of mathematical packages that had been developed on the Stanford IBM system. An implementation in BCPL called Cambridge Lisp became fairly common on some home computer systems in Europe in the latter half of the 80s as it was cheap, a variant of Cambridge Lisp re-written in C is available as an open source package. Portable Standard Lisp was a follow on to Standard Lisp that also failed to set the world on fire.

OS/2 Implementations

Libraries

Foreign libraries with LISP or Scheme bindings

  • Cairo - 2D graphics library (CL + Scheme) - Open source
  • LibcURL - Internet URL (WWW, FTP) access (LISP + Scheme) - Open Source
  • Snappy - Compression lib. - Open Source

LISP related programmer's utilities

  • DTRACE - Debug tool - Open source
  • Exuberant ctags - Creates index files out of Scheme and LISP source files - Open source
Editor support
  • Boxer - LISP syntax highlighting support built in - Commercial
  • Lugaru Epsilon - LISP syntax highlighting and auto-indent available as a separate download.
Source code snippets, archives and collections

Small programs or routines that you can integrate into your own programs or study to learn from, but are not delivered in library form.

DOS Implementations

Libraries

Closely related languages

  • Fjölnir - Open source
Editor support
  • Boxer - LISP syntax highlighting support built in - Commercial

Win-OS/2 implementations

  • Apteryx Lisp 1.04 - shareware
  • Golden Common-LISP - Commercial
  • Goldworks - Commercial
  • IBM Common Lisp - As front-end only - Commercial
  • Le-Lisp (ILOG)
  • RefLisp - Open source
  • SCM - Open source

Libraries

Java Implementations

Related languages
  • Clojure - Functional language that uses LISP syntax.
Editor support
  • jEdit - Java based - LISP and Scheme syntax highlighting built in

JavaScript Implementations

Related languages

Publications

Books

  • John R. Anderson; Albert Corbett; Brian J. Reiser: Essential Lisp - Addison-Wesley 1986, ISBN 0-201-11148-9
  • Patrick Henry Winston; Berthold K.P. Horn: Lisp (Third edition) - Addison-Wesley 1989, ISBN 0-201-08319-1
An older edition of the book is available: PDF
CLOS, MOP and PCL
  • Gregor Kiczales, Jim des Rivieres, Daniel G. Bobrow: The Art of the Metaobject Protocol - MIT Press 1991, ISBN 026261074
  • Robert R. Kessler, Amy R. Petajan: LISP, Objects, and Symbolic Programming - Scott Foresman 1988, ISBN 0-673-39773-4

Articles, talks, presentations and papers

Slightly misleading title, the talk is more about the package manager ASDF than scripting per se.
  • Pascal Costanza: How to Make Lisp More Special - Originally published in the Proceedings of the International Lisp Conference 2005, Stanford, California, USA, June 19-22, 2005.
  • Richard Barber & George Imlah: Delivering the Goods with Lisp. Communications of the ACM 34(9); pages 61-63 - 1991
CLOS, MOP and PCL
  • BYTE Magazine August 1979 - The LISP issue - Totally outdated by now, but a very interesting read, note that the DJVU version is only 1/20th the size of the PDF version before you download.
Meta-objects
Parallel processing
Introductory articles and mini-tutorials

Links

Tutorials

Standards

Standard Lisp
  • Jed Marti, A. C. Hearn, M. L. Griss and C. Griss: The Standard Lisp Report - ACM SIGPLAN Notices 14, No 10 (1979), pages 48~68. - This is what became Portable (Utah) Standard Lisp.