As I have had occasion to note here before, the traditions of C and
its sequelæ interest me chiefly as illustrations of  one or another
pathology.

The PL/I tradition provides better positive guidance.  From the
beginning, with the PL/I F
compiler, such a construction as

declare hashvcs entry(character(*) varying, binary fixed(15,0))
  returns(binary fixed(15,0)) ;
. . .
declare hashin character(*) varying, hashval binary fixed(15,0) ;

hashval = hashvcs(hashin, 1101b) ;

resulted in the creation of a halfword temporary initialized  to have
the binary value 1101b (decimal 13).  The address of that temporary,
not that of the (internal/converted) value of the literal 1101b, was
then made available to the entry hashvcs, which was free to mutilate
it without non-local effect.

Today, one can make corresponding distinctions within a function like
hashvcs, as in

hashvcs: procedure(vcs, modulus)
  returns(signed binary fixed(15,0))
  reorder ;

  declare (vcs character(*) varying2,
     modulus signed binary fixed(15,0))
     nonassignable parameter ;

  . . .
  return(hashval) ;

end hashvcs ;

C and its sequelæ are and now seem likely to remain toys.  They have
achieved all of  the portability of assembly language without its
expressive power.

John Gilmore, Ashland, MA 01721 - USA

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to