NewLISP

Last updated
newLISP
Nl logo libel side color 240X100.png
The newLISP dragonfly logo
Paradigm Multi-paradigm
Family Lisp
Designed by Lutz Mueller
Developer Lutz Mueller
First appeared1991;32 years ago (1991)
Stable release
10.7.5 / May 12, 2019;4 years ago (2019-05-12) [1]
Preview release
10.7.4 / September 10, 2018;5 years ago (2018-09-10) [1]
Scope Dynamic
Platform IA-32, x86-64
OS Cross-platform: Unix, Unix-like, Windows
License GPLv3+
Website www.newlisp.org
Influenced by
C, Common Lisp, Perl, Scheme

newLISP is a scripting language which is 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 is excellent for embedded systems applications. Most of the functions you will ever need are already built in. This includes 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.

Contents

History

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 a 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]

19581960196519701975198019851990199520002005201020152020
 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

Philosophy

newLISP attempts to provide a fast, powerful, cross-platform, full-featured scripting version of the language Lisp while using only a modest system resources such as data storage (e.g., disk space) and memory. [5] [6]

It provides Lisp features such as lists, symbol processing, function mapping, anonymous functions (lambda expressions), s-expressions (excluding improper lists), and macros. It also provides the functions expected of a modern scripting language, including supporting regular expressions, XML, Unicode (UTF-8), networking via Transmission Control Protocol (TCP), Internet Protocol (IP), and User Datagram Protocol (UDP), matrix and array processing, advanced math, statistics and Bayesian statistical analysis, mathematical finance, and distributed computing.

newLISP runs on the operating systems Berkeley Software Distribution (BSD), Linux, macOS, Solaris, and Windows. [1] It supports MYSQL, SQLite and ODBC database access, Common Gateway Interface (CGI), Simple Mail Transfer Protocol (SMTP), Post Office Protocol (POP) 3, File Transfer Protocol (FTP) and XML remote procedure call (XML-RPC). It can run in server mode as a daemon.

Language features

Contexts

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

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.

Memory management

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

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

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

Interaction with shared libraries

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.

Frameworks

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

Related Research Articles

<span class="mw-page-title-main">Common Lisp</span> Programming language standard

Common Lisp (CL) is a dialect of the Lisp programming language, published in American National Standards Institute (ANSI) standard document ANSI INCITS 226-1994 (S20018). The Common Lisp HyperSpec, a hyperlinked HTML version, has been derived from the ANSI Common Lisp standard.

An integrated development environment (IDE) is a software application that provides comprehensive facilities for software development. An IDE normally consists of at least a source-code editor, build automation tools, and a debugger. Some IDEs, such as IntelliJ IDEA, Eclipse and Lazarus contain the necessary compiler, interpreter or both; others, such as SharpDevelop, NetBeans do not.

Multiple inheritance is a feature of some object-oriented computer programming languages in which an object or class can inherit features from more than one parent object or parent class. It is distinct from single inheritance, where an object or class may only inherit from one particular object or class.

In computing, serialization is the process of translating a data structure or object state into a format that can be stored or transmitted and reconstructed later. When the resulting series of bits is reread according to the serialization format, it can be used to create a semantically identical clone of the original object. For many complex objects, such as those that make extensive use of references, this process is not straightforward. Serialization of object-oriented objects does not include any of their associated methods with which they were previously linked.

ScriptBasic is a scripting language variant of BASIC. The source of the interpreter is available as a C program under the LGPL license.

<span class="mw-page-title-main">Genera (operating system)</span> Symbolics operating system based on Lisp

Genera is a commercial operating system and integrated development environment for Lisp machines created by Symbolics. It is essentially a fork of an earlier operating system originating on the Massachusetts Institute of Technology (MIT) AI Lab's Lisp machines which Symbolics had used in common with Lisp Machines, Inc. (LMI), and Texas Instruments (TI). Genera was also sold by Symbolics as Open Genera, which runs Genera on computers based on a Digital Equipment Corporation (DEC) Alpha processor using Tru64 UNIX. In 2021 a new version was released as Portable Genera which runs on DEC Alpha, Tru64 UNIX, x86-64 and Arm64 Linux, x86-64 and Apple Silicon M Series macOS. It is released and licensed as proprietary software.

In computer programming, the scope of a name binding is the part of a program where the name binding is valid; that is, where the name can be used to refer to the entity. In other parts of the program, the name may refer to a different entity, or to nothing at all. Scope helps prevent name collisions by allowing the same name to refer to different objects – as long as the names have separate scopes. The scope of a name binding is also known as the visibility of an entity, particularly in older or more technical literature—this is in relation to the referenced entity, not the referencing name.

An object-oriented operating system is an operating system that is designed, structured, and operated using object-oriented programming principles.

<span class="mw-page-title-main">FLTK</span>

Fast Light Toolkit is a cross-platform widget library for graphical user interfaces (GUIs), developed by Bill Spitzak and others. Made to accommodate 3D graphics programming, it has an interface to OpenGL, but it is also suitable for general GUI programming.

A user interface markup language is a markup language that renders and describes graphical user interfaces and controls. Many of these markup languages are dialects of XML and are dependent upon a pre-existing scripting language engine, usually a JavaScript engine, for rendering of controls and extra scriptability.

<span class="mw-page-title-main">SK8 (programming language)</span>

SK8 was a multimedia authoring environment developed in Apple's Advanced Technology Group from 1988 until 1997. It was described as "HyperCard on steroids", combining a version of HyperCard's HyperTalk programming language with a modern object-oriented application platform. The project's goal was to allow creative designers to create complex, stand-alone applications. The main components of SK8 included the object system, the programming language, the graphics and components libraries, and the Project Builder, an integrated development environment.

Tkinter is a Python binding to the Tk GUI toolkit. It is the standard Python interface to the Tk GUI toolkit, and is Python's de facto standard GUI. Tkinter is included with standard Linux, Microsoft Windows and macOS installs of Python.

Apple Dylan is the original implementation of the programming language Dylan. It was developed by Apple Computer from 1992 to 1995.

<span class="mw-page-title-main">Tk (software)</span> GUI toolkit or framework

Tk is a cross-platform widget toolkit that provides a library of basic elements of GUI widgets for building a graphical user interface (GUI) in many programming languages. It is free and open-source software released under a BSD-style software license.

In mathematics and computer science, apply is a function that applies a function to arguments. It is central to programming languages derived from lambda calculus, such as LISP and Scheme, and also in functional languages. It has a role in the study of the denotational semantics of computer programs, because it is a continuous function on complete partial orders. Apply is also a continuous function in homotopy theory, and, indeed underpins the entire theory: it allows a homotopy deformation to be viewed as a continuous path in the space of functions. Likewise, valid mutations (refactorings) of computer programs can be seen as those that are "continuous" in the Scott topology.

<span class="mw-page-title-main">PowerShell</span> Cross-platform command-line interface and scripting language for system and network administration

PowerShell is a task automation and configuration management program from Microsoft, consisting of a command-line shell and the associated scripting language. Initially a Windows component only, known as Windows PowerShell, it was made open-source and cross-platform on August 18, 2016, with the introduction of PowerShell Core. The former is built on the .NET Framework, the latter on .NET.

<span class="mw-page-title-main">Scripting language</span> Programming language for run-time events

A scripting language or script language is a programming language that is used to manipulate, customize, and automate the facilities of an existing system. Scripting languages are usually interpreted at runtime rather than compiled.

The following outline is provided as an overview of and topical guide to the Perl programming language:

Tcl is a high-level, general-purpose, interpreted, dynamic programming language. It was designed with the goal of being very simple but powerful. Tcl casts everything into the mold of a command, even programming constructs like variable assignment and procedure definition. Tcl supports multiple programming paradigms, including object-oriented, imperative, functional, and procedural styles.

References

  1. 1 2 3 "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. Retrieved 2018-11-20.
  4. Kobayashi, Shigeru. "kosh04/newlisp". GitHub. Retrieved 2018-11-20.
  5. "Category:newLISP". Rosetta Code. Retrieved 2018-11-20.
  6. Lazar, Alexandru (5 January 2009). "A look at newLISP". OSNews. Retrieved 2018-11-20.
  7. Slepak, Greg; Hildmann, Marc. "Dragonfly web framework". AppTruck. Retrieved 2018-11-20.
  8. Reimer, Jeremy. "The newLISP on Rockets 2.0 Blog". Rocket Man. Retrieved 2018-11-20.