`Word' data type et al._(re)
Wed, 18 Jun 1997 20:13:16 +0200 (MET DST)
According to Frank Heckenbach:
>
> > Cardinal 0 .. 65535 Non sign=E9, 16 bits
> >
> > Cardinal 0 .. 2147483647 Non sign=E9, 32 bits
>
> [...]
>
> That's fine! If Delphi uses "Cardinal", gpc should use it too,
> of course.
It already does. 32 bits, unsigned. As you can see above,
`Cardinal' is 31 bits, unsigned, in Delphiy. Has anybody an
idea, why?
> > Generic Types
GPC's current setting - on *all* platforms - is the following:
GNU Pascal GNU C
Byte unsigned char
ByteInt signed char
ShortWord unsigned short
ShortInt short
Integer int, long
Word, Cardinal unsigned, unsigned long
LongInt, Comp long long
LongWord unsigned long long
I see only one possible reason why we should change that: It is
not absolutely sure that `int' will always remain the same as `long'
on GCC.
The sizes of these types are the same on all platforms I have seen
so far. (8, 8, 16, 16, 32, 32, 64, 64.) However I agree that it is
a good idea to provide types of known size.
> > Well defined types
> >
> > int8 card8 (=3Dbyte is the only case without doubt)
> > int16 card16
> > int32 card32
> >
> > [...]
>
> Sounds good.
I agree, but maybe a different syntax would be preferable. UCSD Pascal
has a "long Integer" type which is written as
Type Int42 = Integer [ 42 ];
Where `42' is the number of decimal digits. (In the long run, this should
be in GPC, too.) What about defining
Type Int16 = Integer ( 16 );
Type Word16 = Word ( 64 );
for types with a specified number of *dual* digits, read: bits?
...
=== BUT ===
What are we talking about?
Pascal has subrange types. Why not forget about all this and let the
user specify the types by himself?
Type
I16 = -$8000..$7FFF;
W16 = 0..$FFFF;
MyRecordToAccessSomeStrangeSystemData = record
Descriptor: 0..$FFFFFFFF;
ImportantData: -$80..$7F;
FillSpace: array [ 0..42 ] of 0..$FF;
end (* MyRecordToAccessSomeStrangeSystemData *);
Then, of course, GPC must not reserve more space than necessary for
them - which it does not do anyway since it has packed records.
(These topics are related, as you can well imagine.)
> > Compatibility types
> >
> > anything contained in bpcompat.pas delphi1compat.pas
> > delphi2compat.pas and everything you need,
> > better than compiler switches when possible to
> > avoid to garble the compiler by a lot of special
> > purpose oddities: the idea of C to keep a minimum
> > in the compiler and a maximum in libraries is
> > not so bad (when it is possible).
>
> I agree! Except for "integer", all types can be redeclared in these
> units. (I think, "integer" could be redeclared, too, but AFAIR it's
> not a good idea to do so, is it?)
It's not a good idea for the same reason as it is not a good idea to
change the size of `Integer' by a compiler switch.
Peter
Dipl.-Phys. Peter Gerwinski, Essen, Germany, free physicist and programmer
peter.gerwinski@uni-essen.de - http://home.pages.de/~peter.gerwinski/ [970201]
maintainer GNU Pascal [970510] - http://home.pages.de/~gnu-pascal/ [970125]
Peter Gerwinski (peter@agnes.dida.physik.uni-essen.de)
HTML conversion by Lluís de Yzaguirre i Maura
Institut de Lingüística Aplicada -
Universitat "Pompeu Fabra"
e-mail: de_yza@upf.es