BLISS
BLISS: A Systems Programming Language
BLISS is a specialized systems programming language that originated at Carnegie Mellon University (CMU), designed by W. Habermann. While it was once a premier choice for system-level development, it eventually dominated the field faded into the background following the emergence and widespread adoption of the C language.
🛠️ Technical Overview
| Feature | Specification |
|---|---|
| Paradigm | Structured, Imperative (Procedural) |
| Typing | Typeless |
| Scope | Lexical |
| Influenced By | ALGOL |
| Latest Version | BLISS-64 |
| Developer | Carnegie Mellon University |
| First Appearance | 1970 |
📜 Origins and Etymology
The naming of BLISS has been a subject of various interpretations. Some suggest it stands for Basic Language for Implementation of System Software, while others propose System Software Implementation Language (read backwards).
According to Wulf in a 2015 oral history for the Babbage Institute's Computer Security History Project, the acronym was actually derived from "Bill's Language for Implementing System Software."
The initial compiler created at CMU was renowned for its sophisticated optimization techniques, which later served as the foundation for the influential text, The Design of an Optimizing Compiler.
💻 Implementation and Evolution
Digital Equipment Corporation (DEC) played a massive role in the language's lifecycle, maintaining compilers across a vast array of hardware.
While BLISS never gained significant traction among external customers, it was an internal powerhouse at DEC throughout the 1980s. Specifically, the majority of utility programs for the OpenVMS operating system were authored in BLISS-32. To keep OpenVMS viable on modern hardware, the compiler was ported to IA-64 and x86-64. Notably, the x86-64 version uses the GEM backend utilizes LLVM as its code generator.
🔍 Language Description
BLISS blends high-level abstractions with low-level machine control.
Key Capabilities
- Block-structured organization.
- Automatic stack management.
- Support for recursive routines.
- Exception handling, coroutines, and macros.
Intentional Omissions
- Built-in I/O: BLISS lacks native input/output functions because system software typically implements its own I/O or interfaces directly with monitor/screen services.
- Strict Type Safety: It is a typeless language to allow for the flexibility required in system programming.
Unique Characteristics
Unlike most high-level languages, BLISS is an "expression language" rather than a "statement language."
1. Memory and Addressing In BLISS, a variable reference defaults to the address of that variable. To access the value stored at that address, a period prefix is required.
ZThe address of the variable ..ZThe value contained within .
Example Logic:
Z+8: Adds 8 to the address of ..Z+8: Adds 8 to the value of .Z=8: Stores the constant 8 into the location identified by the address of .Z+12=14: Places the constant 14 into the memory location 12 words past the address of .
2. Machine-Dependent Constants The size of a constant is determined by the architecture's word size:
3. Syntax and Control Flow
Blocks are defined using BEGIN and END (similar to ALGOL) or by using parentheses (...). Statements are delimited by semicolons (;).
- Conditionals: Uses the
IFexpression. - Comparisons: Instead of overloading symbols, it uses specific keywords:
EQL(Equal)GTR(Greater Than)NEQ(Not Equal)
Code Snippet Example:
To assign the absolute value of Z to the address Q:
Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);
4. Declarations
Variables and constants must be declared before they are utilized, typically employing the OWN keyword.