Proposal: Relax rules for 'pure'

Steven Schveighoffer schveiguy at yahoo.com
Wed Sep 22 12:14:23 PDT 2010


On Wed, 22 Sep 2010 15:08:26 -0400, Don <nospam at nospam.com> wrote:

> Robert Jacques wrote:
>> On Wed, 22 Sep 2010 11:44:00 -0400, Don <nospam at nospam.com> wrote:
>>
>>> Robert Jacques wrote:
>>>> On Wed, 22 Sep 2010 07:54:26 -0400, Michel Fortin  
>>>> <michel.fortin at michelf.com> wrote:
>>>>
>>>>> On 2010-09-22 01:26:01 -0400, "Robert Jacques" <sandford at jhu.edu>  
>>>>> said:
>>>>>
>>>>>> So removing the concurrency safety from pure would greatly  expand  
>>>>>> the number of pure functions, however, automatic parallelism would   
>>>>>> be lost.
>>>>>
>>>>> Don clearly mentioned that this is not lost. Basically, for safe  
>>>>> parallelism what you need is a function that has a) pure and b) no  
>>>>> mutable reference parameter. Both are easily checkable at compile  
>>>>> time, you'd just need to change your test for pure for a test that  
>>>>> also checks the arguments.
>>>>  What is lost is my ability to declare a function does x in the  
>>>> signature and for the compiler to check that. I really want to know  
>>>> if code monkey A changed some type's implementation to be thread  
>>>> unsafe, because detecting and tracking down a loss of performance due  
>>>> to loss of automatic parallelism is devilish.
>>>
>>> No, you haven't lost that at all. Any function marked as pure still  
>>> has no access to any state, other than what is provided by its  
>>> parameters. It is still thread-safe.
>>  No, it isn't. A strongly-pure function is thread safe, but a  
>> weakly-pure function isn't. Since strong/weak is automatically  
>> determined by the compiler, a function's strength can switch due to  
>> long distance code changes.
>
> This is completely incorrect. It can only change strength if its  
> signature changes.

Hypothetical counter-case

struct S
{
    version(stronglypure)
      string s;
    else
      char[] s;
}

pure foo(S s); // changes strength depending on S' contents

-Steve


More information about the Digitalmars-d mailing list