OpenLisp
Developer Christian Jullien | | |
First appeared | April 1988 | |
---|---|---|
Stable release | 11.7.0
/ 13 December 2022 | |
License | Proprietary | |
Website | www | |
Influenced by | ||
Lisp, ISLISP |
OpenLisp is a programming language in the Lisp family developed by Christian Jullien[1] from Eligis. It conforms[2][3][4] to the international standard for ISLISP published jointly by the International Organization for Standardization (ISO) and International Electrotechnical Commission (IEC), ISO/IEC 13816:1997(E),[5][6] revised to ISO/IEC 13816:2007(E).[7]
Written in the programming languages C and Lisp, it runs on most common operating systems. OpenLisp is designated an ISLISP implementation, but also contains many Common Lisp-compatible extensions (hashtable, readtable, package, defstruct, sequences, rational numbers) and other libraries (network socket, regular expression, XML, Portable Operating System Interface (POSIX), SQL, Lightweight Directory Access Protocol (LDAP)).[8]
OpenLisp includes an interpreter associated to a read–eval–print loop (REPL), a Lisp Assembly Program (LAP) and a backend compiler for the language C.
Goals
The main goal of this
License
Despite its name, OpenLisp is proprietary software. Its interpreter is available free of charge for any noncommercial use.
User interface
OpenLisp mainly runs in console mode: cmd.exe
on Microsoft Windows, and terminal emulator on Unix-based systems.
;; OpenLisp v11.x.y (Build: XXXX) by C. Jullien [Jan 01 20xx - 10:49:13]
;; Copyright (c) Eligis - 1988-20xx.
;; System 'sysname' (64-bit, 8 CPU) on 'hostname', ASCII.
;; God thank you, OpenLisp is back again!
? (fib 20)
;; elapsed time = 0.003s, (0 gc).
= 6765
? _
Alternate solutions include running OpenLisp from Emacs via setting up Emacs inferior-lisp-mode
, or using an integrated development environment (IDE) which supports OpenLisp syntax. LispIDE by DaanSystems does so natively.
Technology
Memory manager
Internally, OpenLisp uses virtual memory to allocate and extend objects automatically. Small objects of the same type are allocated using a Bibop (BIg Bag Of Pages) memory organization. Large objects use a proxy which point to the real object in Lisp heap. The conservative garbage collection is a mark and sweep with coalescing heap (sweep phase can be configured to use threads).
Data types
OpenLisp uses
support is enabled.Evaluator and compiler
The Lisp Kernel, native
History
In 1988, the very first motive behind OpenLisp was to implement a Lisp subset to extend EmACT, an Emacs clone. ISLISP became an obvious choice quickly. Further development ensued.
Year | Version | Main feature |
---|---|---|
1988 | 1.0 | OpenLisp begun as a process |
1993 | 3.3 | First port on ); name change from MLisp to OpenLisp |
1994 | 4.0 | First commercial use |
1995 | 4.5 | Socket streams support |
1997 | 5.7 | OpenLisp is first Lisp to implement ISLISP ISO/IEC 13816:1997(E) standard.[10] |
1998 | 5.8 | Unicode optional support |
2000 | 6.6 | Lisp to LAP compiler; LAP is interpreted by a virtual machine embedded in OpenLisp; speed improved about 2x |
2003 | 7.5 | Lisp to C backend; able to compile an application with many Lisp files to a standalone executable; speed improved from 10x to 20x |
2007 | 8.7 | Changes to match ISO/IEC 13816:2007(E) revision[7] |
2010 | 9.2 | Native integer arbitrary-precision arithmetic support |
2021 | 11.2 | Added complete CLtL format extension; improve heap detection |
2022 | 11.4 | Rework of activation blocks makes interpreter around 15% faster. Experimental ASDF clone. |
2022 | 11.5 | Generic function calls are ~3x faster. Improved regex internal module. |
2022 | 11.6 | Add <simple-bit-vector> type and related BIT functions similar to CLtL equivalent. |
2022 | 11.7 | Current version |
1958 | 1960 | 1965 | 1970 | 1975 | 1980 | 1985 | 1990 | 1995 | 2000 | 2005 | 2010 | 2015 | 2020 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
LISP 1, 1.5, LISP 2(abandoned) | |||||||||||||||
Maclisp | |||||||||||||||
Interlisp | |||||||||||||||
MDL | |||||||||||||||
Lisp Machine Lisp | |||||||||||||||
Scheme | R5RS | R6RS | R7RS small | ||||||||||||
NIL | |||||||||||||||
ZIL (Zork Implementation Language) | |||||||||||||||
Franz Lisp | |||||||||||||||
Common Lisp | ANSI standard | ||||||||||||||
Le Lisp | |||||||||||||||
MIT Scheme
| |||||||||||||||
XLISP | |||||||||||||||
T | |||||||||||||||
Chez Scheme | |||||||||||||||
Emacs Lisp | |||||||||||||||
AutoLISP | |||||||||||||||
PicoLisp | |||||||||||||||
Gambit | |||||||||||||||
EuLisp | |||||||||||||||
ISLISP | |||||||||||||||
OpenLisp | |||||||||||||||
PLT Scheme
|
Racket | ||||||||||||||
newLISP | |||||||||||||||
GNU Guile | |||||||||||||||
Visual LISP | |||||||||||||||
Clojure | |||||||||||||||
Arc | |||||||||||||||
LFE | |||||||||||||||
Hy | |||||||||||||||
Chialisp |
Ports
OpenLisp claims to be extremely portable, it runs on many
. The official website download section contains over 50 different versions.Standard libraries
Connectors
OpenLisp can interact with modules written in C using
(CSV) module can read and write CSV files.Tools
Developer tools include
Algorithms
Some well known algorithms are available in ./contrib
directory (Dantzig's simplex algorithm, Dijkstra's algorithm, Ford–Fulkerson algorithm). Modules are shipped using BSD licenses.
Origin of name
The prefix Open refers to
The name was chosen in 1993 to replace the MLisp internal code name which was already used by
OpenLisp programming language is different than OpenLISP, a project begun in 1997 to implement Locator/Identifier Separation Protocol.
Compiler
This section describes how a compiler transforms Lisp code to C.
Source code
The
fib
)
(defun fib (n)
(cond ((eq n 1) 1)
((eq n 2) 1)
(t (+ (fib (- n 1)) (fib (- n 2))))))
LAP intermediate code
Lisp compiler translates Lisp source code to the following intermediate code. It is followed by a peephole optimization pass that uses this intermediate format to analyze and optimize instructions. After optimization, final LAP code is:
((fentry fib 1 0 0)
(param 0)
(jeq _l004 '1)
(jneq _l003 '2)
(move a1 '1)
(return)
_l003
(gsub1 a1)
(recurse 1)
(move a2 a1)
(param 0)
(gsub a1 '2)
(recurse 1)
(gadd a2 a1)
_l004
(return)
(end))
C code translation
Finally, C code generator uses LAP code to translate instructions in C.
static POINTER
OLDEFCOMPILED1(olfib_00, p1) {
POINTER a1;
POINTER VOLATILE a2;
ollapenter(SN_OLFIB_00);
a1 = p1;
if (eq(a1, olmakefix(1))) goto _l004;
if (!eq(a1, olmakefix(2))) goto _l003;
ollapleave(SN_OLFIB_00);
return olmakefix(1);
_l003:
a1 = ollapgsub(a1, olmakefix(1));
a2 = olfib_00(a1);
a1 = ollapgsub(p1, olmakefix(2));
a1 = olfib_00(a1);
a1 = ollapgadd(a2, a1);
_l004:
ollapleave(SN_OLFIB_00);
return a1;
}
Style guide
Line length
OpenLisp accepts lines having unlimited length. The recommended style is that each line of text in code should have at most 80 characters per line.
Adoption
It has been chosen by SDF Public Access Unix System nonprofit public access Unix systems on the Internet[12][13] as one of its programming languages available online.
Bricsys uses OpenLisp to implement
MEVA [15] is entirely written with OpenLisp.
Università degli Studi di Palermo uses OpenLisp to teach Lisp.[16]
References
- ^ Parquier, Pierre (2000). "JTC1/SC22 N3170". ISO/IEC. Retrieved 11 March 2012.[permanent dead link]
- ^ Simonsen, Keld (13 March 1999). "Islisp – faq". ISO/IEC. Retrieved 11 November 2016.
- ISSN 0387-5806. Archived from the original on 26 August 2018. Retrieved 17 June 2013.)
{{cite journal}}
: CS1 maint: multiple names: authors list (link - ^ McJones, Paul (2010). "ISLISP". Software Preservation Group. Retrieved 18 March 2012.
- ^ "ISO/IEC 13816:1997(E)". International Organization for Standardization. Retrieved 11 November 2018.
- ^ Parquier, Pierre (JTC1 SC22 WG16 Convenor) (1996). "ISO/IEC JTC1 SC22 WG16 N177 – DIS vote". ISO/IEC. Retrieved 15 March 2012.
{{cite web}}
: CS1 maint: numeric names: authors list (link) - ^ a b "ISO/IEC 13816:2007(E)". International Organization for Standardization. Retrieved 11 November 2018.
- ^ Jullien, Christian (2011). "OpenLisp v9.8.0 Reference Manual". Eligis. Retrieved 14 March 2012.
- ^ Jullien, Christian (2011). "OpenLisp ChangeLog". Eligis. Retrieved 15 March 2012.
- ^ Rinehuls, William (4 August 1999). "JTC1/SC22 N2969". ISO/IEC. Retrieved 11 November 2016.
- ^ Jullien, Christian (2011). "OpenLisp FAQ". Eligis. Retrieved 15 March 2012.
- ^ Stover, Gene Michael (2005). "7.2 Languages on SDF". SDF Public Access Unix System, Inc. Retrieved 14 March 2012.
- ^ "Hosting companies". ALU (Association of Lisp Users). Archived from the original on 9 February 2011. Retrieved 18 March 2012.
- ^ "Bricscad News". Bricscad. 2009. Retrieved 20 March 2012.
- ^ "Competitive Intelligence and Decision Problems". Amos Davis. 2013. Retrieved 30 September 2014.
- ^ "Corso di Informatica Teorica". Università degli Studi di Palermo. 2013. Retrieved 22 March 2013.