Bliss House Newport
   HOME

TheInfoList



OR:

BLISS is a
system programming language A system programming language is a programming language used for system programming; such languages are designed for writing system software, which usually requires different development approaches when compared with application software. Edsger D ...
developed at
Carnegie Mellon University Carnegie Mellon University (CMU) is a private research university in Pittsburgh, Pennsylvania. One of its predecessors was established in 1900 by Andrew Carnegie as the Carnegie Technical Schools; it became the Carnegie Institute of Technology ...
(CMU) by
W. A. Wulf William Allan Wulf (born December 8, 1939) is a computer scientist notable for his work in programming languages and compilers. Until June 2012, he was a university professor and the AT&T Professor of Engineering and Applied Sciences in the Depar ...
, D. B. Russell, and A. N. Habermann around 1970. It was perhaps the best known system language until C debuted a few years later. Since then, C became popular and common, and BLISS faded into obscurity. When C was in its infancy, a few projects within
Bell Labs Nokia Bell Labs, originally named Bell Telephone Laboratories (1925–1984), then AT&T Bell Laboratories (1984–1996) and Bell Labs Innovations (1996–2007), is an American industrial research and scientific development company owned by mult ...
debated the merits of BLISS vs. C. BLISS is a typeless block-
structured programming Structured programming is a programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making extensive use of the structured control flow constructs of selection ( if/then/else) and repetition ( ...
language based on expressions rather than statements, and includes constructs for exception handling, coroutines, and macros. It does not include a
goto GoTo (goto, GOTO, GO TO or other case combinations, depending on the programming language) is a statement found in many computer programming languages. It performs a one-way transfer of control to another line of code; in contrast a function ca ...
statement. The name is variously said to be short for ''Basic Language for Implementation of System Software'' or ''System Software Implementation Language, Backwards''. It was sometimes called "Bill's Language for Implementing System Software", after Bill Wulf. The original Carnegie Mellon
compiler In computing, a compiler is a computer program that translates computer code written in one programming language (the ''source'' language) into another language (the ''target'' language). The name "compiler" is primarily used for programs that ...
was notable for its extensive use of optimizations, and formed the basis of the classic book ''
The Design of an Optimizing Compiler ''The Design of an Optimizing Compiler'' (Elsevier Science Ltd, 1980, ), by William Wulf, Richard K. Johnson, Charles B. Weinstock, Steven O. Hobbs, and Charles Geschke, Charles M. Geschke, was published in 1975 by Elsevier. It describes the BLISS ...
''.
Digital Equipment Corporation Digital Equipment Corporation (DEC ), using the trademark Digital, was a major American company in the computer industry from the 1960s to the 1990s. The company was co-founded by Ken Olsen and Harlan Anderson in 1957. Olsen was president unt ...
(DEC) developed and maintained BLISS compilers for the
PDP-10 Digital Equipment Corporation (DEC)'s PDP-10, later marketed as the DECsystem-10, is a mainframe computer family manufactured beginning in 1966 and discontinued in 1983. 1970s models and beyond were marketed under the DECsystem-10 name, especi ...
,
PDP-11 The PDP-11 is a series of 16-bit minicomputers sold by Digital Equipment Corporation (DEC) from 1970 into the 1990s, one of a set of products in the Programmed Data Processor (PDP) series. In total, around 600,000 PDP-11s of all models were sold, ...
,
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 VA ...
,
DEC PRISM PRISM (Parallel Reduced Instruction Set Machine) was a 32-bit RISC instruction set architecture (ISA) developed by Digital Equipment Corporation (DEC). It was the outcome of a number of DEC research projects from the 1982–1985 time-frame, and t ...
, MIPS,
DEC Alpha Alpha (original name Alpha AXP) is a 64-bit reduced instruction set computer (RISC) instruction set architecture (ISA) developed by Digital Equipment Corporation (DEC). Alpha was designed to replace 32-bit VAX complex instruction set computers ...
, and Intel
IA-32 IA-32 (short for "Intel Architecture, 32-bit", commonly called i386) is the 32-bit version of the x86 instruction set architecture, designed by Intel and first implemented in the 80386 microprocessor in 1985. IA-32 is the first incarnation of ...
, The language did not become popular among customers and few had the compiler, but DEC used it heavily in-house into the 1980s; most of the utility programs for the
OpenVMS OpenVMS, often referred to as just VMS, is a multi-user, multiprocessing and virtual memory-based operating system. It is designed to support time-sharing, batch processing, transaction processing and workstation applications. Customers using Ope ...
operating system An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs. Time-sharing operating systems schedule tasks for efficient use of the system and may also in ...
were written in BLISS-32. The DEC BLISS compiler has been ported to the IA-64 and
x86-64 x86-64 (also known as x64, x86_64, AMD64, and Intel 64) is a 64-bit version of the x86 instruction set, first released in 1999. It introduced two new modes of operation, 64-bit mode and compatibility mode, along with a new 4-level paging mod ...
architectures as part of the ports of OpenVMS to these platforms. The x86-64 BLISS compiler uses
LLVM LLVM is a set of compiler and toolchain technologies that can be used to develop a front end for any programming language and a back end for any instruction set architecture. LLVM is designed around a language-independent intermediate represen ...
as its backend code generator, replacing the proprietary GEM backend used for Alpha and IA-64.


Language description

The BLISS language has the following characteristics: * All ''constants'' are full word for the machine being used, e.g. on a 16-bit machine such as the
PDP-11 The PDP-11 is a series of 16-bit minicomputers sold by Digital Equipment Corporation (DEC) from 1970 into the 1990s, one of a set of products in the Programmed Data Processor (PDP) series. In total, around 600,000 PDP-11s of all models were sold, ...
, a constant is 16 bits; on a
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 VA ...
computer, constants are 32 bits, and on a
PDP-10 Digital Equipment Corporation (DEC)'s PDP-10, later marketed as the DECsystem-10, is a mainframe computer family manufactured beginning in 1966 and discontinued in 1983. 1970s models and beyond were marketed under the DECsystem-10 name, especi ...
, a constant is 36 bits. * A ''reference to a variable'' is always to the address of that variable. For example, the instruction Z+8 refers to adding 8 to the ''address'' of Z, not to its ''value''. If one needs to add 8 to the ''value'' of Z, one must prefix the variable with a period; so one would type .Z+8 to perform this function, which adds 8 to the ''contents'' of Z. * ''Assignment'' is done with the standard = symbol, e.g. Z=8 – which says to create a full-word constant containing 8, and store it in the location whose address corresponds to that of Z. So Z+12=14 (or, alternatively 12+Z=14) places the constant 14 into the location which is 12 words after the address of Z. (This is considered bad practice.) * ''Block statements'' are similar to those of ALGOL: a block is started with a BEGIN statement and terminated with END. As with ALGOL, statements are terminated with the semicolon (";"). When a value is computed, it is saved until the next statement terminator – which means that a value can be computed, assigned to a variable, and carried forward to the next statement, if desired. Alternatively, an open parenthesis may be used to begin a block, with the close parenthesis used to close the block. When parentheses are included in an expression, the standard
precedence Precedence may refer to: * Message precedence of military communications traffic * Order of precedence, the ceremonial hierarchy within a nation or state * Order of operations, in mathematics and computer programming * Precedence Entertainment, a ...
rules are used, in which parenthesized expressions are computed first, * ''Conditional execution'' uses the IF expression, which tests a true-false condition, performs alternative actions, and returns a result. * ''Comparison'' uses keywords such as EQL for equality (as opposed to overloading the = symbol for the same purpose), GTR for Greater Than, and NEQ for not equal. For example, the following code will assign the absolute value of Z to the address indicated by Q: ::Q = (IF .Z GTR 0 THEN .Z ELSE -.Z); * ''Identifiers'' (variables and constants) must be declared before use, typically using the OWN keyword. Declaring a variable normally causes the compiler to allocate space for it; when necessary, a variable may be assigned a fixed machine address via the BIND declaration. This feature is primarily used for accessing either machine registers or certain special addresses. * ''
Subroutine In computer programming, a function or subroutine is a sequence of program instructions that performs a specific task, packaged as a unit. This unit can then be used in programs wherever that particular task should be performed. Functions may ...
s'' in the language are called ''routines'', and are declared with the keyword ROUTINE. * ''Macros'', which allow for text substitution, are declared with the keyword MACRO. * The language supports '' arrays'', which are referred to as ''structures'', and declared with the keyword VECTOR. * The language supports some ''
high-level programming language In computer science, a high-level programming language is a programming language with strong Abstraction (computer science), abstraction from the details of the computer. In contrast to low-level programming languages, it may use natural language ...
constructs'' such as: **''Alternative execution paths'' via the CASE expression **''Looping'' through use of the INCR expression, which is similar to ALGOL's FOR statement **Built-in ''
string String or strings may refer to: *String (structure), a long flexible structure made from threads twisted together, which is used to tie, bind, or hang other objects Arts, entertainment, and media Films * ''Strings'' (1991 film), a Canadian anim ...
functions'' **Certain automatic ''data conversions'' (number to string, etc.)


Source example

The following example is taken verbatim from the ''Bliss Language Manual'': MODULE E1 (MAIN = CTRL) = BEGIN FORWARD ROUTINE CTRL, STEP; ROUTINE CTRL = !+ ! This routine inputs a value, operates on it, and ! then outputs the result. !- BEGIN EXTERNAL ROUTINE GETNUM, ! Input a number from terminal PUTNUM; ! Output a number to terminal LOCAL X, ! Storage for input value Y; ! Storage for output value GETNUM(X); Y = STEP(.X); PUTNUM(.Y) END; ROUTINE STEP(A) = !+ ! This routine adds 1 to the given value. !- (.A+1); END ELUDOM


Versions

* BLISS-10 * BLISS-11 - a cross compiler for the PDP-11 * BLISS-16 * BLISS-16C - DEC version of BLISS-11 * BLISS-32 * BLISS-36 * BLISS-64 * Common BLISS - portable subset


Notes


References

* Also
"BLISS: A Language for Systems Programming"
(PostScript) * Wulf, W. A.; Johnson, R. K.; Weinstock, C. B.; Hobbs, S. O.; Geschke, C. M. (1975). ''
The Design of an Optimizing Compiler ''The Design of an Optimizing Compiler'' (Elsevier Science Ltd, 1980, ), by William Wulf, Richard K. Johnson, Charles B. Weinstock, Steven O. Hobbs, and Charles Geschke, Charles M. Geschke, was published in 1975 by Elsevier. It describes the BLISS ...
''. New York: Elsevier, . *


External links


BLISS Manual at DECUS
* Lehotsky, Alan
a post about BLISS at DEC
* Madison, Matthew D.
Session notes for "Introduction to BLISS"
(PostScript)


Downloads


BLISS-10
* tp://ftp.iecc.com/pub/file/bliss.tar.gz BLISS-11
BLISS-36

BLISS-11, BLISS-32 and BLISS-64
* tp://freevms.nvg.org/pub/vms/freevms/ FreeVMS Portable BLISS for GCC {{Carnegie Mellon Systems programming languages OpenVMS software Carnegie Mellon University software Programming languages Programming languages created in 1970