Unhelpful error messages
Don
turnyourkidsintocash at nospam.com
Wed Jul 10 06:05:25 PDT 2013
On Monday, 8 July 2013 at 20:46:35 UTC, H. S. Teoh wrote:
> On Mon, Jul 08, 2013 at 09:47:46PM +0200, Peter Alexander wrote:
>> On Monday, 8 July 2013 at 18:10:45 UTC, H. S. Teoh wrote:
>> >On Sun, Jul 07, 2013 at 02:06:46PM +0200, Peter Alexander
>> >wrote:
>> >>It's a tough situation and I think the only way this could
>> >>even
>> >>reasonably be resolved is through some sophisticated IDE
>> >>integration. There is no way to display this kind of error
>> >>report in
>> >>a blob of command line text.
>> >
>> >I don't see how an IDE could do better than the compiler.
>> >Combinatorial explosion is a nasty problem, and if an IDE
>> >could solve
>> >it, so could the compiler. Sure, the IDE could give you a nice
>> >scrollable GUI widget to look through all the various reasons
>> >of the
>> >instantiation failure, but fundamentally speaking, that's not
>> >much
>> >different from running grep through 50 pages of compiler
>> >output. You
>> >still haven't solved the root problem, which is to narrow
>> >down the
>> >exponential set of possible problem causes to a manageable,
>> >human-comprehensible number.
>>
>> I thinking of more of an interactive diagnostic: you choose
>> which
>> overload you intended to instantiate and then get a list of
>> reasons
>> why that failed to compile. Repeat recursively for any
>> sub-calls.
>
> The problem is, this presumes knowledge of Phobos internals,
> which most
> D users probably would have no clue about. How is one supposed
> to know
> which of the 25 overloads should be used in this particular
> case anyway?
> For all one knows, it may be a Phobos bug or something.
>
> Whereas a message like "cannot instantiate S in
> std.blah.internal.func"
> where S is the user-defined struct, would be a good indication
> as to
> what might be wrong without needing to understand how Phobos
> works.
>
>
>> Maybe the compiler could just spew out every possible error
>> for every
>> instantiation, and expect the user to grep, but that's not
>> going to be
>> a pleasant experience.
The compiler could join all the constraints and then simplify it
to create the error message. (eg by creating a Binary Decision
Diagram (BDD))
eg given constraints:
if ( A && B && C )
if ( (A && D) || ( A && E && F) )
if ( E && G )
Suppose A is true but the conditions fail. The compiler could
then write that no templates match because ( B || D || E ) is
false.
More information about the Digitalmars-d
mailing list