On Mon, Jul 8, 2024 at 9:04 PM Aron Insinga <aki(a)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.