Word types: Suggestion_(re)

Sun, 22 Jun 1997 01:36:44 +0200



Peter Gerwinski wrote:

> Discussion of #1:  Compatibility to BP.
>
>   - GPC is *not* intended to be a drop-in replacement for BP.
>     Compatibility is desireable as long as we don't have to pay a high
>     price for it.  We want to preserve the "spirit" of BP in GPC, not
>     its "letters".  What we do is to "write BP, as it should have been",
>     not "rewrite BP, exactly as it is".
>
>   - GPC is a 32-bit compiler.  Maybe we will extend it to 64 bits, some day,
>     but we won't restrict it to 16 bits.
>
>   That's why `Word' etc. are as they are, and why I think they should
>   not change.

Agreed. And if someone wants to redeclare them for
"100% silver plate compatibility", this is no problem to do.
(Like in the Chief's system unit with -D_Borland_16_Bit_.)

The only question is if *in*this*special*case* also Integer should be
redeclared to 16 bits. (I know this is quite unusual, but since this
mode is *only* for using existing BP programs without (ideally any)
changes, these programs are likely to expect integer to be 16 bit.)

>   Round parentheses are easiest to implement, but their syntax interferes
>   with Schemata.

Would this a problem? It's very unlikely that someone would declare a
schema called "Integer", isn't it? Such an "Integer(n)" could be a special
built-in schema (special in that the "n" is not stored in the variable).

>   Square brackets come into mind, but they interfere with
>   UCSD's "long integers".

 Are these UCSD "long integers" of arbitrary size, or limited to
subtypes of regular integer types? 

>   While the remaining two possibilities are certainly the most `Pascalish'
>   ones, they are not 100% clear:  What size has `packed $1000..$10FF'?
>   Although 8 bits would be sufficient, GPC would allocate 13 bits.

This is a strange case, indeed! How are they handled currently in packed
record. Testing seems to show to it's 13 bits in fact.

(* The results are a bit strange. The following program gives "1299" !?!
program x;
type y=packed array [1..800] of $1000..$10ff;
begin
 writeln(sizeof(y))
end. *)

I think it's ok like this. After all, if it's really for a system call
or so, what sense would it make to interpret the values as $10xy if they
were only stored as $xy? As a rule, one might say that the internal
representation of a subrange always includes 0.

>   Outside
>   of packed arrays and records, they would be rounded to the next unit the
>   machine can access, usually 8 bits, but it can also be 16 or 32 bits.

Can not all machines address 1 byte? I.e., is "Byte" on some machines bigger
than 1 byte (internally)? This gives real problems with binary files,
doesn't it? How do such machines read single bytes from files at all?

>   Despite of the disadvantage sketched above, I think that `packed 0..$FF'
>   is the way to go.  Authors of libraries are encouraged to define their own
>   types using this mechanism.
>
>   To have `LongestInt' as - currently - a synonym for `LongInt' cannot
>   hurt.  If one day there will be something longer than `LongInt', we
>   can name it `LongLongInt' (because it might be superseeded again by
>   `LongLongLongInt'), but `LongestInt' will always remain the longest one.

Fine! :-)

> Discussion of #3:  Compatibility to GCC.
>
>   I can guarantee that the above GPC <--> GCC compatibility rules for
>   `ShortInt' etc. will not change.  Then the only needed thing is something
>   which is guaranteed to be the same as `long' in GCC, even if `int' is
>   not the same as `long'.  Since we are aiming towards the top, C's `long'
>   is just "medium" for us. ;-)  Thus I propose the names `MedInt' and
>   `MedWord'.

Why not! If it's documented, headers should be "easy" to convert then!

> Summary and Proposal:
>
>   Let all GPC integer types like they are, and add `MedFoo' and
>   `LongestFoo':

If you don't mind, please also add {Short,Med,Long,Longest}Card[inal].

> Okay like this?  Or better keep `Integer ( 8 )' (or `Integer < 8 >',

Why not, additionally!
("Integer(n)" is easier to read than "Packed 0..1 shl n-1".)

> or `Integer : 8' like bit-fields in C,

"a:Integer:8" would look strange to me.

> or `Integer * 1' like in FORTRAN?)

Would also look strange to me. "Integer * 2" I would understand as "twice
the size of an integer", if at all...
-- 
Frank Heckenbach, Erlangen, Germany
heckenb@mi.uni-erlangen.de
Turbo Pascal:   http://www.mi.uni-erlangen.de/~heckenb/programs.htm
Internet links: http://www.mi.uni-erlangen.de/~heckenb/links.htm


Frank Heckenbach (heckenb@mi.uni-erlangen.de)

HTML conversion by Lluís de Yzaguirre i Maura
Institut de Lingüística Aplicada - Universitat "Pompeu Fabra"
e-mail: de_yza@upf.es