<div dir="ltr"><div>I was not aware of the Patchouli 64-bit compiler, thanks for the pointer!</div><div><br></div>That timeline makes a strong argument that INTEGER and REAL should be 64-bits on 64-bit machines, for maximum simplicity, which is a core feature of Oberon. That also appeals to me, especially as backwards compatibility with previous editions of Oberon has already been left behind.<div><br></div><div>I could be convinced.</div><div><br></div><div>Chuck</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Jan 15, 2021 at 3:20 PM Chris Burrows <<a href="mailto:chris@cfbsoftware.com">chris@cfbsoftware.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">> <br>
> On Fri, Jan 15, 2021 at 1:08 PM Charles Perkins <<a href="mailto:chuck@kuracali.com" target="_blank">chuck@kuracali.com</a>><br>
> wrote:<br>
> I like the idea.<br>
> <br>
> The sizes of datatypes in the RISC5 compiler are defined in ORB.Mod.<br>
> Currently we have:<br>
>   byteType := type(Byte, Int, 1);    (*symbol: BYTE *)<br>
>   boolType := type(Bool, Bool, 1);   (*symbol: BOOLEAN *)<br>
>   charType := type(Char, Char,1);    (*symbol: CHAR *)<br>
>   intType := type(Int, Int, 4);      (*symbols: INTEGER, LONGINT *)<br>
>   realType := type(Real, Real, 4);   (*symbol: REAL *)<br>
>   setType := type(Set, Set,4);       (*symbol: SET *)<br>
>   nilType := type(NilTyp, NilTyp, 4);(*symbol: NIL *)<br>
> <br>
> In a 64-bit compiler derived from the RISC5 compiler I imagine we<br>
> would also have 8 byte REALs and SETs and NIL values:<br>
>   byteType := type(Byte, Int, 1);        (*symbol: BYTE *)<br>
>   boolType := type(Bool, Bool, 1);       (*symbol: BOOLEAN *)<br>
>   charType := type(Char, Char,1);        (*symbol: CHAR *)<br>
>   intType := type(Int, Int, 4);          (*symbol: INTEGER *)<br>
>   longType := type(Long, Long, 8);       (*symbol: LONGINT *)<br>
>   realType := type(Real, Real, 8);       (*symbol: REAL *)<br>
>   setType := type(Set, Set,8);           (*symbol: SET *)<br>
>   nilType := type(NilTyp, NilTyp, 8);    (*symbol: NIL *)<br>
> <br>
> Chuck<br>
> <br>
<br>
Are you aware of the existing Intel 64 Oberon-07 compiler?<br>
<br>
<a href="https://github.com/congdm/Patchouli-Compiler/tree/v0.8" rel="noreferrer" target="_blank">https://github.com/congdm/Patchouli-Compiler/tree/v0.8</a><br>
<br>
The data types are specified here:<br>
<br>
<a href="https://github.com/congdm/Patchouli-Compiler/wiki/Detailed-Documentation" rel="noreferrer" target="_blank">https://github.com/congdm/Patchouli-Compiler/wiki/Detailed-Documentation</a><br>
<br>
Note that all the 32-bit data type dependencies have now been removed from the Oberon Language:<br>
<br>
The data type definitions pre-2011 were:<br>
<br>
--------------------------------------------------<br>
BOOLEAN  the truth values TRUE and FALSE.<br>
CHAR     the characters of the Latin-1 set.<br>
INTEGER  the integers between -2^31 and +2^31-1.<br>
REAL     real numbers (IEEE Standard, 32 bits).<br>
LONGREAL long real numbers (IEEE Standard, 64 bits).<br>
SET      the sets of integers between 0 and 31. <br>
--------------------------------------------------<br>
<br>
In Sep 2011 they were:<br>
<br>
--------------------------------------------------<br>
BOOLEAN  the truth values TRUE and FALSE<br>
CHAR     the characters of a standard character set<br>
INTEGER  the integers<br>
REAL     real numbers<br>
LONGREAL real numbers<br>
SET      the sets of integers between 0 and 31<br>
<br>
The type LONGREAL is intended to represent real numbers <br>
with a higher number of digits than REAL. However, the <br>
two types may be identical.<br>
--------------------------------------------------<br>
<br>
In Oct 2013, they were further generalised to:<br>
<br>
--------------------------------------------------<br>
BOOLEAN  the truth values TRUE and FALSE<br>
CHAR     the characters of a standard character set<br>
INTEGER  the integers<br>
REAL     real numbers<br>
BYTE     the integers between 0 and 255<br>
SET      the sets of integers between 0 and an <br>
         implementation-dependent limit<br>
<br>
The type BYTE is compatible with the type INTEGER, and vice-versa.<br>
--------------------------------------------------<br>
<br>
i.e. CHAR could be any standard character set (not necessarily 8-bits), INTEGER and REAL can be any size, LONGREAL has been removed from the language and SET is no longer constrained to be 32 bits. Note that the Patchouli compiler handles the  platform-dependent usefulness of additional data types while still conforming with the language specification by including their definitions in SYSTEM.<br>
<br>
Regards,<br>
Chris Burrows<br>
CFB Software<br>
<a href="https://www.astrobe.com" rel="noreferrer" target="_blank">https://www.astrobe.com</a><br>
<br>
<br>
--<br>
<a href="mailto:Oberon@lists.inf.ethz.ch" target="_blank">Oberon@lists.inf.ethz.ch</a> mailing list for ETH Oberon and related systems<br>
<a href="https://lists.inf.ethz.ch/mailman/listinfo/oberon" rel="noreferrer" target="_blank">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a><br>
</blockquote></div>