purity and memory allocations/pointers

Timon Gehr timon.gehr at gmx.ch
Sat Aug 3 19:05:52 PDT 2013


On 08/04/2013 02:50 AM, Meta wrote:
> On Saturday, 3 August 2013 at 23:04:14 UTC, Timon Gehr wrote:
>> ...
>>
>> Modification and dereference within a Haskell expression:
>>
>> import Data.STRef
>> import Control.Monad.ST
>>
>> x = runST $ do
>>   x <- newSTRef 0
>>   writeSTRef x 1
>>   v <- readSTRef x
>>   return v
>>
>> main = print x
>
> I apologize, as I don't know how familiar you are with Haskell,

With the language, quite intimately.

> so forgive me if I'm telling you something you already know. That code is
> 100% pure and side-effect free;

My point was basically that x is a pure expression of type Integer.

> no variables are being modified.

Which I didn't claim. A reference is dereferenced and the contents of 
the referenced slot are replaced. Then the reference is dereferenced 
again to read the modified value out.

> Haskell only simulates side-effects

What tells you that D does not 'simulate' mutable state?

> with monads,

What is done to main behind the scenes in order to execute the program 
is most definitely side-effecting.

> and do-notation

do notation is not central to my point.

> (syntwhat you
> use in this example) which is syntactic sugar.
>
>>> (i.e., the academic definition of purity).
>>
>> I wouldn't go that far.
>
> Perhaps that may go too far, as academics love to obfuscate topics with
> a bunch of extraneous cruft,

I take issue with this statement. I meant, I wouldn't assume 'the 
academic definition of purity' is a thing.

> but the fact remains that purity means:
>
> 1. No modification of local or global state (side-effects)
> 2. No dependence on global mutable state.

What does this statement quantify over? Eg, where is the abstraction 
boundary?



More information about the Digitalmars-d mailing list