Jump to content

BLISS

From Alfawiki
BLISS
Company typeProgramming language
IndustrySoftware, Systems programming
Founded1970; 56 years ago (1970)
FounderW. A. Wulf, D. B. Russell, A. N. Habermann
Headquarters
Pittsburgh
,
United States
ProductsBLISS compilers (BLISS-10, BLISS-11, BLISS-16, BLISS-32, BLISS-36, BLISS-64)

BLISS is a system programming language created at Carnegie Mellon University around 1970 by W. A. Wulf, D. B. Russell, and A. N. Habermann. It was recognized as a prominent system language until C emerged and surpassed it in widespread use. Initial discussions at Bell Labs often contrasted the advantages of BLISS with those of C.

As a typeless and block-structured language, BLISS emphasizes expressions over statements. It includes features such as exception handling, coroutine support, and macros, while deliberately omitting the goto command.

The acronym BLISS has been variously expanded as Basic Language for Implementation of System Software or System Software Implementation Language, Backwards. Nevertheless, Wulf clarified that its original meaning was "Bill's Language for Implementing System Software."

The CMU-developed compiler for BLISS gained attention due to its advanced optimization techniques and served as the foundation for the influential publication The Design of an Optimizing Compiler.

Digital Equipment Corporation (DEC) produced and supported BLISS compilers across multiple hardware platforms, including the PDP-10, PDP-11, VAX, PRISM, MIPS, DEC Alpha, and Intel's IA-32. Although BLISS adoption among DEC's customer base remained limited, it was extensively utilized internally throughout the 1980s; notably, the majority of utility programs within the OpenVMS operating system were implemented in BLISS-32. During transitions to new OpenVMS platforms, the DEC BLISS compiler was ported to IA-64 and x86-64 architectures. The x86-64 variant uses the LLVM framework as its backend code generator, replacing the proprietary GEM backend formerly employed for Alpha and IA-64 processors.

Language description

BLISS is characterized by several distinctive features:

  • All constants correspond exactly to the machine word size (for instance, 16 bits on the PDP-11, 32 bits on the VAX, and 36 bits on the PDP-10).
  • When referring to variables, their address is returned; to access their stored value, a period prefix is required (e.g., .Z+8 computes eight added to the content of Z).
  • Assignments use = to store constants at specific memory locations (for example, Z=8 assigns 8 to Z's address, while Z+12=14 stores 14 twelve words beyond Z's address).
  • Blocks are structured similarly to ALGOL, using either BEGIN/END or parentheses, with statements separated by semicolons and following conventional operator precedence.
  • Conditional logic employs the IF expression, which evaluates conditions, executes actions accordingly, and produces a result.
  • Comparison operators are expressed through keywords such as EQL (equal), GTR (greater than), and NEQ (not equal). For instance:
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
  • Identifiers must be declared in advance using OWN; variables may be associated with fixed hardware addresses via BIND, enabling direct manipulation of registers or special memory locations.
  • Subroutines are defined as routines using the keyword ROUTINE.
  • Text substitution macros are introduced with MACRO.
  • Arrays—referred to as structures—are declared through VECTOR.
  • Advanced language constructs include:
    • Multiple execution branches via CASE
    • Looping mechanisms provided by the INCR expression, analogous to ALGOL's FOR loop
    • Built-in functions for string manipulation
    • Automatic conversion between data types such as numbers and strings

Source example

Presented below is a direct excerpt from the Bliss Language Manual:

<syntaxhighlight lang=text> MODULE E1 (MAIN = CTRL) = BEGIN FORWARD ROUTINE

   CTRL,
   STEP;

ROUTINE CTRL = !+ ! This routine reads an input value, processes it, and ! subsequently produces the output. !-

   BEGIN
   EXTERNAL ROUTINE
       GETNUM,     ! Reads a number from the terminal
       PUTNUM;     ! Writes a number to the terminal
   LOCAL
       X,          ! Variable for input value storage
       Y;          ! Variable for output value storage
   GETNUM(X);
   Y = STEP(.X);
   PUTNUM(.Y)
   END;

ROUTINE STEP(A) = !+ ! This routine increments the provided value by 1. !-

   (.A+1);

END ELUDOM </syntaxhighlight>

Versions

  • BLISS-10 variant:
    • BLISS-10 - CMU's native compiler designed for the PDP-10 platform
  • BLISS-11 variant:
    • BLISS-11 - CMU's cross compiler hosted on PDP-10 targeting the PDP-11
  • Common BLISS variants (used by DEC compilers):
    • BLISS-16 - Cross compiler hosted on VMS for PDP-11 systems
    • BLISS-16C - Translator on PDP-10 converting a subset of Common BLISS to BLISS-11
    • BLISS-32 - Native compiler running on VAX/VMS
    • BLISS-36C - Translator on PDP-10 converting a subset of Common BLISS to BLISS-10
    • BLISS-36 - Native compiler for the PDP-10 architecture
    • BLISS-64 - Native compiler created for Alpha/AXP systems

References

  • Wulf, W. A.; Russell, D. B.; Habermann, A. N. (December 1971). "BLISS: A Language for Systems Programming". Communications of the ACM. 14 (12): 780–790.
  • Wulf, W. A.; Johnson, R. K.; Weinstock, C. B.; Hobbs, S. O.; Geschke, C. M. (1975). The Design of an Optimizing Compiler. New York: Elsevier. ISBN 0-444-00158-1.
  • Brender, Ronald F. (2002). "The BLISS programming language: a history". Software: Practice and Experience. 32 (10): 955–981.

External links

Downloads