On Saturday, April 14, 2012 15:24:14 deadalnix wrote:
> Le 11/04/2012 22:41, Jonathan M Davis a écrit :
> > On Wednesday, April 11, 2012 22:01:36 deadalnix wrote:
> >> Le 11/04/2012 00:10, Alex Rønne Petersen a écrit :
> >>> I'm planning to go over druntime and add nothrow/pure everywhere I can,
> >>> but I don't want to disturb anyone else who's currently working on
> >>> patches that this could disrupt.
> >> 
> >> Can't we consider this as an inference issue ?
> > 
> > How so? Attribute inference exists only for templated functions and some
> > delegate stuff. We're talking primarily about extern(C) function
> > declarations here.
> > 
> > - Jonathan M Davis
> 
> As long as the function body is available, inference is possible. If it
> is possible, it is legitimate to wonder if the problem come from the
> fact that it isn't done, or that it isn't explicit in the source code.

But it doesn't work that way, and if it did, the signature of the function 
could change depending on whether you were using a .di or .d file when 
importing. D takes the tact that it's better to require that the programmer 
mark functions as pure - particularly in a language where it's possible to 
have function declarations with no definitions (it's also easier on the 
compiler). Attribute inference was only added with templates, because without 
it, you'd have to duplicate the template for all of the combinations of 
nothrow, pure, and @safe, which was untenable.

Also, if you're talking about C functions, you _can't_ have the source code. 
Again, druntime is a prime example of that. Even if the language had attribute 
inference for all functions, you'd still have to explictly mark C functions as 
pure for them to be pure, because the compiler doesn't have their source.

- Jonathan M Davis

Reply via email to