MultiLisp is a
functional programming language
A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language.
The description of a programming ...
, a
dialect
The term dialect (from Latin , , from the Ancient Greek word , 'discourse', from , 'through' and , 'I speak') can refer to either of two distinctly different types of linguistic phenomena:
One usage refers to a variety of a language that is a ...
of the language
Lisp, and of its dialect
Scheme, extended with constructs for
parallel computing execution and
shared memory
In computer science, shared memory is memory that may be simultaneously accessed by multiple programs with an intent to provide communication among them or avoid redundant copies. Shared memory is an efficient means of passing data between progr ...
. These extensions involve
side effects
In medicine, a side effect is an effect, whether therapeutic or adverse, that is secondary to the one intended; although the term is predominantly employed to describe adverse effects, it can also apply to beneficial, but unintended, consequence ...
, rendering MultiLisp
nondeterministic. Along with its parallel-programming extensions, MultiLisp also had some unusual
garbage collection
Waste collection is a part of the process of waste management. It is the transfer of solid waste from the point of use and disposal to the point of treatment or landfill. Waste collection also includes the curbside collection of recyclabl ...
and task scheduling algorithms. Like Scheme, MultiLisp was optimized for
symbolic computing. Unlike some parallel programming languages, MultiLisp incorporated constructs for causing side effects and for explicitly introducing parallelism.
It was designed by Robert H. Halstead Jr., in the early 1980s for use on the 32-processor Concert
multiprocessor
Multiprocessing is the use of two or more central processing units (CPUs) within a single computer system. The term also refers to the ability of a system to support more than one processor or the ability to allocate tasks between them. There ar ...
then being developed at
Massachusetts Institute of Technology
The Massachusetts Institute of Technology (MIT) is a private land-grant research university in Cambridge, Massachusetts. Established in 1861, MIT has played a key role in the development of modern technology and science, and is one of the ...
(MIT) and implemented in
Interlisp
Interlisp (also seen with a variety of capitalizations) is a programming environment built around a version of the programming language Lisp. Interlisp development began in 1966 at Bolt, Beranek and Newman (renamed BBN Technologies) in Cambridge, ...
. It influenced the development of the Scheme dialects
Gambit
A gambit (from Italian , the act of tripping someone with the leg to make them fall) is a chess opening in which a player sacrifices with the aim of achieving a subsequent advantage.
The word '' gambit'' is also sometimes used to describe sim ...
,
and Interlisp-
VAX
VAX (an acronym for Virtual Address eXtension) is a series of computers featuring a 32-bit instruction set architecture (ISA) and virtual memory that was developed and sold by Digital Equipment Corporation (DEC) in the late 20th century. The V ...
.
PCALL and FUTURE
MultiLisp achieves parallelism with the PCALL
macro, where
(PCALL Fun A B C ...)
is equivalent to
(Fun A B C ...)
except that the
arguments
A, B, C,
etc. are explicitly allowed to be evaluated in parallel; this circumvents the usual order of evaluation, which is sequential and left to right. It also makes use of a parallel programming construct called
futures
Futures may mean:
Finance
*Futures contract, a tradable financial derivatives contract
*Futures exchange, a financial market where futures contracts are traded
* ''Futures'' (magazine), an American finance magazine
Music
* ''Futures'' (album), a ...
, which resembles
forking, combined with
lazy evaluation
In programming language theory, lazy evaluation, or call-by-need, is an evaluation strategy which delays the evaluation of an expression until its value is needed ( non-strict evaluation) and which also avoids repeated evaluations (sharing).
The ...
. Using this construct, an expression such as
(cons
In computer programming, ( or ) is a fundamental function in most dialects of the Lisp programming language. ''constructs'' memory objects which hold two values or pointers to two values. These objects are referred to as (cons) cells, conses, ...
(FUTURE A) (FUTURE B))
can be written, which will overlap the evaluation of the expressions A and B, not only with each other, but with computations that use the result of the
cons
In computer programming, ( or ) is a fundamental function in most dialects of the Lisp programming language. ''constructs'' memory objects which hold two values or pointers to two values. These objects are referred to as (cons) cells, conses, ...
call, until an operation is performed that needs correct information about the value of A or B.
See also
*
Speculative evaluation
References
*
*
*
*
*
*
{{Lisp programming language
Concurrent programming languages
Dynamically typed programming languages
Functional languages
Lisp programming language family
Multi-paradigm programming languages