Nothrow, pure in druntime
Walter Bright
newshound1 at digitalmars.com
Sun Jan 25 11:39:52 PST 2009
dsimcha wrote:
> I've started looking at the best way to annotate all the pure/nothrow
> functions in druntime. A lot of druntime functionality calls functions from
> the C standard library or the Windows/POSIX API. I figure the best way to get
> started is to deal w/ these first, and then worry about the higher level stuff
> that's built on to of it. These functions are obviously nothrow, since C
> doesn't even support exceptions. First of all, is there a decent automated
> way to fix all of the declarations for these functions so that they're nothrow?
I did think of making all functions that are extern(C) automatically
nothrow, but was concerned that it would result in a lot of bugs and
broken code from ones that did throw.
> Secondly, since we don't have the sources to the C libraries for which the
> function prototypes are declared, we can't be absolutely sure about their
> purity. A good portion of the ones that seem like they could be pure, mostly
> math stuff like sqrt, log, etc., are probably messing w/ errno, and
> theoretically they could be memoizing stuff, etc. What's a reasonable course
> of action for these? It seems like pure is most useful for mathematical
> functions, , so it would really be a shame not to use it here.
Functions that modify errno cannot be pure. What needs to be done is go
through the definition of each. For example, strlen, strcmp, etc. can be
marked as pure. printf and strtok cannot.
The math functions can be a problem since earlier incarnations often
messed with global state, but with the advent of thread safe C runtime
libraries, this shouldn't be an issue anymore.
More information about the Digitalmars-d
mailing list