forcing weak purity

Steven Schveighoffer schveiguy at yahoo.com
Thu May 24 05:56:25 PDT 2012


On Thu, 24 May 2012 04:58:56 -0400, Don Clugston <dac at nospam.com> wrote:

> On 24/05/12 02:26, Alex Rønne Petersen wrote:
>> On 23-05-2012 19:16, deadalnix wrote:
>>> Le 23/05/2012 17:29, Don Clugston a écrit :
>>>> There's a huge difference between "a global collection *may* be
>>>> performed from a pure function" vs "it *must* be possible to force a
>>>> global collection from a pure function".
>>>>
>>>
>>> Thank you !
>>
>> I personally disagree that this should be a rationale to not allow the
>> latter. D is a systems language and we really should stop trying to
>> pretend that it isn't. There's a reason we have a core.memory module
>> that lets us control the GC.
>>
>
> This is all about not exposing quirks of the current implementation.
>
> The way it currently is, would get you to perform a gc before you enter  
> the first pure function.
> After that, the only possible garbage to collect would have been  
> generated from inside the pure function. And that should be very cheap  
> to collect.

The more I think about it, the more I believe that what gc_collect does  
(i.e. run a full collect, or run a pure-function specific collect) is an  
implementation detail.

I don't think exposing gc_collect is a quirk of the current  
implementation, and it should be marked pure (weak purity).

This whole thread has kind of flown way off topic.  Regardless of whether  
gc_collect should be callable from a pure function, there are other use  
cases for considering logically pure functions as pure (for the same  
reasons you can cast away const).  Should we be able to force weak purity  
or not?  If so, how to do it?

-Steve


More information about the Digitalmars-d mailing list