Pure dynamic casts?
Jeremie Pelletier
jeremiep at gmail.com
Tue Sep 22 20:41:35 PDT 2009
Daniel Keep wrote:
>
> Steven Schveighoffer wrote:
>> On Tue, 22 Sep 2009 21:24:10 -0400, Daniel Keep
>> <daniel.keep.lists at gmail.com> wrote:
>>> Well, if you're not looking at memoization, why is this discussion even
>>> happening?
>> There are other pure optimizations that can occur without memoization.
>> In fact I don't even know why memoization is brought up so much with
>> pure functions, it is an impossible-to-prove optimization. How do you
>> know memoization helps when you don't know how often the same arguments
>> will be used?
>
> What other optimisations? The only other one I can think of off the top
> of my head is common subexpression elimination. Except that's
> effectively caller-side memoisation.
>
>>> The ONLY way I can see object casting being treated as a pure function
>>> is if all references passed in are immutable and even then only if the
>>> compiler can prove the reference cannot be changed (i.e. the reference
>>> is always kept on the stack AND you assume you never manually delete it).
>> How is a thread going to come along and change a local variable in
>> another thread?
>
> I don't know if you've noticed, but objects tend to be allocated on the
> heap, not the stack. :P
>
> There's nothing to stop another thread from killing the object you're
> pointing to and then substituting in a new one. It's pathological, yes,
> but this is the sort of thing that, if it happens, you don't have a hope
> of debugging. This is why threads completely and utterly suck and I
> frequently wish they'd never been invented.
>
> It's also incidentally why I've personally come to regard reference
> semantics, in general, as a really, REALLY stupid idea.
I myself couldn't live without threads or references, but I agree that
mixing the two can lead to interesting scenarios to debug. Just try and
code a responsive GUI without using threads, the application will "hang"
everytime you're not going back to the main loop every few milliseconds.
Or doing network I/O without bringing your program to a crawl, of course
you could use async I/O but where is that I/O gonna run without a
background thread to support it :)
Besides, the upcoming shared qualifier is there to address those issues.
You might want to look at this article, I came across it a few months
ago and found it rather insightful, it just could change your view on
references:
http://blogs.msdn.com/ericlippert/archive/2009/02/17/references-are-not-addresses.aspx
More information about the Digitalmars-d
mailing list