On Mon, Jul 8, 2024 at 9:04 PM Aron Insinga <aki@insinga.com> wrote:
I found it sad, but the newest versions of the BLISS compilers do not support using it as an expression language.  The section bridging pp 978-979 (as published) of Brender's history is:
"The expression language characteristic was often highly touted in the early years of BLISS. While there is a certain conceptual elegance that results, in practice this characteristic is not exploited much.
  The most common applications use the if-then-else expression, for example, in something like the maximum calculation illustrated in Figure 5. Very occasionally there is some analogous use of a case expression. Examples using loops (taking advantage of the value of leave), however, tend not to work well on human factors grounds: the value computed tends to be visually lost in the surrounding control constructs and too far removed from where it will be used; an explicit assignment to a temporary variable often seems to work better.
  On balance, the expression characteristic of BLISS was not terribly important."
Ron Brender is correct.  All of the software development groups at DEC had programming style guidelines and most of those frowned on the use of BLISS as an expression language.  The issue is maintainability of the code.  As Brender says, a human factors issue. 
Another thing that I always liked (but is still there) is the ease of accessing bit fields with V<FOO_OFFSET, FOO_SIZE> which was descended from BLISS-10's use of the PDP-10 byte pointers.  [Add a dot before V to get an rvalue.]  (Well, there was this logic simulator which really packed data into bit fields of blocks representing gates, events, etc....)

Indeed.  BLISS is the best bit-banging language around.  The field reference construct is a lot more straightforward than the and/or bit masks in most languages.  In full the construct is:

 expression-1<offset-expr, size-expr, padding-expr>

expression-1 is a BLISS value from which the bits are to be extracted.  offset-expr is start of the field to be extracted (bit 0 being the low bit of the value) and size-expr is the number of bits to be extracted.  The value of the whole mess is a BLISS value with the extracted field in the low-order bits.  padding-expr controls the value used to pad the high order bits:  if even, zero-padded, if odd, one-padded.

I always wondered how this would work on the IBM S/360/370 architecture.  It is big-endian and bit 0 of a machine word is the most significant bit, not the least significant as in DEC's architectures.

-Paul W.