Path: utzoo!attcan!uunet!lll-winken!lll-tis!helios.ee.lbl.gov!pasteur!ucbvax!decwrl!reid From: reid@decwrl.dec.com (Brian Reid) Newsgroups: comp.unix.questions Subject: Re: Bliss Compiler wanted Message-ID: <550@bacchus.DEC.COM> Date: 24 Jun 88 05:34:54 GMT References: <2980@ihuxz.ATT.COM> <315@gt-eedsp.UUCP> Reply-To: reid@decwrl.UUCP (Brian Reid) Organization: DEC Western Research Lines: 45 People are asking about BLISS. BLISS was invented at Carnegie-Mellon in the late 1960's, and was first implemented for the PDP-10 as Bliss-10. A better, incompatible version for the PDP-11 was developed, called (oddly enough) Bliss-11. In the middle 1970's, DEC picked up BLISS, filled it full of dollar signs and long mnemonic names, and produced BLISS-36 (a successor to BLISS-10), BLISS-16 (a successor to BLISS-11) and BLISS-32 (for the Vax). I don't believe that BLISS-16 ever amounted to much, since it was implemented only as a cross-compiler from the PDP-10 (as was Bliss-11, come to think of it). Then DEC found a set of macros that could be layered on top of BLISS-36, BLISS-32, and BLISS-16 to implement a machine-independent common version, which I think was called Common BLISS or something like that. A lot of VMS is written in BLISS. Unfortunately, not enough of it is. Far too much of VMS is written in VAX assembler. At some point in there, some people at Bell Labs produced 98% of a Bliss compiler for an IBM 360 or a Honeywell or an Interdata or something like that, but in general BLISS exists/existed only for DEC machines. I've always liked BLISS. It's the world's greatest assembler. It doesn't have pretenses of having data types, like C, and it is very regular and very simple. Its most notorious feature was the need for an explicit "value of", operator: if you wanted to do the equivalent of the C statement x = y + 1; in Bliss, you had to say x := .y + 1; The "." means "contents of y", since all expressions evaluated to addresses and not values. (If you just said "y + 1", then it added 1 to the address of y and not the contents of y). While this was a big nuisance, and led to expressions like Z[.A+.B] := .A[.A[.I-4]] that are as awful as C type declarations, it also let you do jazzy stuff like F(X) := 3; which would call the function F with the argument X, which would return an address. The number 3 would then be stored into that address. BLISS had very sophisticated control structures, much nicer than C has. I think the dot operator for dereferencing was what doomed it, though to this day I would rather be programming in Bliss than in C. The people who designed and implemented the first few Blisses included Chuck Geschke, who is now president of Adobe Systems, Bruce Leverett, who works for Scribe Systems, Richard Johnsson, who works with me at DEC. Ron Brender was the major guru of Bliss at DEC. Probably still is.