[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: an alternate BOGUS-FIXNUMS proposal
- To: Jeff Dalton <jeff%aiva.edinburgh.ac.uk@nss.cs.ucl.ac.uk>
- Subject: Re: an alternate BOGUS-FIXNUMS proposal
- From: sandra%cdr@cs.utah.edu (Sandra J Loosemore)
- Date: Wed, 13 Jul 88 15:42:51 MDT
- Cc: gz%spt.entity.com@nss.cs.ucl.ac.uk, sandra <sandra%cdr@cs.utah.edu>, cl-cleanup@sail.stanford.edu
- In-reply-to: Jeff Dalton <jeff%aiva.edinburgh.ac.uk@NSS.Cs.Ucl.AC.UK>, Wed, 13 Jul 88 20:16:02 bst
> From: Jeff Dalton <jeff%aiva.edinburgh.ac.uk@NSS.Cs.Ucl.AC.UK>
> Date: Wed, 13 Jul 88 20:16:02 bst
>
> Perhaps we should look at
> what languages like C say about "short", "int", and "long". (Very
> little is promised, as I recall.)
>
> I'm not sure just what aspects of C and Pascal programs you have in
> mind. There are certainly many programs that use "int" or "long", and
> those are analogous to FIXNUM, not to explicit ranges of integers or
> numbers of bits.
Yes, people do declare things as "int" in C code without giving a
great deal of thought to how big an "int" really is. But in my mind,
not being guaranteed anything about integer sizes in C (and not being
able to define subrange types as you can in Pascal) is a misfeature.
I don't think its presence in C is a valid justification for including
it in Lisp.
An example of a portable C program that I'm familiar with is the MG
text editor. It runs on 8 or 9 different configurations (3 of which I
have personally hacked on), including some machines where ints are 16
bits and longs 32, some where both ints and longs are both 32 bits,
and I believe one where ints are 32 and longs are 64. We define
things like the integer type to use for indexing into a region (that
you really want to be 32 bits, but that might be either int or long)
with #typedef's in a system-specific include file. Likewise the size
of integer that represents a keystroke (12 bits) might need to be
defined as either a short or int. We've found that portability
problems are almost invariably due to code that violates the data
abstraction by doing things like declaring a variable that is used to
index into a region as "int" instead of "RSIZE", or assuming that int
and long are the same size.
-Sandra
-------