Pure dynamic casts?

Jarrett Billingsley jarrett.billingsley at gmail.com
Tue Sep 22 18:21:13 PDT 2009


On Tue, Sep 22, 2009 at 8:48 PM, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:

> Why have pure functions at all?  Seriously, all pure function reorderings
> and reuse can be rewritten by human optimization.  If we aren't going to
> look for places that pure functions can help optimize, why add them to the
> language, it seems more trouble than its worth?
>
> If all it takes to optimize dynamic casts is to put pure on the function
> signature, have we wasted that much time?

But dynamic downcasting *isn't* pure, unless you can prove that the
reference that you're downcasting is unique.

class Base {}
class Derived : Base {}

struct S
{
	Object o;

	Derived get()
	{
		return cast(Derived)o;
	}
}

void main()
{
	S s;
	s.o = new Base();
	writeln(s.get());
	s.o = new Derived();
	writeln(s.get());
}

Dynamic downcasts are not pure. Simply. That's why they're *dynamic*.
Without some kind of uniqueness typing, you cannot prove anything
about the validity of such casts until runtime.



More information about the Digitalmars-d mailing list