[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: #o and unsignedness

    Date: 31 October 1980 1722-EST (Friday)
    From: Guy.Steele at CMU-10A
    To: RWK at MIT-MC (Robert W. Kerns)
    Subject:  Re: #o and unsignedness
    CC: bug-lisp at MIT-MC
    In-Reply-To:  RWK@MIT-MC's message of 31 Oct 80 16:13-EST
    Message-Id: <31Oct80 172251 SL5P@CMU-10A>

    The truncation I referred to was chopping off the poor "integer"
    and forcing it to fit into a fixnum (thereby causing some bits
    possibly to be lost, but in any case suddenly altering the
    weight of one of its bits, from 2^25 to -2^35!!!).

Ah, but this altering of the weight of one of it's bits only occurs when you
stop thinking of it as an unsigned integer.  One wouldn't use #*O when one
meant anything other than an unsigned integer, so this altering in meaning
wouldn't occur.  This is no different than packing two nubers into a single
integer, representing a character by a fixnum, etc.  If I'm representing
something like 2 18-bit positive numbers, and consider the combination as
a combination of 2 18-bit numbers consistantly, it doesn't matter at all to
me that occasionally one of these combininations would be considered to be
negative if considered as a single fixnum on a machine of 36 bits or less;
I never consider them as a single fixnum!

    There is a problem with #*O..., which is that if #B means binary
    then #*B is ambiguous on a machine where just plain #* means
Not if #* by itself never means hexadecimal, which was my proposal.

    Letting #* vary in radix from machine to machine isn't all that
    much of a problem -- the machines may have different word
    lengths as well, after all.
They also may have a different number of disk drives.  So what?  So my code
shouldn't read in even aproximately, because when I wrote #*ABC, now it tries
to read it as octal?  Tell me what GOOD it does to have the base varying and
unspecified, as opposed to specified.

    Indeed, there is a nice symmetry between *, +, and - -- that's
    why I originally proposed to use *nnnn* (the stars actually
    being independent -- the treailing star was the "machine-radix point",
    and the leading one meant "unsigned fixnum" -- so that -nnn*
    and *ddd. actually made sense.  But reason prevailed, and we
    got #*, which actually is rather nice to me now.)