<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">&gt;&gt; It seems odd to desire support for equality comparisons, but not<br>
&gt;&gt; relational ones.<br>
&gt;<br>
&gt; Why would that be odd? Relational comparison is much more complex, it<br>
&gt; assumes a totally ordered address space. Not all architecture have<br>
&gt; that naturally.<br>
<br>
So, let&#39;s talk about segmented 16-bit mode of Intel 8086, where<br>
an object is at most 64 KB (one segment).<br></blockquote><div><br></div></div></div></blockquote><div>Arthur O&#39;Dwyer respondeth: </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div></div><div>Intel still has a completely linear address-space; it just represents those addresses in a weird redundant way at the bit level.</div><div><br></div><div>When we talk about an address-space that is not &quot;totally ordered,&quot; I picture an address space something like what Cerberus displays graphically: it&#39;s just a bunch of boxes floating in space, some of which are guaranteed to be vertically contiguous (that is, ordered) and some of which aren&#39;t.</div><div>Does my mental model correspond to some real-world heterogeneous/distributed/associative memory that actually exists, or will exist in the next 40 years? I honestly don&#39;t know. But the &quot;bunch of boxes floating in space&quot; addressing model is really easy to imagine and draw on a whiteboard, so I think I understand why it&#39;s the model that C and C++ use.</div></div></div></blockquote><div><br></div><div>I think the non-linear, disjointed address space is increasing with heterogeneous computing, and will continue to do so.</div><div><br></div><div>Current device drivers for CPU/GPU and other &quot;local&quot; compute devices provide a mechanism to &quot;map&quot; the (separate) address-spaces for the several local devices into the host memory address space to hide this issue (presenting an illusion of universal host-linear address space).  But, that is only workable &quot;to-a-point&quot;.  We already deal with &quot;host-visible&quot; and &quot;host-non-visible&quot; device memory for local devices that make this linear-mapping-to-host somewhat problematic.</div><div><br></div><div>And, distributed nodes fundamentally *cannot* share an address space, nor map to a host linear address space.  Of course, for distributed address spaces we have other mechanisms (content-hashing to an identifier like a UUID, or semantic handles that behave as pointers to include comparison or relational ordering). </div><div><br></div><div>Mostly, I&#39;m hoping that address compare-or-relational operations for the language are sufficiently rich that algorithms can be authored that happen to accept in their stead my &quot;fancy pointer&quot; that happens to support these rich relational operations.  If only equality is supported, that&#39;s fine, I&#39;ll probably just write different algorithms that use the &quot;fancy pointer&quot; that happens to support the richer relational form.</div><div><br></div><div>--charley</div><div><br></div></div></div>