<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 name=Titel content=""><meta name=Stichwörter content=""><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:"MS Mincho";
        panose-1:2 2 6 9 4 2 5 8 3 4;}
@font-face
        {font-family:monospace;
        panose-1:0 0 0 0 0 0 0 0 0 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
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;}
span.E-Mail-Formatvorlage17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:595.0pt 842.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body bgcolor=white lang=DE link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>VAR<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>  nbrOfBirthsPerMonth: ARRAY 12 OF INTEGER;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>  nbrOfAccidentsPerMonth: ARRAY 12 OF INTEGER;<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><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>nbrOfBirthPerMonth := nbrOfAccidentsPerMonth (* these match structurally but makes not much sense, should be forbidden *)<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><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>If you want to write a generic module handling monthly statistics, you have open ARRAYs and the exceptions for assignments of actual to formal.<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><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>PROCEDURE StoreYear (a: ARRAY OF INTEGER);    (* … *)<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><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>StoreYear (nbrOfBirthsPerMonth); (* structural match *)<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>StoreYear (nbrOfAccidentsPerMonth);<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><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>If you have a procedure like StoreBirths (); you should not use open ARRAYs, as then StoreBirths (nbrOfAccidentsPerMonth) would be possible…<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><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>br<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-US'>Jörg<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span 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='font-size:12.0pt;color:black'>Von: </span></b><span style='font-size:12.0pt;color:black'>Oberon <oberon-bounces@lists.inf.ethz.ch> im Auftrag von Andreas Pirklbauer <andreas_pirklbauer@yahoo.com><br><b>Antworten an: </b>ETH Oberon and related systems <oberon@lists.inf.ethz.ch><br><b>Datum: </b>Freitag, 6. Oktober 2017 um 13:17<br><b>An: </b>ETH Oberon and related systems <oberon@lists.inf.ethz.ch><br><b>Betreff: </b>[Oberon] Clarifying type compatibility in Oberon-07<o:p></o:p></span></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal><span style='font-family:"Courier",serif'>></span><o:p> </o:p></p><div><p class=MsoNormal><span style='font-family:"Courier",serif'>> </span><span style='font-family:"monospace",serif'>Personally, I’m not indifferent </span><span style='font-family:"MS Mincho",serif'>☺</span><span style='font-family:"monospace",serif'> > > I know that it can be done, but the question is WHY.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>> Only because something can be done is a poor reason to do it.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>> > > If you put  a := b in your code, you do that as you know or</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>> assume a certain relationship between those two variables</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>> (they e.g. represent instances of the same or comparable</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>> thing). If this hold true, I don’t understand why you</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>> have to write two totally independent type declarations</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>> that (by accident) match structurally. > > br > > Jörg</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>></span><o:p> </o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'><br><br></span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>Jörg, you have a valid point - no question! I value such input</span><span style='font-family:"Courier",serif'>. As</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier",serif'>I said myself earlier “I just don’t have a good enough reason yet”.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier",serif'><br><br></span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>But I do want to continue exploring the question a little bit, now</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>that the topic has come up for the N-th time in M decades. P</span><span style='font-family:"Courier",serif'>erhaps</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>this time around, someone comes up with a new insight or a “good</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>enough” reason for changing the language.</span><o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>If I understand you correctly, your position can also be viewed</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>as: “If as a language designer one does have a chance or option</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>to promote ‘good’ programming style (whatever that means), one</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>should</span><span style='font-family:"Courier",serif'> by all means use it”.. In the particular case of array</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier",serif'>type equivalence discussed in this forum, it effectively amounts</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier",serif'>to forcing programmers to write one type declaration instead of two;</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier",serif'>which I too view as good programming practice, which in addition</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier",serif'>increases code readability in my opinion.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'><br><br></span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>Perhaps yet another way to look at your position is this: Once I do</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>allow structural equivalence for </span><span style='font-family:"Courier",serif'>arrays, I can never go back in the</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier",serif'>future without breaking someone’s legacy code. So, in the </span><span style='font-family:"monospace",serif'>absence</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>of a really compelling reason to actually *allow* </span><span style='font-family:"Courier",serif'>structural</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>equivalence for arrays, one should “play safe” and disallow it.</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>Perhaps </span><span style='font-family:"Courier",serif'>that is what the Pascal/Modula/Oberon compiler writers</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"Courier",serif'>felt all those years..</span><o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>PS: I’m now 60/40 - does that make you feel better? ;-)</span><o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'>-AP</span><o:p></o:p></p></div><div><p class=MsoNormal><span style='font-family:"monospace",serif'><br><br></span><o:p></o:p></p></div><p class=MsoNormal><span style='font-family:"monospace",serif'><br><br></span><o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>-- 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></p></div></body></html>