Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
BLISS
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Systems programming language}} {{Other uses|Bliss (disambiguation){{!}}Bliss}} {{Infobox programming language | name = BLISS | logo = | paradigm = [[Structured programming|Structured]], [[Imperative programming|imperative]] ([[Procedural programming|procedural]]) | designer = [[William Wulf|W. A. Wulf]], D. B. Russell, [[Nico Habermann|A. N. Habermann]] | developer = [[Carnegie Mellon University]] | released = {{Start date and age|1970}}<!-- If known, add |mm|dd --> | latest release version = BLISS-64 | latest release date =<!-- {{Start date and age|1970|mm|dd}} --> | typing = [[Data type|Typeless]] | scope = [[Scope (computer science)|Lexical]] | implementations = | dialects = Common BLISS | platform = [[PDP-10]], [[PDP-11]], [[VAX]], [[DEC PRISM|PRISM]], [[MIPS architecture|MIPS]], [[DEC Alpha]], [[IA-32]], [[IA-64]], [[x86-64]] | operating system = [[Cross-platform]] | license = | file ext = | website = | influenced by = [[ALGOL]] | influenced = }} '''BLISS''' is a [[system programming language]] developed at [[Carnegie Mellon University]] (CMU) by [[William Wulf|W. A. Wulf]], D. B. Russell, and [[Nico Habermann|A. N. Habermann]] around 1970. It was perhaps the best known system language until [[C (programming language)|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]] debated the merits of BLISS vs. C.{{citation needed |date=February 2015}} BLISS is a [[Data type|typeless]] [[Block (programming)|block]]-[[structured programming]] language based on expressions rather than statements, and includes constructs for [[exception handling]], [[coroutine]]s, and [[Macro (computer science)|macros]]. It does not include a [[goto]] statement. The name is variously said to be short for ''Basic Language for Implementation of System Software'' or ''System Software Implementation Language, Backwards''. However, in his 2015 oral history for the Babbage Institute's Computer Security History Project, Wulf claimed that the acronym was originally based on the name "Bill's Language for Implementing System Software."<ref>{{cite interview |url=https://conservancy.umn.edu/bitstream/handle/11299/178985/oh477waw.pdf?sequence=1&isAllowed=y |title=An Interview with WILLIAM A. WULF OH 477 |first=William A. |last=Wulf |author-link=William Wulf |interviewer=Jeffrey R. Yost |date=June 23, 2015 |location=Charlottesville, Virginia}}</ref> The original Carnegie Mellon [[compiler]] was notable for its extensive use of [[Optimizing compiler|optimizations]], and formed the basis of the classic book ''[[The Design of an Optimizing Compiler]]''. [[Digital Equipment Corporation]] (DEC) developed and maintained BLISS compilers for the [[PDP-10]],<ref name="bliss-history">{{cite journal |first=Ronald F. |last=Brender |date=2002 |title=The BLISS programming language: a history |journal=Software: Practice and Experience |volume=32 |issue=10 |pages=955β981 |doi=10.1002/spe.470 |s2cid=45466625 |url=https://www.cs.tufts.edu/~nr/cs257/archive/ronald-brender/bliss.pdf}}</ref> [[PDP-11]],<ref name="bliss-history"/> [[VAX]],<ref name="bliss-history"/> [[DEC PRISM]],<ref>{{cite web |last=MacLaren |first=Don |date=August 27, 1987 |url=http://bitsavers.org/pdf/dec/prism/mica/870827_DECwest_Compiler_Project.pdf |title=DECWest Compiler Project, Description, and Plan |website=Bitsavers.org}}</ref> [[MIPS architecture|MIPS]],<ref name="bliss-history"/> [[DEC Alpha]],<ref name="bliss-history"/> and Intel [[IA-32]],<ref name="bliss-history"/> The language did not become popular among customers and few had the compiler,<ref name="dacruz198870916">{{cite mailing list |last=da Cruz |first=Frank |date=16 September 1987 |url=http://www.columbia.edu/kermit/ftp/e/mail.87a |title=News about Kermit Programs for VAX/VMS |publisher=Kermit Project, Columbia University |mailing-list=Info-Kermit Digest |access-date=5 May 2019 |quote=[[Kermit (protocol)|Kermit-32]] is written in the Bliss language, DEC's "corporate implementation language" (originally developed at CMU). Bliss never gained popularity among DEC's customers; few sites have Bliss compilers.}}</ref> but DEC used it heavily in-house into the 1980s; most of the utility programs for the [[OpenVMS]] [[operating system]] were written in BLISS-32. The DEC BLISS compiler has been ported to the [[IA-64]] and [[x86-64]] architectures as part of the ports of OpenVMS to these platforms.<ref name="bliss-history"/><ref>{{cite web|url=https://www.youtube.com/watch?v=xTaBkCBYskA |archive-url=https://ghostarchive.org/varchive/youtube/20211221/xTaBkCBYskA |archive-date=2021-12-21 |url-status=live|title=2017 LLVM Developers' Meeting: J. Reagan "Porting OpenVMS using LLVM" |website=[[YouTube]] |date=31 October 2017}}{{cbignore}}</ref> The x86-64 BLISS compiler uses [[LLVM]] as its backend [[code generation (compiler)|code generator]], replacing the proprietary GEM backend used for Alpha and IA-64. == Language description == {{long quote|date=June 2020}} {{quote|BLISS has many of the features of other modern high-level languages. It has block structure, an automatic stack, and mechanisms for defining and calling recursive routines ... provides a variety of predefined data structures and ... facilities for testing and iteration ... On the other hand, BLISS omits certain features of other high-level languages. It does not have built-in facilities for input/output, because a system-software project usually develops its own input/output or builds on basic monitor I/O or screen management services ... it permits access to machine-specific features, because system software often requires this. BLISS has characteristics that are unusual among high-level languages. A name ... is uniformly interpreted as the address of that segment rather than the value of the segment ... Also, BLISS is an "expression language" rather than a "statement language". This means that every construct of the language that is not a declaration is an expression. Expressions produce a value as well as possibly causing an action such as modification of storage, transfer of control, or execution of a program loop. For example, the counterpart of an assignment "statement" in BLISS is, strictly speaking, an expression that itself has a value. The value of an expression can be either used or discarded in BLISS ... Finally, BLISS includes a macro facility that provides a level of capability usually found only in macro-assemblers.|''Bliss Language Manual'', [[Digital Equipment Corporation]] (1987)<ref name=Manual>[http://www.digiater.nl/openvms/freeware/v80/bliss/documentation/blslref.pdf Bliss Language Manual], [[Digital Equipment Corporation]] (1987)</ref>}} 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]], a constant is 16 bits; on a [[VAX]] computer, constants are 32 bits, and on a [[PDP-10]], a constant is 36 bits. * A ''reference to a variable'' is always to the address of that variable. For example, the instruction <code>Z+8</code> 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 <code>.Z+8</code> to perform this function, which adds 8 to the ''contents'' of Z. * ''Assignment'' is done with the standard <code>=</code> symbol, e.g. <code>Z=8</code> – which says to create a full-word constant containing 8, and store it in the location whose address corresponds to that of Z. So <code>Z+12=14</code> (or, alternatively <code>12+Z=14</code> though this form is considered bad practice per the BLISS documentation in Digital) places the constant 14 into the location which is 12 words after the address of Z. * ''Block statements'' are similar to those of [[ALGOL]]: a block is started with a <code>BEGIN</code> statement and terminated with <code>END</code>. As with ALGOL, statements are separated 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 [[Order of operations|precedence]] rules are used, in which parenthesized expressions are computed first, * ''Conditional execution'' uses the <code>IF</code> expression, which tests a true-false condition, performs alternative actions, and returns a result. * ''Comparison'' uses keywords such as <code>EQL</code> for equality (as opposed to [[operator overloading|overloading]] the = symbol for the same purpose), <code>GTR</code> for Greater Than, and <code>NEQ</code> for not equal. For example, the following code will assign the absolute value of Z to the address indicated by Q: ::<code>Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);</code> * ''Identifiers'' (variables and constants) must be declared before use, typically using the <code>OWN</code> 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 <code>BIND</code> declaration. This feature is primarily used for accessing either machine registers or certain special addresses. * ''[[Subroutine]]s'' in the language are called ''routines'', and are declared with the keyword <code>ROUTINE</code>. * ''Macros'', which allow for text substitution, are declared with the keyword <code>MACRO</code>. * The language supports ''[[Array data structure|arrays]]'', which are referred to as ''structures'', and declared with the keyword <code>VECTOR</code>. * The language supports some ''[[high-level programming language]] constructs'' such as: **''Alternative execution paths'' via the <code>CASE</code> expression **''Looping'' through use of the <code>INCR</code> expression, which is similar to ALGOL's FOR statement **Built-in ''[[String (computer science)|string]] functions'' **Certain automatic ''data conversions'' (number to string, etc.) ==Source example== The following example is taken verbatim from the ''Bliss Language Manual'':<ref name=Manual/> <syntaxhighlight lang=text> 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 </syntaxhighlight> == Versions == * BLISS-10 dialect: ** BLISS-10 - CMU's native compiler for the PDP-10 * BLISS-11 dialect: ** BLISS-11 - CMU's PDP-10-hosted [[cross compiler]] for the PDP-11 * Common BLISS dialect (all DEC compilers): ** BLISS-16 - A VMS-hosted cross compiler for the PDP-11 ** BLISS-16C - A PDP-10-hosted translator from a subset of Common BLISS to BLISS-11 ** BLISS-32 - A native compiler for VAX/VMS ** BLISS-36C - A PDP-10-hosted translator from a subset of Common BLISS to BLISS-10. ** BLISS-36 - A native compiler for the PDP-10 ** BLISS-64 - A native compiler for Alpha/AXP ==Notes== {{reflist}} == References == *{{Cite journal |last1=Wulf |first1=W. A. |author1-link=William Wulf |last2=Russell |first2=D. B. |last3=Habermann |first3=A. N. |author3-link=Nico Habermann |date=December 1971 |url=http://www.cs.arizona.edu/classes/cs520/spring06/bliss.pdf |title=BLISS: A Language for Systems Programming |journal=[[Communications of the ACM]] |volume=14 |issue=12 |pages=780β790|doi=10.1145/362919.362936 |s2cid=9564255 }} Also: [http://vms.process.com/scripts/fileserv/fileserv.com?BLISS-ARTICLE "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]]''. New York: Elsevier, {{ISBN|0-444-00158-1}}. * {{cite journal |first=Ronald F. |last=Brender |date=2002 |title=The BLISS programming language: a history |journal=Software: Practice and Experience |volume=32 |issue=10 |pages=955β981 |doi=10.1002/spe.470 |s2cid=45466625 |url=https://www.cs.tufts.edu/~nr/cs257/archive/ronald-brender/bliss.pdf}} == External links == * [https://web.archive.org/web/20061207101653/http://decus.decus.de:8080/htbin/webbook/PUBLIC$ROOT%3a%5bUTIL.BLISS%5d4358pro.p7.#1 BLISS Manual at DECUS] <!-- * [http://63.249.85.132/langs Site with PDFs of manuals] --> * Lehotsky, Alan; [http://compilers.iecc.com/comparch/article/87-07-029 a post about BLISS at DEC] <!-- * [http://63.249.85.132/langs/bliss/bliss.pdf Language Reference Manual] --> * Madison, Matthew D.; [http://vms.process.com/scripts/fileserv/fileserv.com?BLISS-INTRO Session notes for "Introduction to BLISS"] (PostScript) === Downloads === * [http://pdp-10.trailing-edge.com/bb-m836d-bm/ BLISS-10] * [ftp://ftp.iecc.com/pub/file/bliss.tar.gz BLISS-11]{{dead link|date=May 2025|bot=medic}}{{cbignore|bot=medic}} * [http://pdp-10.trailing-edge.com/bls36v42/ BLISS-36] * [https://www.digiater.nl/openvms/freeware/v70/bliss/ BLISS-11, BLISS-32 and BLISS-64] * [ftp://freevms.nvg.org/pub/vms/freevms/ FreeVMS Portable BLISS for GCC] {{Carnegie Mellon}} [[Category:Systems programming languages]] [[Category:OpenVMS software]] [[Category:Carnegie Mellon University software]] [[Category:Programming languages]] [[Category:Programming languages created in 1970]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Carnegie Mellon
(
edit
)
Template:Cbignore
(
edit
)
Template:Citation needed
(
edit
)
Template:Cite interview
(
edit
)
Template:Cite journal
(
edit
)
Template:Cite mailing list
(
edit
)
Template:Cite web
(
edit
)
Template:Dead link
(
edit
)
Template:ISBN
(
edit
)
Template:Infobox programming language
(
edit
)
Template:Long quote
(
edit
)
Template:Other uses
(
edit
)
Template:Quote
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)