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.