<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><pre class="" style="background-color: rgb(255, 255, 255);"><span class=""><span style="white-space: pre-wrap;" class="">Hi Jörg,</span></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span class=""><span style="white-space: pre-wrap;" class="">In essence you are right. A more detailed response will follow.</span></span><span style="white-space: pre-wrap;" class=""> Here I just add some brief comments. See inline comments.</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span class=""><span style="white-space: pre-wrap;" class="">  > On Thu Oct 5 17:25:20 CEST 2017 by Jörg <a href="mailto:joerg.straube@iaeth.ch" class="">joerg.straube@iaeth.ch</a> 
  > Hi Andreas</span></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span class="" style="white-space: pre-wrap;">  > Of course we could do so, but I wonder why?
  >
  > If I understand you correctly you want to allow the following</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span class="" style="white-space: pre-wrap;">  >
  > VAR
  > a: ARRAY 30 OF CHAR;
  > b: ARRAY 30 OF CHAR;
  >
  > a := b;

Yes, this would be one example. But there are also other (roughly similar) cases involving parameters and local variables.</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span class="" style="white-space: pre-wrap;"><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span class="" style="white-space: pre-wrap;">  > Currently, this is not allowed, because there are several ways to allow this already
  > Method 1:
  > VAR a, b: ARRAY 30 OF CHAR;
  >
  > Method 2:
  > TYPE String30 = ARRAY 30 OF CHAR;
  > VAR a: String30;
  >   b: String30;


  > We should not change the language. At least not in this case. What could be a practical benefit of it?
  > NW allows assignment of different ARRAY types only in case of open arrays. This is reasonable as the formal</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">  > parameter accepts different types.</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">Acknowledged. I just wasn’t sure whether a) it should be allowed but accidentally isn’t or whether b) it should not be allowed, and therefore isn’t. If I read you correctly, in essence what you are saying is that one should not allow structural equivalence when name equivalence suffices (and represents cleaner programming style). It’s not that one can’t, it’s that one doesn’t need to..</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span class="" style="white-space: pre-wrap;"><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span class="" style="white-space: pre-wrap;">  > PROCEDURE Test(VAR open: ARRAY OF CHAR);
  > VAR local: ARRAY 17 OF CHAR;
  > BEGIN
  >   local := open  (* exception allowed by report *)
  >   open := local  (* not allowed. Here we could discuss whether we should allow this as well *)
  > END A;

<br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">Yes, but there are also cases where the formal parameter does *not* have to be an open array parameter, as in the example below.</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">In this small example, procedure P actually compiles without an error message, because both the variable array parameter ‘a’ and the local variable ‘local’ are of the same type (namely type A, name equivalence here). But when *calling* P with an actual parameter ‘y’ that is only structurally equivalent to the formal parameter ‘a’ of procedure P, an “incompatible parameters” compiler error is generated by the Oberon compiler. After your comment above, it is now clear why - namely for the exact same reason as in your example above: the formal parameter ‘a’ and the actual parameter ‘y' just are not assignment compatible.</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">MODULE M;<br class="">  TYPE A = ARRAY 3, 2 OF INTEGER;<br class="">  VAR x: A;<br class="">    y: ARRAY 3, 2 OF INTEGER;<br class=""><br class="">  PROCEDURE P(VAR a: A);<br class="">    VAR local: A;<br class="">  BEGIN a := local<br class="">  END P;<br class=""><br class="">BEGIN<br class="">  P(x);  (*correct*)<br class="">  P(y)   (*incompatible parameters*)<br class="">END M.<br class=""></span><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">  > Jörg</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><pre class=""><span style="white-space: pre-wrap;" class="">Still, it may be worth pondering over this question some more. I just don’t have a good enough reason yet :-)</span></pre><pre class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class=""><span style="white-space: pre-wrap;" class="">What I do know that it is easy to implement the newly proposed rules as outlined in the appendix below (just a few lines).</span></pre><div class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></div></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">As I said, there will be a longer response on this (t</span><span style="white-space: pre-wrap;" class="">here have been some private discussion on this topic..)</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">Regards,</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">Andreas</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">Appendix: The two proposed rules discussed in this response are:</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">Same Types</span><span style="white-space: pre-wrap;" class="">
</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">Two variables a and b with types Ta and Tb are of the same type if
....
*4. Ta and Tb are array types with same element types and lengths
 
<br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">Assignment compatible</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class=""><br class=""></span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">An expression e of type Te is assignment compatible with a variable v of</span><span style="white-space: pre-wrap;" class="">
</span></pre><pre class="" style="background-color: rgb(255, 255, 255);"><span style="white-space: pre-wrap;" class="">type Tv if one of the following conditions hold:
....
</span><pre class=""><span style="white-space: pre-wrap;" class="">*8. Tv is ARRAY n OF Ta, e is ARRAY OF Tb, where Ta and Tb are the same type</span></pre><div class=""><br class=""></div><span style="white-space: pre-wrap;" class="">
<br class="Apple-interchange-newline"><br class=""></span></pre></body></html>