<html xmlns:v="urn:schemas-microsoft-com:vml" 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:"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:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:9.0pt;
        font-family:Consolas;
        mso-fareast-language:EN-US;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:Consolas;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 122.9pt 72.0pt 122.9pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1650328175;
        mso-list-type:hybrid;
        mso-list-template-ids:-1789483526 201916431 201916441 201916443 201916431 201916441 201916443 201916431 201916441 201916443;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1
        {mso-list-id:2079472407;
        mso-list-type:hybrid;
        mso-list-template-ids:-457702554 201916431 201916441 201916443 201916431 201916441 201916443 201916431 201916441 201916443;}
@list l1:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l1:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l1:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-AU link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoPlainText>> <span lang=EN-US style='mso-fareast-language:EN-AU'>-----Original Message-----</span></p><p class=MsoPlainText>> <span lang=EN-US style='mso-fareast-language:EN-AU'>From: Oberon [mailto:oberon-bounces@lists.inf.ethz.ch] On Behalf Of</span></p><p class=MsoPlainText>> <span lang=EN-US style='mso-fareast-language:EN-AU'>Jörg Straube</span></p><p class=MsoPlainText>> <span lang=EN-US style='mso-fareast-language:EN-AU'>Sent: Sunday, 11 November 2018 6:35 PM</span></p><p class=MsoPlainText>> <span lang=EN-US style='mso-fareast-language:EN-AU'>To: ETH Oberon and related systems</span></p><p class=MsoPlainText>> <span lang=EN-US style='mso-fareast-language:EN-AU'>Subject: Re: [Oberon] SYSTEM Modules</span></p><p class=MsoPlainText>> </p><p class=MsoPlainText>> All</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> If I understand your reasoning correctly, you say: I happen to be a</p><p class=MsoPlainText>> low level programmer and am confronted with the fact I have to write</p><p class=MsoPlainText>> a lot of SYSTEM qualifiers in my code. As I don t like that, lets</p><p class=MsoPlainText>> modify the language.</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> Now imagine I happen to be a programmer of a GUI and my code is full</p><p class=MsoPlainText>> of Display qualifiers. I could for sure find a similar procedure as</p><p class=MsoPlainText>> your InitClocks with 30 SYSTEM calls where I use 30 calls to Display</p><p class=MsoPlainText>> procedures in a row.</p><p class=MsoPlainText>> As I don t like that, lets modify the language.</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> In the first case I would propose IMPORT S:=SYSTEM, for the second</p><p class=MsoPlainText>> programmer I would propose IMPORT D := Display</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> I like the Oberon idea of fully qualified names. The Modula syntax</p><p class=MsoPlainText>> where you dequalify your names during the IMPORT by a list of</p><p class=MsoPlainText>> procedures opens up a lot of confusion while maintaing different</p><p class=MsoPlainText>> sources, with different dequalifying IMPORT lists.</p><p class=MsoPlainText>> </p><p class=MsoPlainText>> Just my 2cents </p><p class=MsoPlainText>> J rg</p><p class=MsoPlainText>> </p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><span style='color:black'>Not exactly. I'm questioning why some global built-in procedures have to be qualified whereas others don't. How cumbersome would it be if we had to say GLOBAL.INC(i, 1) or ch := GLOBAL.CHR(i)? The definition of SYSTEM has diminished over time to the point where it is now almost redundant. <o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>Comparing SYSTEM calls to Display calls is like comparing apples to oranges.<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>Global built-in / SYSTEM procedures are very different to procedures contained in library or application modules. You cannot necessarily apply the same rules to both. Built-in procedures have one or more of the following attributes:<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='color:black'><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'>  </span></span></span><![endif]><span style='color:black'>Variable number of parameters<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='color:black'><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'>  </span></span></span><![endif]><span style='color:black'>Implemented as inline code<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='color:black'><span style='mso-list:Ignore'>3.<span style='font:7.0pt "Times New Roman"'>  </span></span></span><![endif]><span style='color:black'>Bypass normal type-checking code<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='color:black'><span style='mso-list:Ignore'>4.<span style='font:7.0pt "Times New Roman"'>  </span></span></span><![endif]><span style='color:black'>Bypass normal range-checking code<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>And, above all:<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText style='margin-left:36.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='color:black'><span style='mso-list:Ignore'>5.<span style='font:7.0pt "Times New Roman"'>  </span></span></span><![endif]><span style='color:black'>They can only be modified / added to by modifying the compiler<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>Whenever I have had a situation where there could be many calls to the same imported module (e.g. Texts, Display) etc, I wouldn’t use aliases just to save typing. <o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>e.g. if I see repetitive code like this<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>      Files.ReadInt(R, data); Out.String("fixP = "); Out.Int(data, 8); Out.Ln();<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>      Files.ReadInt(R, data); Out.String("fixD = "); Out.Int(data, 8); Out.Ln();<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>      Files.ReadInt(R, data); Out.String("fixT = "); Out.Int(data, 8); Out.Ln();<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>      Files.ReadInt(R, data); Out.String("entry = "); Out.Int(data, 8); Out.Ln();<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>I am likely to refactor it to something like this: <o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>     PROCEDURE ShowFixup(r: Files.Rider; label: ARRAY OF CHAR);<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>     VAR<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>       data: INTEGER;<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>     BEGIN<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>       Files.ReadInt(r, data); Out.String(label); Out.String(" = "); Out.Int(data, 8); Out.Ln();<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>     END ShowFixup;<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>     ShowFixup(R, "fixP");<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>     ShowFixup(R, "fixD");<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>     ShowFixup(R, "fixT");<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>     ShowFixup(R, "entry");<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>The dozen references to Out are reduced to four.<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'>Regards,<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>Chris Burrows<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'>CFB Software<o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><a href="http://www.astrobe.com">http://www.astrobe.com</a><o:p></o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p><p class=MsoPlainText><span style='color:black'><o:p> </o:p></span></p></div></body></html>