<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=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">> On Sun Oct 8 09:36:25 CEST 2017 Jörg Straube wrote:</span></font><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">> > On Sun Oct 8 09:29:33 CEST 2017 August Karlstrom wrote:</span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">> > Even C uses name equivalence for record types (structs), but the reason</span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">> > for this is that the variables may have different alignment (even though they have the same structure). </span></font></div><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">>
> In Oberon the alignment is part of the type.
> You can see BYTE as an INTEGR with another alignment. BYTE aligns on byte boundary,</span></font><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">> INTEGER aligns on 32bit boundary. So in Oberon they would structurally not match.
>
> br
> Jörg</span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font><div class=""><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">Historical note:</span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">In the past (Algol, Pascal, Modula) there was an additional reason for assuming name equivalence as the basis for establishing type consistency rather than structural equivalence: variant records! </span></font><span style="font-family: monospace; white-space: pre-wrap;" class="">They make the implementation of structural equivalence more complex and constituted an inherently nasty subject for compiler implementors.</span></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class=""><br class=""></span></font></div><div class=""><font face="monospace" class=""><span style="white-space: pre-wrap;" class="">Variant records were eliminated in the step from Modula to Oberon, so we are now left with alignment problem to deal with.</span></font></div></div></div><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class=""><br class=""></span></div><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class="">-AP</span></div><div class=""><span style="font-family: monospace; white-space: pre-wrap;" class=""><br class=""></span></div></body></html>