<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Segoe UI";
        panose-1:2 11 6 4 2 2 2 2 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman",serif;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.E-MailFormatvorlage18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:#1F497D;}
span.E-MailFormatvorlage20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1160731841;
        mso-list-type:hybrid;
        mso-list-template-ids:-1156277472 625275160 67567619 67567621 67567617 67567619 67567621 67567617 67567619 67567621;}
@list l0:level1
        {mso-level-start-at:0;
        mso-level-number-format:bullet;
        mso-level-text:-;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-font-family:Calibri;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style></head><body lang=DE-CH link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Chris<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Thanks for bringing this up.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Now we are exactly at the heart of the problem.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Oberon as it is defined in the report leaves some parts needed for low level programming to the implementation.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>There are some small but very important “cheats” in the compiler allowing to compile itself and the Oberon system.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>If you implemented a strict compiler according to the Oberon report, the Oberon system and compiler would not compile.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>NW likes to say: “Oberon is high level programming language but also well suited to low level programming. Proof: the compiler and the whole system can be written in Oberon”. This statement is only true if you use his compiler but not with his language according to the report!<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Some cheats not defined in the Oberon report:<o:p></o:p></span></p><ul style='margin-top:0cm' type=disc><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Allow assignment to INTEGER values of 32bit hex values. (FileDir.Search: the ASSERT would not compile without this cheat)<o:p></o:p></span></li><li class=MsoListParagraph style='margin-left:0cm;mso-list:l0 level1 lfo1'><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Allow BYTE n OF BYTE to be compatible with all types of same size (FileDir.Search: GetSector would not compile without this cheat)<o:p></o:p></span></li></ul><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>br<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif;mso-fareast-language:EN-US'>Jörg<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='color:black'>Von: </span></b><span style='color:black'>Oberon <oberon-bounces@lists.inf.ethz.ch> im Auftrag von Chris Burrows <chris@cfbsoftware.com><br><b>Antworten an: </b><chris@cfbsoftware.com>, ETH Oberon and related systems <oberon@lists.inf.ethz.ch><br><b>Datum: </b>Freitag, 1. Mai 2020 um 08:26<br><b>An: </b>ETH Oberon and related systems <oberon@lists.inf.ethz.ch><br><b>Betreff: </b>Re: [Oberon] Type compatibility in Oberon<o:p></o:p></span></p></div><div><p class=MsoNormal><span style='font-size:11.0pt'><o:p> </o:p></span></p></div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Thank you for the reference. However, I could not see anything there that stated that extensions to the language extensions had been included. An immediate problem that jumps out at me is rule G4:</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'> </span><o:p></o:p></p><p class=MsoNormal><em><span style='font-family:"Segoe UI";color:#24292E;background:white'>f</span></em><span style='font-family:"Segoe UI";color:#24292E;background:white'> is a parameter of type ARRAY <em><span style='font-family:"Segoe UI"'>m</span></em> OF BYTE and <em><span style='font-family:"Segoe UI"'>Ta</span></em> is any type with size <em><span style='font-family:"Segoe UI"'>n</span></em> = <em><span style='font-family:"Segoe UI"'>m</span></em> bytes.</span><o:p></o:p></p><p class=MsoNormal><span style='font-family:"Segoe UI";color:#24292E;background:white'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>That rule is *<b><i>not</i></b><i>*</i> part of the latest 2016 version of Oberon language definition (or any previous version AFAIR). You may have been misled by the fact that It is an undocumented feature that has been implemented in the RISC5 Oberon compiler. As I have stated here recently the RISC5 compiler should not be treated as if it were a language reference compiler.</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'> </span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Regards,</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>Chris Burrows</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'>CFB Software</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'><a href="https://www.astrobe.com">https://www.astrobe.com</a></span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif;color:#1F497D;mso-fareast-language:EN-US'> </span><o:p></o:p></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'>From:</span></b><span lang=EN-US style='font-size:11.0pt;font-family:"Calibri",sans-serif'> Luca Boasso [mailto:luke.boasso@gmail.com] <br><b>Sent:</b> Friday, 1 May 2020 3:37 PM<br><b>To:</b> chris@cfbsoftware.com; ETH Oberon and related systems<br><b>Subject:</b> Re: [Oberon] Type compatibility in Oberon</span><o:p></o:p></p></div></div><p class=MsoNormal> <o:p></o:p></p><div><div><p class=MsoNormal>For an up to date and comprehensive list of type rules for Oberon-07 you can also refer to:  <a href="https://github.com/lboasso/oberonc/blob/master/doc/TypeRules.md" target="_blank">https://github.com/lboasso/oberonc/blob/master/doc/TypeRules.md</a><o:p></o:p></p><div><p class=MsoNormal>oberonc slightly generalizes the implied rules in Prof. Wirth latest source code.<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div><div><p class=MsoNormal>Comments like "<a href="https://github.com/lboasso/oberonc/blob/master/src/OJP.Mod#L230">(* Type Rule F.1, F.2 *)</a>" clearly link the definition in the document with the actual implementation in the code, leaving little space for interpretation.<o:p></o:p></p></div><div><p class=MsoNormal> <o:p></o:p></p></div></div></div><p class=MsoNormal> <o:p></o:p></p><div><div><p class=MsoNormal>On Thu, Apr 30, 2020, 15:32 Chris Burrows <<a href="mailto:chris@cfbsoftware.com" target="_blank">chris@cfbsoftware.com</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt'><p class=MsoNormal>When I followed the link in the post below the item that really grabbed my<br>attention was the excellent document:<br><br>Type compatibility in Oberon<br><br><a href="https://www.miasap.se/obnc/type-compatibility.html" target="_blank">https://www.miasap.se/obnc/type-compatibility.html</a><br><br>It is apparent to me that a lot of thought has gone into the preparation of<br>this document. It would be very useful to any Oberon programmer who was<br>having difficulty understanding why his program would not compile due to a<br>type-compatibility issue.<br><br>I haven't used OBNC so can't say how well it conforms to these rules -<br>knowing August's great attention to detail I would expect it to be 'very<br>well'. While the Astrobe ARM compilers comply with the vast majority of<br>these rules there are one or two minor exceptions. These are described in<br>the accompanying documentation. You should also expect some very minor<br>relaxations of the rules (e.g. ARRAY OF BYTE parameters) when using the<br>Project Oberon RISC5 compiler. <br><br>Regards,<br>Chris Burrows<br>CFB Software<br><a href="https://www.astrobe.com" target="_blank">https://www.astrobe.com</a><br><br><br><br>> -----Original Message-----<br>> From: Oberon [mailto:<a href="mailto:oberon-bounces@lists.inf.ethz.ch" target="_blank">oberon-bounces@lists.inf.ethz.ch</a>] On Behalf Of<br>> August Karlstrom<br>> Sent: Friday, 1 May 2020 2:00 AM<br>> To: <a href="mailto:oberon@lists.inf.ethz.ch" target="_blank">oberon@lists.inf.ethz.ch</a><br>> Subject: Re: [Oberon] Interfacing with Foreign Systems<br>> <br>> On 2020-04-30 01:50, Skulski, Wojciech wrote:<br>> > Chris:<br>> ><br>> >    how about OOC and OO2C? Are they not in the same spirit?<br>> ><br>> > <a href="http://ooc.sourceforge.net/index.html" target="_blank">http://ooc.sourceforge.net/index.html</a><br>> <br>> OBNC is a better example. It targets the latest version of Oberon and is<br>> actively maintained.<br>> <br>> <a href="https://www.miasap.se/obnc/" target="_blank">https://www.miasap.se/obnc/</a><br>> <br>> <br>> -- August<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" target="_blank">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a><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" target="_blank">https://lists.inf.ethz.ch/mailman/listinfo/oberon</a><o:p></o:p></p></blockquote></div></div><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri",sans-serif'>-- Oberon@lists.inf.ethz.ch mailing list for ETH Oberon and related systems https://lists.inf.ethz.ch/mailman/listinfo/oberon <o:p></o:p></span></p></div></body></html>