"Jonathan M Davis" <jmdavisp...@gmx.com> wrote in message 
news:mailman.742.1327344456.16222.digitalmar...@puremagic.com...
> On Monday, January 23, 2012 10:08:50 Walter Bright wrote:
>> On 1/23/2012 5:08 AM, Iain Buclaw wrote:
>> > Walter, what are your views on emitting the names of aliased types to
>> > debug?
>>
>> I don't really have an opinion on it, except that generally when I'm
>> debugging I'm interested in what a type really is, not the layer over it.

That's a pain in the ass for library users. For example, Goldie uses a lot 
of type sugar so that a nonteminal generated from the rule:

     <Foo> ::= <Bar> ';'

Is usually referred to as type:

     A: Token_myLang!("<Foo>", "<Bar>", ";")

Instead of:

     B: Token_myLang!(
        "<Foo>",
        Token_myLang!(SymbolType.NonTerminal, "<Bar>"),
        Token_myLang!(SymbolType.Terminal, ";") )

     or:

     C: _Token_myLang!("<Foo>", 47); // Rule ID#

The "B" is a rarely-needed unsugared version (which is guaranteed to be 
unambiguous with other symbols in th grammar). And "C" (or something similar 
to it) is the true underlying type that's intended purely as an 
implementation detail - *NOT* for user consumption.

The policy of showing types de-aliased breaks proper encapsulation and just 
detroys all of the above whenever there's a type error (which is the whole 
point of having those types in the first place).

>
> I usually want the aliased type.

Same here. I usually find it far more relevent to the code the compiler's 
referring too.

The current way is like having error messages show mangled names or talking 
in terms of the generated assembly instructions: It totally breaks out of 
the proper context and level-of-abstraction.

> I can look up what the alias is, but I can't
> know that something is using an alias if the alias is gone.
>

I hadn't thought of that, that's a good point, too.


Reply via email to