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.