BLISS stands for "Bill's Language for Implementing System Software," in honor of Bill Wulf, when he was a CS professor at CMU [http://www.cs.virginia.edu/brochure/profs/wulf.html] . BLISS came in varieties for the PDP-11 (BLISS-16), PDP-10 (Decsystem-10 and -20, BLISS-36), and VAX-11 (BLISS-32). Many pieces of VAX/VMS were written in BLISS, including the command language interpreter and the BACKUP program. BLISS is interesting (and sometimes unique) in many ways: * formal names were always bound to addresses, not data, and so it had a "FETCH" operator to fetch the contents of a name. An assignment looks like this X=.Y; where "." is the fetch operator that fetches the contents of address Y. * there is no arbitrary GOTO in BLISS. Instead, there are constructions for leaving semantic blocks, such as EXITLOOP and LEAVE * all 4 types of tested loops are represented in BLISS: do while, while do, do until, until do Q: ''This is unique? Isn't it just a pointer? Or am I missing something here?'' A: its unique in the fact that all bare symbols are pointers, not contents To give a better feel for this, consider the following C statements and their Bliss equivalents: {both: declare "a" to be an integer variable} C: a = 1 Bliss: a = 1 {both: declare "x" and "y" both to be e.g. integer variables} C: x = y Bliss: x = .y {both: declare "p" to be a pointer to integer, and "y" to be an integer variable} C: p = &y Bliss: p = y ....note lack of "." before "y" C: *p = 1 Bliss: .p = 1 ...I may be incorrect here, my memory is fuzzy So, yes, this approach is in fact fairly unique, in a subtle way. The subtlety is almost certainly lost on anyone who has not delved deeply into the difference between LHS addresses and RHS addresses in compilers (variable name (etc) representing either fetch or store depending '''only''' on whether it is on the right or left hand side of an assigment). Q: ''Does BLISS stand for '''Basic''' Language for Implementation of System Software or '''Bill's''' Language for Implementation of System Software? Did Bill Wulf name it after himself? Did he name it Basic, and later people bacronymed it Bill's?'' A: I had Dr. Wulf for multiple classes at UVa and can attest that he used amusing acronyms for some of our projects. For example, in Operating Systems he gave us a tiny OS--dubbed IBOS--to enhance throughout the class. IBOS stood for Itty Bitty Operating System. In assembly programming class he started us out with a small program that implemented a very simple virtual machine for us to write programs for before moving on to x286 assembly code. Unfortunately I can't recall the acronym he gave that one. As for BLISS, I recall hearing the B stand for Bill's, but I don't have an authoritative source for that usage. In fact, if one reads the original paper about the language, "BLISS: A Language for Systems Programming," the acronym is never completely spelled out that I can find. -- ChrisHines See Also: [http://encyclopedia.thefreedictionary.com/Bliss] See Also: Bliss Language Manual [http://avmp01.mppmu.mpg.de/HTBIN/BOOK/4358PRO.DECW$BOOK/9] ---- Q: Regarding the EXITLOOP and LEAVE: Are loops treated like functions and subroutines? and the EXITLOOP and LEAVE as returns? Or does the exit of the loop have a pointer to a default process, or a nameless statement somewhere or is it to the statement following the ENDLOOP? In which case how is it different from a GOTO except having a different name and having a label-less destination? * To answer the first parts would require me to go find my Bliss manual, but the last part is easy: just because GOTO "can do anything" doesn't mean that everything is a GOTO. EXITLOOP is obviously highly similar to "break" in C/C++, and the latter has been analyzed in such vast profusion that no further answer should be expected here. * LEAVE comes in two types, unlabeled and labeled. Unlabeled (LEAVE) is a jump to the point immediately after the compound statement in which LEAVE occurs. Labeled LEAVE (LEAVE FOO) is a jump to the point immediately after the compound statement with the specified label. For the latter case (syntax approximate): FOO: BEGIN something; BEGIN something; IF done THEN LEAVE FOO; more stuff; END; and yet more; END; COMMENT the LEAVE FOO brings you here; ---- CategoryProgrammingLanguage