purity question
Brad Roberts via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun May 28 18:07:32 PDT 2017
On 5/28/2017 6:01 PM, Stefan Koch via Digitalmars-d-learn wrote:
> On Monday, 29 May 2017 at 00:53:25 UTC, Brad Roberts wrote:
>> On 5/28/2017 5:34 PM, Jonathan M Davis via Digitalmars-d-learn wrote:
>>> On Sunday, May 28, 2017 16:49:16 Brad Roberts via
>>> Digitalmars-d-learn wrote:
>>>> Is there a mechanism for declaring something pure when it's built from
>>>> parts which individually aren't?
>>>>
>>>> string foo(string s)
>>>> {
>>>> // do something arbitrarily complex with s that doesn't touch
>>>> globals or change global state except possibly state of the heap or gc
>>>> return s;
>>>> }
>>> <snip lecture> you can cast </snip lecture>
>>>
>>
>> Ok, so there essentially isn't. I'm well aware of the risks of lying
>> to the compiler, but it's also not sufficiently smart to unravel
>> complex code. Combined with there being interesting parts of the
>> standard libraries that themselves aren't marked pure, there's a real
>> need for escape hatches. A simple example: anything that has a
>> malloc/free pair.
>
> There is
>
> void[] myPureMalloc(uint size) pure @trusted nothrow @nogc
> {
> alias pure_malloc_t = pure nothrow void* function(size_t size);
> return (cast(pure_malloc_t)malloc)(size)[0 .. size];
> }
That's still a cast. It's a nice way to isolate the cast, but it's
clearly still there. And as I said, that's just one simple example.
More information about the Digitalmars-d-learn
mailing list