On Friday, 29 December 2017 at 07:53:51 UTC, IM wrote:
I will start:
-- Better compiler errors, better compiler errors, better
compiler errors.
I really wish that the compiler errors could receive some
refinement. Mostly it feels like some error text just being
thrown at me. It needs to be better formatted, more helpful,
with suggestions about how to fix (if possible).
To illustrate my point:
- See the compile errors I've just encountered with DMD:
https://cdn.pbrd.co/images/H0q609l.png
- Now compare that with an error produced by rustc:
https://cdn.pbrd.co/images/H0q6bLi.png
Simple things like these make a big difference. D Lang has been
around for a long while now, and hence signs of its maturity
has to show everywhere, especially in the compiler, as well as
the package manager.
Similar problem is when some template with alias callback fail to
instantiate because callback contains error.
Example:
void foo(){
string str = 1;
/++ nice error message:
Error: cannot implicitly convert expression `1` of type
`int` to `string`
+/
import std.algorithm;
[1, 2, 3].each!((x){
string str = 1 ///same error
});
/++ horrible error message without root cause:
source\app.d(660,14): Error: template app.foo.each!((x)
{
string str = 1;
}
).each cannot deduce function from argument types !()(int[]),
candidates are:
C:\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\iteration.d(899,10):
app.foo.each!((x)
{
string str = 1;
}
).each(Range)(Range r) if (!isForeachIterable!Range &&
(isRangeIterable!Range || __traits(compiles,
typeof(r.front).length)))
C:\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\iteration.d(934,10):
app.foo.each!((x)
{
string str = 1;
}
).each(Iterable)(auto ref Iterable r) if
(isForeachIterable!Iterable || __traits(compiles,
Parameters!(Parameters!(r.opApply))))
+/
}