Limbo is a
programming language
A programming language is a system of notation for writing computer programs.
Programming languages are described in terms of their Syntax (programming languages), syntax (form) and semantics (computer science), semantics (meaning), usually def ...
for writing distributed systems and is the language used to write
applications
Application may refer to:
Mathematics and computing
* Application software, computer software designed to help the user to perform specific tasks
** Application layer, an abstraction layer that specifies protocols and interface methods used in a ...
for the
Inferno operating system. It was designed at
Bell Labs
Nokia Bell Labs, commonly referred to as ''Bell Labs'', is an American industrial research and development company owned by Finnish technology company Nokia. With headquarters located in Murray Hill, New Jersey, Murray Hill, New Jersey, the compa ...
by
Sean Dorward
Sean, also spelled Seán or Séan in Hiberno-English, is a male given name of Irish origin. It comes from the Irish versions of the Biblical Hebrew name '' Yohanan'' (), Seán ( anglicized as '' Shaun/ Shawn/ Shon'') and Séan (Ulster variant; a ...
,
Phil Winterbottom, and
Rob Pike
Robert Pike (born 1956) is a Canadian programmer and author.
He is best known for his work on the Go programming language while working at Google
and the Plan 9 operating system while working at Bell Labs, where he was a member of the Unix t ...
.
The Limbo
compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primaril ...
generates
architecture
Architecture is the art and technique of designing and building, as distinguished from the skills associated with construction. It is both the process and the product of sketching, conceiving, planning, designing, and construction, constructi ...
-independent
object code
In computing, object code or object module is the product of an assembler or compiler
In computing, a compiler is a computer program that Translator (computing), translates computer code written in one programming language (the ''source'' ...
which is then interpreted by the Dis virtual machine or compiled just before runtime to improve performance. Therefore all Limbo applications are completely portable across all Inferno platforms.
Limbo's approach to concurrency was inspired by
Hoare
Hoare is an English surname derived from Middle English '' hor(e)'' meaning grey- or white-haired. Notable people with the surname include:
* Albert Alfred Hoare, known as Bert Hoare (1874–1962), South Australian politician
* Bertie Hoare (19 ...
's
communicating sequential processes
In computer science, communicating sequential processes (CSP) is a formal language for describing patterns of interaction in concurrent systems. It is a member of the family of mathematical theories of concurrency known as process algebras, or p ...
(CSP), as implemented and amended in Pike's earlier
Newsqueak
Newsqueak is a concurrent programming language for writing application software with interactive graphical user interfaces.
Newsqueak's syntax and semantics are influenced by the C (programming language), C language, but its approach to concurr ...
language and Winterbottom's
Alef
Aleph (or alef or alif, transliterated ʾ) is the first letter of the Semitic abjads, including Phoenician ''ʾālep'' 𐤀, Hebrew ''ʾālef'' , Aramaic ''ʾālap'' 𐡀, Syriac ''ʾālap̄'' ܐ, Arabic ''ʾalif'' , and North Arabian 𐪑 ...
.
Language features
Limbo supports the following features:
*
modular programming
Modular programming is a software design technique that emphasizes separating the functionality of a program into independent, interchangeable modules, such that each contains everything necessary to execute only one aspect or "concern" of the d ...
*
concurrent programming
Concurrent means happening at the same time. Concurrency, concurrent, or concurrence may refer to:
Law
* Concurrence, in jurisprudence, the need to prove both ''actus reus'' and ''mens rea''
* Concurring opinion (also called a "concurrence"), a ...
* strong
type checking
In computer programming, a type system is a logical system comprising a set of rules that assigns a property called a ''type'' (for example, integer, floating point, string) to every '' term'' (a word, phrase, or other set of symbols). Usu ...
at compile and run-time
*
interprocess communication
In computer science, interprocess communication (IPC) is the sharing of data between running processes in a computer system. Mechanisms for IPC may be provided by an operating system. Applications which use IPC are often categorized as clients ...
over typed
channels
* automatic
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 recyclable ...
* simple
abstract data type
In computer science, an abstract data type (ADT) is a mathematical model for data types, defined by its behavior (semantics) from the point of view of a '' user'' of the data, specifically in terms of possible values, possible operations on data ...
s
Virtual machine
The Dis virtual machine that executes Limbo code is a CISC-like VM, with instructions for arithmetic,
control flow
In computer science, control flow (or flow of control) is the order in which individual statements, instructions or function calls of an imperative program are executed or evaluated. The emphasis on explicit control flow distinguishes an '' ...
,
data motion,
process
A process is a series or set of activities that interact to produce a result; it may occur once-only or be recurrent or periodic.
Things called a process include:
Business and management
* Business process, activities that produce a specific s ...
creation, synchronizing and communicating between processes, loading modules of code, and support for higher-level data-types: strings, arrays, lists, and communication channels.
It uses a hybrid of
reference counting
In computer science, reference counting is a programming technique of storing the number of references, pointers, or handles to a resource, such as an object, a block of memory, disk space, and others.
In garbage collection algorithms, refere ...
and a
real-time
Real-time, realtime, or real time may refer to:
Computing
* Real-time computing, hardware and software systems subject to a specified time constraint
* Real-time clock, a computer clock that keeps track of the current time
* Real-time Control Syst ...
garbage-collector for cyclic data.
Aspects of the design of Dis were inspired by the
AT&T Hobbit
The AT&T Hobbit is a microprocessor design developed by AT&T Corporation in the early 1990s. It was based on the company's CRISP (C-language Reduced Instruction Set Processor) design resembling the classic RISC pipeline, and which in turn grew ou ...
microprocessor, as used in the original
BeBox
The BeBox is a discontinued personal computer from Be Inc., running the company's operating system
An operating system (OS) is system software that manages computer hardware and software resources, and provides common daemon (computing), s ...
.
Examples
Limbo uses
Ada-style definitions as in:
name := type value;
name0,name1 : type = value;
name2,name3 : type;
name2 = value;
Hello world
implement Command;
include "sys.m";
sys: Sys;
include "draw.m";
include "sh.m";
init(nil: ref Draw->Context, nil: list of string)
Books
The 3rd edition of the Inferno operating system and Limbo programming language are described in the textbook ''Inferno Programming with Limbo'' (Chichester: John Wiley & Sons, 2003), by
Phillip Stanley-Marbell. Another textbook ''The Inferno Programming Book: An Introduction to Programming for the Inferno Distributed System'', by Martin Atkins, Charles Forsyth,
Rob Pike
Robert Pike (born 1956) is a Canadian programmer and author.
He is best known for his work on the Go programming language while working at Google
and the Plan 9 operating system while working at Bell Labs, where he was a member of the Unix t ...
and Howard Trickey, was started, but never released.
See also
* The
Inferno operating system
*
Alef
Aleph (or alef or alif, transliterated ʾ) is the first letter of the Semitic abjads, including Phoenician ''ʾālep'' 𐤀, Hebrew ''ʾālef'' , Aramaic ''ʾālap'' 𐡀, Syriac ''ʾālap̄'' ܐ, Arabic ''ʾalif'' , and North Arabian 𐪑 ...
, the predecessor of Limbo
*
Plan 9 from Bell Labs
Plan 9 from Bell Labs is a distributed operating system which originated from the Computing Science Research Center (CSRC) at Bell Labs in the mid-1980s and built on UNIX concepts first developed there in the late 1960s. Since 2000, Plan 9 has ...
, operating system
*
Go, similar language from Google
*
AT&T Hobbit
The AT&T Hobbit is a microprocessor design developed by AT&T Corporation in the early 1990s. It was based on the company's CRISP (C-language Reduced Instruction Set Processor) design resembling the classic RISC pipeline, and which in turn grew ou ...
, a processor architecture which inspired the Dis VM
References
External links
Vita Nuova page on LimboA Descent into Limboby
Brian Kernighan
Brian Wilson Kernighan (; born January 30, 1942) is a Canadian computer scientist.
He worked at Bell Labs and contributed to the development of Unix alongside Unix creators Ken Thompson and Dennis Ritchie. Kernighan's name became widely known ...
The Limbo Programming Languageby
Dennis M. Ritchie an
Addendumby Vita Nuova.
Inferno Programming with Limboby
Phillip Stanley-Marbell
Threaded programming in the Bell Labs CSP style*
* .
* .
* .
{{DEFAULTSORT:Limbo (Programming Language)
Concurrent programming languages
Free and open source compilers
Inferno (operating system)
Programming languages created in 1995
Virtual machines