Check whether function/delegate uses any shared or global variables

Nicholas Wilson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Dec 12 04:12:05 PST 2016


On Monday, 12 December 2016 at 11:37:04 UTC, Nikhil Jacob wrote:
> On Monday, 12 December 2016 at 11:15:28 UTC, Nicholas Wilson 
> wrote:
>> On Monday, 12 December 2016 at 11:02:21 UTC, Nikhil Jacob 
>> wrote:
>>> Is there any way to check whether a function/delegate passed 
>>> to a function uses any shared or global variables ?
>>>
>>> I could not find any in std.traits.
>>
>> there is the pure function attribute, how ever this still 
>> allows you to use globals *if you pass them as parameters to 
>> the function*.
>>
>> see https://dlang.org/spec/function.html#pure-functions
>
> Make sense.. I have two follow up questions
>
> 1. What about delegates ?
> 2. If a function is not explicitly declared as pure but 
> satisfies the conditions of a pure function then can i check 
> whether the function is pure using functionAttributes in 
> std.traits.

1. they work the same. Delegates can have any of the function 
attributes that a function can, as well as scope, meaning the 
delegate will not be stored.

2. Yes and no. Template functions have their attributes inferred 
(but you can still annotate them manually, to make sure that the 
function is e.g. pure). Non-template functions don't have their 
attributes inferred.


More information about the Digitalmars-d-learn mailing list