On Mon, 2007-06-04 at 16:26 +0100, Sam Mason wrote:

> I've just noticed a problem with these by-references values though.
> That of calling a "by-reference" method with the reference to an element
> of a union and changing the tag of the union invalidating the type of
> the element inside the "by-reference" function.  I can only think of
> very contrived bits of code that would trigger it, but it would break
> type safety.

Yes. The issue is similar to the INNER-REF construct we have been
considering. The item passed must not reside within a union leg. It is
legal to pass an object of union type, but there is no "union leg type".
That would require dependent types, which we don't currently do.

> yes, which is why (I believe) references got added to C++.  I've never
> seen a way to do this safely without some heavy type-level stuff, like
> alias types.  This is a big step from what you've got at the moment
> though.

References were added too late in C++. For example: the "this pointer"
should have been a "this reference".

The problem in C++ isn't the introduction of C++ reference types (i.e.
T&). It's (a) the ability to take their address, (b) the general
non-safety around union legs, and (c) the ability to capture them. It is
possible to get some spectacularly bad liveness violations when a class
has a member field of reference type.

> > I do think it is better than "copy on closure formation", which appears
> > to be what the Felix folks are considering.
> 
> I don't know Felix at all.  I've had a look through the language
> reference[1] on their website but can't seem to find anything about
> this.

I was poking through their wiki, and it showed up on a blog. It's an
open design issue.

The current Felix performance results are actually pretty impressive.


shap

_______________________________________________
bitc-dev mailing list
[email protected]
http://www.coyotos.org/mailman/listinfo/bitc-dev

Reply via email to