Edge Rewrite
// HTMLRewriter · presentation

This page was redesigned at the edge.

Cloudflare fetched the original article and streamed it through HTMLRewriter to apply an entirely new visual system without rebuilding the source page.

Jump to content

newLISP

From Wikipedia, the free encyclopedia
(Redirected from NewLisp)
newLISP
The newLISP dragonfly logo
ParadigmMulti-paradigm
FamilyLisp
Designed byLutz Mueller
DeveloperLutz Mueller
First appeared1991; 35 years ago (1991)
Stable release
10.7.5 / May 12, 2019; 7 years ago (2019-05-12)[1]
Preview release
10.7.4 / September 10, 2018; 8 years ago (2018-09-10)[1]
ScopeDynamic
PlatformIA-32, x86-64
OSCross-platform: Unix, Unix-like, Windows
LicenseGPLv3+
Filename extensions.lsp
Websitewww.newlisp.org
Major implementations
newLISP, newLISP Neo
Influenced by
C, Common Lisp, Perl, Scheme

newLISP is a scripting language, a dialect of the Lisp family of programming languages. It was designed and developed by Lutz Mueller.[2] Because of its small resource requirements, newLISP can be used for embedded systems applications. Many functions are built in, including networking functions, support for distributed and multicore processing, and Bayesian statistics. newLISP is free and open-source software released under the GNU General Public License, version 3 or later.

History

[edit]

newLISP design is influenced by the two main Lisp dialects, Common Lisp and Scheme, and by other languages like Pascal and C.[citation needed] newLISP originated in 1991 and was originally developed on a Sun-4 workstation.[3] It later moved to Windows 3.0, where version 1.3 was released on CompuServe around 1993, then became available as a Windows graphical user interface (GUI) graphics-capable application and an MS-DOS console application (both 16-bit). In 1995, with the release of Windows 95, newLISP moved to 32-bit.

In April 1999, newLISP was ported to Linux; some of its core algorithms were rewritten, and all Windows-specific code removed. newLISP was released as an open-source software project licensed under the GPL, and development on Windows stopped after version 6.0.25. During the first half of 2001, newLISP was ported back to Windows on the Cygwin platform without graphics abilities. In the second half of 2001, a cross-platform Tcl/Tk frontend named newLISP-tk was released around version 6.3.0. In 2006, 64-bit precision was introduced for integer arithmetic and for some operations on files in version 9.0.

Since the release of 6.5 in mid-2002, development has been very active, and many new features have been added.[4]

In 2026, newLISP Neo was released—a modernized, high-performance distribution of newLISP designed to accelerate iterative execution and recursive processing while maintaining full backward compatibility with the existing language specifications.

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
 muLisp
 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

Philosophy

[edit]

newLISP is a language-based on Lisp written to be scriptable. It has lists, symbols, function mapping, anonymous functions, s-expressions and macros in its language. It offers features that are common for scripting applications such as regular expressions, XML processing, UTF-8 support, networking, array and matrix processing, mathematical functions, statistical functions and database connectivity as well. newLISP supports namespaces termed contexts, which can be assigned to variables and passed to functions. Contexts can also be used to implement a prototype-based object-oriented programming style newLISP provides features including regular expressions, networking, NewLISP 10.7.5 is also available through Homebrew for supported macOS and Linux systems.[5] It offers support for BSD, Linux, macOS, Solaris and Windows systems. The database interfaces supported are MySQL, SQLite and ODBC; and newLISP can be run as a server and offers TCP/IP and UDP networking functionality. The latest release is version 10.7.5, released in May 2019.[6]



Language features

[edit]

Contexts

[edit]

newLISP supports namespaces termed contexts, which can be assigned to variables and passed to functions, but which are associated with globally unique symbols, limiting their use as first-class citizens (objects). A prototype-based object-oriented style of programming is possible in newLISP, using contexts as prototypes to construct objects. Variables inside contexts do not interfere with variables of the same name in other contexts, but inside a context, variables behave according to the rules of dynamic scoping.

Scoping

[edit]

newLISP uses dynamic scoping. When a function is called, that function can see all variables of its caller, its caller's caller, and so on, within the same context or namespace. It supports both explicitly and implicitly defined local dynamic variables that shadow variables with the same name from the outer environment, thus preventing accidental use or change of the variables from caller environment. Parameter variables of the called function automatically shadow the caller's variable environment. Globally, variables can be grouped in separate namespaces.[7]

Memory management

[edit]

newLISP uses a method of automatic memory management different from traditional garbage collection schemes, termed one reference only (ORO) memory management. Each variable is referenced only by its context, and each context is referenced globally.

Sharing of subobjects among objects, cyclic structures, or multiple variables pointing to the same object are unsupported in newLISP. Objects are copied when stored in data structures or passed to functions, except for certain built-in functions. The exceptions are symbols and contexts, which are shared instead of copied, and thus can be used for indirection. Symbols and contexts are globally named and are deleted explicitly; deleting a symbol or context scans all other objects to replace references to it with nil.

GUI options

[edit]

newLISP graphical user interface (GUI) server (newLISP-GS) is a Java-based Internet protocol suite (TCP/IP) server providing a graphical programming interface. A newLISP-GS based development environment is included in newLISP binary distributions, and GTK-server, OpenGL, and Tcl/Tk-based programming interfaces are available.

Standalone binaries

[edit]

Any newLISP version allows building executable files, portable applications, for deployment which are self-contained and need no installing.

Interaction with shared libraries

[edit]

newLISP has an import function, which allows importing functions from a dynamic-link library (DLL) on Windows API Win32, or from a shared library on Linux or Unix.

Example:

(define LIBC (lookup ostype '(
("Windows" "msvcrt.dll")
("OSX" "libc.dylib"))))

(import LIBC "printf")
(printf "%g %s %d %c\n" 1.23 "hello" 999 65)
1.23 hello 999 A
→ 17 ; return value

Frameworks

[edit]

Web frameworks available for newLISP include Dragonfly[8] and Rockets.[9]

References

[edit]
  1. 1 2 "newLISP". Retrieved 2018-11-20.
  2. ↑ Walling, Rob. "An Interview with Lutz Mueller, Creator of newLISP". Softwarebyrob.com. Archived from the original on 2007-10-31. Retrieved 2018-11-20.
  3. ↑ Mueller, Lutz. "newLISP – a LISP Scripting Language". don Lucio. Archived from the original on 2016-04-12. Retrieved 2018-11-20.
  4. ↑ Kobayashi, Shigeru. "kosh04/newlisp". GitHub. Retrieved 2018-11-20.
  5. ↑ "newlisp". Homebrew. Retrieved 23 September 2026.
  6. ↑ "newLISP Files". SourceForge. Retrieved 23 September 2026.
  7. ↑ BRASWELL, NATHAN (March 22, 2023). "Practical compilation of fexprs using partial evaluation. Fexprs can performantly replace macros in purely-functional Lisp".{{cite web}}: CS1 maint: url-status (link)
  8. ↑ Slepak, Greg; Hildmann, Marc. "Dragonfly web framework". AppTruck. Archived from the original on 2016-03-03. Retrieved 2018-11-20.
  9. ↑ Reimer, Jeremy. "The newLISP on Rockets 2.0 Blog". Rocket Man. Retrieved 2018-11-20.
[edit]