BLISS system programming language

(I could have sworn that I had already posted about this)

One of the (many!) forgotten programming languages was BLISS, which was developed at CMU around 1970, and used at DEC to program parts of the VMS operating system in the 1980s.

Syntaxwise, it is curious mindmeld of ALGOL and PL/I.

[Added: who can resist “ELUDOM”.]

! This routine inputs a value, operates on it, and
! then outputs the result.
        GETNUM,     ! Input a number from terminal
        PUTNUM;     ! Output a number to terminal
        X,          ! Storage for input value
        Y;          ! Storage for output value
    Y = STEP(.X);
! This routine adds 1 to the given value.

Sadly, I couldn’t find a modern implementation of it. [update: there is work-in-progress in GitHub - JonathanBelanger/bliss: A modern BLISS compiler, based on LLVM and exposing some of its useful items.]

BLISS (Wikipedia)

BLISS: A Language For Systems Programming

BLISS Language Reference Manual


Is a modern version backwards compatable?
Many times I have seen a modern
version of language xyz is just ‘ARM’ or ‘INTEL’ not the CPU you started with.

Many languages like BLISS and BCPL both suffer from the problem of ints
and pointers default to native word size of the host computer. Pl/I let you state
a variable size, so I suspect it could be more portable in regards the host computer
native word size. DEC had version problems with the same program for the PDP 10,11,or VAX. Only a after a few revisions of Unix did C get more portable in terms of word size.
Moving from 16 bit to 32 bits seems to have stopped development of many languages,
but I can’t tell if it was word size issues, or the fact the 8080 or 8086/8088 became the common computer of the 1980’s.

I guess the answer is … depends. What does one intend to do with a modern version? Compile old code? Compile new code? Run the result where? Hobby? Work?

Also in many cases just the base language might not be enough, there needs to be some standard library/ries, and those might be under-specified by the language reference manuals, and the only source might be some on some long-lost backup tapes.

I myself am looking for old versions, to bootstrap a compiler and a OS.
Back then code was smaller, and simple types of i/o.
So far the best so far, is the NEW version of the PCC C compiler, but like
many things today it may not self compile on small machines.
I think for historic reasons, old code is still required as a example ‘how did they do that then’ and what tricks used with the hardware, like loop here forever, until the disk DMA
overwrites that piece of code.

I have to confess, not one of the many languages I’ve ever used, even once. Possibly because of having been warned off (unfairly) by the old joke (and fortune message), “.BLISS is ignorance”! (Hey, someone had to say it!)

1 Like

There was a saying at DEC “Bliss is ignorance” 8)

Some of it is also the language design. Classic C has few external declarations whilst ANSI C requires tracking the declaration of every function. That’s combined with the need to be back compatible and thus have loads of declarations in memory.

You can get an ANSI C compiler in a 16bit address space but does involve a certain amount of crazy. Even classic PCC ansi or ‘not quite ansi’ needed split I/D.

Where do find the classic PCC in source?
The modern PCC, looks very well updated but I have not compiled it, to see
if it fits on, or compiles to a PDP 11. It may just do the VAX.
Self comple is desirable in many cases.
My hardware is still in a state of flux, so it may be a while before I get to porting
a C compiler to my machine.

Old PCC is in the historic unix sources in various forms over time. It’s not well documented and it’s a lot harder to mess with than ANSI pcc.

My ANSI-ish 8085 C compiler fits in 48K although it’s not yet all self hosting. It’s starting to also produce valid 8080 code which I hope means it can handle most things given how bad the 8080 is at C, or signed maths