August 13, 2012
I seriously consider writing a simple postprocessor for dmd's output.
Once dmd became able to recover from errors and crawl on it started to produce horrific amounts of redundant text on failure.

Observe for instance that there are only 6 + 2 = 8 lines of interest:

uni.d(3699): Error: template instance uni.icmp!(char,wchar) error instantiating
uni.d(3683): Error: undefined identifier fullCasedMatch
uni.d(3686): Error: undefined identifier fullCasedMatch
uni.d(3699): Error: template instance uni.icmp!(char,dchar) error instantiating
uni.d(3683): Error: undefined identifier fullCasedMatch
uni.d(3686): Error: undefined identifier fullCasedMatch
uni.d(3699): Error: template instance uni.icmp!(wchar,char) error instantiating
uni.d(3683): Error: undefined identifier fullCasedMatch
uni.d(3686): Error: undefined identifier fullCasedMatch
uni.d(3699): Error: template instance uni.icmp!(wchar,wchar) error instantiating
uni.d(3683): Error: undefined identifier fullCasedMatch
uni.d(3686): Error: undefined identifier fullCasedMatch
uni.d(3699): Error: template instance uni.icmp!(wchar,dchar) error instantiating
uni.d(3683): Error: undefined identifier fullCasedMatch
uni.d(3686): Error: undefined identifier fullCasedMatch
uni.d(3699): Error: template instance uni.icmp!(dchar,char) error instantiating

I'd ideally see this:

uni.d(3683): Error: undefined identifier fullCasedMatch
uni.d(3686): Error: undefined identifier fullCasedMatch
--- !! During instantiation of ---
uni.d(3699): template instance uni.icmp!(char,dchar)
uni.d(3699): template instance uni.icmp!(char,wchar)
uni.d(3699): template instance uni.icmp!(char,dchar)
uni.d(3699): template instance uni.icmp!(wchar,wchar)
uni.d(3699): template instance uni.icmp!(wchar,dchar)
uni.d(3699): template instance uni.icmp!(dchar,char)
-------
... other errors

Other food for thought is to try to indicate explicitly which errors
are related vs unrelated, which are collateral, like failed template instantiation that rolls out the whole path of failure (but one have to read the text carefully to get where it starts).

-- 
Dmitry Olshansky
August 14, 2012
On 13/08/12 18:47, Dmitry Olshansky wrote:
> I seriously consider writing a simple postprocessor for dmd's output.
> Once dmd became able to recover from errors and crawl on it started to
> produce horrific amounts of redundant text on failure.
>
> Observe for instance that there are only 6 + 2 = 8 lines of interest:

Spurious or repeated error messages should be considered to be bugs.
Please put test cases in Bugzilla. A long time ago, the compiler used to spew reams of garbage all the time. Now it rarely happens.

> Other food for thought is to try to indicate explicitly which errors
> are related vs unrelated, which are collateral, like failed template
> instantiation that rolls out the whole path of failure (but one have to
> read the text carefully to get where it starts).

That's already happening. Supplemental messages don't have the word 'Error' at the start of the error message.
There are still cases where

August 14, 2012
On 14/08/12 08:59, Don Clugston wrote:
> On 13/08/12 18:47, Dmitry Olshansky wrote:
>> I seriously consider writing a simple postprocessor for dmd's output.
>> Once dmd became able to recover from errors and crawl on it started to
>> produce horrific amounts of redundant text on failure.
>>
>> Observe for instance that there are only 6 + 2 = 8 lines of interest:
>
> Spurious or repeated error messages should be considered to be bugs.
> Please put test cases in Bugzilla. A long time ago, the compiler used to
> spew reams of garbage all the time. Now it rarely happens.
>
>> Other food for thought is to try to indicate explicitly which errors
>> are related vs unrelated, which are collateral, like failed template
>> instantiation that rolls out the whole path of failure (but one have to
>> read the text carefully to get where it starts).
>
> That's already happening. Supplemental messages don't have the word
> 'Error' at the start of the error message.

One fairly easy way to solve this, would be that once a template *instantiation* has failed, the template *definition* would be marked as doubtful, and any further instantiation using that definition would have all error messages suppressed. If an error occurred, a single error would be produced stating that the template instantiation failed.

The downside would be that if the template instantiation failed for a completely different reason the second time, its root cause error would not be shown. But this latest release is the only time such errors have been shown anyway.

August 14, 2012
On Tuesday, 14 August 2012 at 08:48:14 UTC, Don Clugston wrote:
> On 14/08/12 08:59, Don Clugston wrote:
>> On 13/08/12 18:47, Dmitry Olshansky wrote:
>>> I seriously consider writing a simple postprocessor for dmd's output.
>>> Once dmd became able to recover from errors and crawl on it started to
>>> produce horrific amounts of redundant text on failure.
>>>
>>> Observe for instance that there are only 6 + 2 = 8 lines of interest:
>>
>> Spurious or repeated error messages should be considered to be bugs.
>> Please put test cases in Bugzilla. A long time ago, the compiler used to
>> spew reams of garbage all the time. Now it rarely happens.
>>
>>> Other food for thought is to try to indicate explicitly which errors
>>> are related vs unrelated, which are collateral, like failed template
>>> instantiation that rolls out the whole path of failure (but one have to
>>> read the text carefully to get where it starts).
>>
>> That's already happening. Supplemental messages don't have the word
>> 'Error' at the start of the error message.
>
> One fairly easy way to solve this, would be that once a template *instantiation* has failed, the template *definition* would be marked as doubtful, and any further instantiation using that definition would have all error messages suppressed. If an error occurred, a single error would be produced stating that the template instantiation failed.
>
> The downside would be that if the template instantiation failed for a completely different reason the second time, its root cause error would not be shown. But this latest release is the only time such errors have been shown anyway.

Personally I loved the way Turbo Pascal used to work with compile failure on the first error.

Thanks to the fast compile times, it was easier and faster to fix-compile-find_next_error, than try to sort out the real errors from a dump of error messages.

But I seem to be in the minority regarding compiler error messages.

--
Paulo
August 14, 2012
On 14/08/12 11:32, Paulo Pinto wrote:
> On Tuesday, 14 August 2012 at 08:48:14 UTC, Don Clugston wrote:
>> On 14/08/12 08:59, Don Clugston wrote:
>>> On 13/08/12 18:47, Dmitry Olshansky wrote:
>>>> I seriously consider writing a simple postprocessor for dmd's output.
>>>> Once dmd became able to recover from errors and crawl on it started to
>>>> produce horrific amounts of redundant text on failure.
>>>>
>>>> Observe for instance that there are only 6 + 2 = 8 lines of interest:
>>>
>>> Spurious or repeated error messages should be considered to be bugs.
>>> Please put test cases in Bugzilla. A long time ago, the compiler used to
>>> spew reams of garbage all the time. Now it rarely happens.
>>>
>>>> Other food for thought is to try to indicate explicitly which errors
>>>> are related vs unrelated, which are collateral, like failed template
>>>> instantiation that rolls out the whole path of failure (but one have to
>>>> read the text carefully to get where it starts).
>>>
>>> That's already happening. Supplemental messages don't have the word
>>> 'Error' at the start of the error message.
>>
>> One fairly easy way to solve this, would be that once a template
>> *instantiation* has failed, the template *definition* would be marked
>> as doubtful, and any further instantiation using that definition would
>> have all error messages suppressed. If an error occurred, a single
>> error would be produced stating that the template instantiation failed.
>>
>> The downside would be that if the template instantiation failed for a
>> completely different reason the second time, its root cause error
>> would not be shown. But this latest release is the only time such
>> errors have been shown anyway.
>
> Personally I loved the way Turbo Pascal used to work with compile
> failure on the first error.
>
> Thanks to the fast compile times, it was easier and faster to
> fix-compile-find_next_error, than try to sort out the real errors from a
> dump of error messages.

To the best of my knowledge, DMD gives very few error messages which are not real. Every release, I eliminate a couple more spurious ones. It's starting to be difficult to find them.

Seriously, if you are finding ANY error messages for things which are not real errors, that is a bug.


>
> But I seem to be in the minority regarding compiler error messages.
>
> --
> Paulo


August 14, 2012
On 8/14/12 5:32 AM, Paulo Pinto wrote:
> Personally I loved the way Turbo Pascal used to work with compile
> failure on the first error.
>
> Thanks to the fast compile times, it was easier and faster to
> fix-compile-find_next_error, than try to sort out the real errors from a
> dump of error messages.
>
> But I seem to be in the minority regarding compiler error messages.

I guess the "head" command can be of use here!

Andrei
August 14, 2012
On 14-Aug-12 12:48, Don Clugston wrote:
> On 14/08/12 08:59, Don Clugston wrote:
>> On 13/08/12 18:47, Dmitry Olshansky wrote:
>>> I seriously consider writing a simple postprocessor for dmd's output.
>>> Once dmd became able to recover from errors and crawl on it started to
>>> produce horrific amounts of redundant text on failure.
>>>
>>> Observe for instance that there are only 6 + 2 = 8 lines of interest:
>>
>> Spurious or repeated error messages should be considered to be bugs.
>> Please put test cases in Bugzilla. A long time ago, the compiler used to
>> spew reams of garbage all the time. Now it rarely happens.
>>

Will do.

>>> Other food for thought is to try to indicate explicitly which errors
>>> are related vs unrelated, which are collateral, like failed template
>>> instantiation that rolls out the whole path of failure (but one have to
>>> read the text carefully to get where it starts).
>>
>> That's already happening. Supplemental messages don't have the word
>> 'Error' at the start of the error message.
>
> One fairly easy way to solve this, would be that once a template
> *instantiation* has failed, the template *definition* would be marked as
> doubtful, and any further instantiation using that definition would have
> all error messages suppressed. If an error occurred, a single error
> would be produced stating that the template instantiation failed.
>

I think it would be nice to merge different template instantiation failures with identical lists of error messages (or simply same lines). In my case all of them have the same error list (2 lines), in general it may end up having few different groups of failed instantiations

> The downside would be that if the template instantiation failed for a
> completely different reason the second time, its root cause error would
> not be shown.

Yes, see the idea above.
August 17, 2012
Am Tue, 14 Aug 2012 12:15:35 +0200
schrieb Don Clugston <dac@nospam.com>:

> Seriously, if you are finding ANY error messages for things which are not real errors, that is a bug.

What about errors that are a result of erroneous types being used. Sometimes I read foo!(bar, _error_) in the error output and wonder if that helps me any, since the error is obviously farther above.

-- 
Marco

August 17, 2012
On 08/17/2012 02:17 PM, Marco Leise wrote:
> Am Tue, 14 Aug 2012 12:15:35 +0200
> schrieb Don Clugston<dac@nospam.com>:
>
>> Seriously, if you are finding ANY error messages for things which are
>> not real errors, that is a bug.
>
> What about errors that are a result of erroneous types being
> used. Sometimes I read foo!(bar, _error_) in the error output
> and wonder if that helps me any, since the error is obviously
> farther above.
>

The user should never see _error_.
Top | Discussion index | About this forum | D home