Hacker News new | past | comments | ask | show | jobs | submit login
Bliss: A language for systems programming (1971) [pdf] (arizona.edu)
65 points by tjalfi 36 days ago | hide | past | favorite | 34 comments

As an intern the '90s, I was porting some Unix workstation embedded systems tool to the VAXstation, and was surprised to find the system API documentation I needed wasn't written for C, but for BLISS. Fortunately, VAX C could still call it.

I've used a lot of different systems thus far, but what I saw of the DEC VAX/VMS ecosystem was impressive, and a very different cultural flavor than Unix-descended systems. I'm all about the Linux and *BSD now, but, occasionally, I have to resist the urge to buy a small VAX, just to explore more of the clever and different things they did.

Thanks! They also link to this writeup, which someday I might attempt to reproduce: http://www.wherry.com/gadgets/retrocomputing/vax-simh.html

Thankfully some of its soul lives on Windows.

The thing that blew my mind when I started programming with BLISS in the mid-70s was that it didn't have the artificial distinction between statements and expressions that nearly every other language of the day had - and most languages still have. In BLISS, everything was an expression and returned a value, much like Ruby today.

An article about its history was posted a couple times (without comments):


Yep, sends me back almost a half century (gadzooks, am I really 70 years old?). PDP-11/40 and DECUS days.

So often I heard the phrase, "Bliss is ignorance..."

Hi Cliff. What did you use BLISS for? Low level system stuff, or codes for astronomy?

Not Cliff, but I remember BLISS from early '80s Air Force work. It's the only thing I know that could beat compiled Fortran for things like signal processing. That code absolutely flew.

Oh, I did system work with BLISS - I was trying to connect a PDP-11 to a set of motors (which controlled a small telescope).

Much later, I used BLISS on a VAX/780 at Space Telescope Science Institute - making an image editor interface into VMS. Long time ago!

We used Bliss 36 back in late 70s to write a compiler for an in house language called Syclops. It was a knockoff of PL/M for the 8085.

Bliss was a very interesting language with features that no other language has. We started the compiler effort on OS\360 using PL/1. We then moved to Bliss 36 on the PDP 10. Oh and we changed the Syclops language twice. The three of us did the compiler in a year.

That was one of my favorite projects

What were those features that no other language has?

Native ability to define fields within a word, macros, use of period (dot) to dereference pointers, arbitrary representations of data structures (the programmer defines the method of access of structure elements), everything is an expression, native co-routines (which can be marvelous in building co-operating processes), some control over register allocation policy (useful for interfacing with other non Bliss-programs), the idea of "plit" (pointer to a literal) which points to literals not constrained by word boundaries, built-in functions that map directly to PDP 10 instructions.


A good overall description is here: https://www.cs.tufts.edu/~nr/cs257/archive/ronald-brender/bl...

Modula-2 also has native co-routines and was how Lilith did multi-tasking.

How Ada tasks work depend on the runtime configuration, one of them is just like co-routines.

Using the dot for pointer access is a common feature in the Algol linage of systems programming languages, including Modula-3, Oberon and its descendents, Component Pascal, Active Oberon.

Burroughs with ESPOL/NEWP is known for being the first OS written without any Assembly back in 1961, given that all CPU instructions were exposed as compiler intrisics.

So not all those features were BLISS only. :)

The only one of these that I can find that were before Bliss was the Burroughs effort, which a computer scientist acquaintance said was a universal counter example to how languages were built.

So if this cronology is correct, my statement should have clarified that it was the first (save for the Burroughs example) to have those features.

Burroughs is still being sold commercially as Unisys ClearPath, so at least NEWP is in a better shape in 2020 than BLISS.

Not sure what being a counter example means.

As for the rest, yeah you are right, BLISS came right in 1970.

The comment about universal counterexample was coined by Arthur Sale, then a professor of CS at University of Tasmania. In particular, he was referring to the B 6700 and C's presumption of NULL being a zero just would not work with that hardware, which had its own unique way to describe null.

Another less dramatic example was the Burroughs 5500 and the fact that addresses were in decimal (bcd)--no binary in sight.

Yes, I know of no running Bliss, but I would put that as due to DEC disappearing.

Bliss macros[0] are pretty powerful for an infix language.

I'm not sure how they compare to macros in newer languages such as Dylan, D, or Rust.

[0] https://compilers.iecc.com/comparch/article/92-09-191

I was a Bliss programmer for several years in the mid-1970s. It remains one of my favorite programming languages.

What did you use it for?

I was employed by a defense contractor working on submarine detection systems.

>It remains one of my favorite programming languages.

Any reason for that?

I like that it is a block structured language without a goto. It has pass-by-value and pass-by-reference semantics. It has a macro front-end that I wish was in use in more modern environments.

First job out of college was coding in BLISS for automated test equipment at Teradyne. A very interesting language with a powerful macro facility, and as others have pointed out, expression semantics for almost everything. Another quirk was the requirement to dereference pointers in all circumstances with the . operator.

> expression semantics for almost everything.

I've never understood why languages don't do this. There seem to be lots of advantages and almost no disadvantages.

C. The popularity and mindshare of C means most languages of the last 50 years have selectively evolved to be C knockoffs.

A pity Bliss wasn’t their role model instead, but that’s the value of market positioning: you don’t need the best product, just the product that everyone knows.

And now we are trying to fix 50 years of memory corruption bugs being fixed multiple times per month.

VMS, DEC's OS for their VAX architecture, was written in Bliss and a listing of the entire source code was available at the time on microfiche. Could you imagine Microsoft of Apple making the entire source code to their OS available to customers inexpensively?

Bliss is Ignorance

Actually it was a very nice language and certainly an improvement over writing system software in assembly language.

Being able to embed assembly instructions directly in the code gave much needed access to all the PDP-10 byte manipulation instruction. I loved BLISS, but some had trouble with the pesky dots needed to indicate value of rather than addresses of variables.

Used it for a couple of years in the mid '70s before moving on to SAIL.

Oh, I have fond memories of 36-bit byte pointers.

My first two programming jobs were in PDP-10/20 Assembly. Occasionally someone will complain about network specs that say octet instead of byte. And I‘ll just casually say, well some machines had variable byte sizes and go back to what I was doing, waiting for them to start sputtering.

> And I‘ll just casually say, well some machines had variable byte sizes and go back to what I was doing, waiting for them to start sputtering.

Maybe make a remark about word marks, or decimal machines.

Are you sufficiently sputtered yet?

Word marks, as in the Can't Add Doesn't Even Try?


Hi. The only place I have seen equivalent instructions are in Common Lisp

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact