digitalmars.D - Compiler does not give *any* useful level of error context!
- Matthew (21/21) Jul 30 2004 At the moment I'm getting
- Walter (13/34) Jul 30 2004 Try breaking up line 133 into multiple lines.
- Matthew (48/92) Jul 30 2004 I'm assuming you're making a gag in an to attempt to difuse/dissipate my...
- Walter (37/84) Jul 31 2004 obvious frustrations. (Didn't work, btw, but
- Matthew (4/98) Jul 31 2004 I don't need good ones, I just need some clues. You already have the con...
- Sean Kelly (9/14) Jul 31 2004 Definately. In Matthew's case however, it would have been useful to
- Andy Friesen (8/26) Jul 31 2004 I think it's just an unavoidable side effect: Code that operates on code...
At the moment I'm getting "..\..\std\dtl\functions\predicates.d(133): cannot implicitly convert int to bit" And that's it. It's spectacularly unhelpful stuff. I'm trying to get a minimally compilable distr of DTL, and whatever small changes I made late last night have now escaped me, so I'm just trolling around in the dark with /+ +/. If this was C++, I'd get some helpful additional context and be on it in a flash. Truely, I can track and fix this kind of stuff in C++ in less than a minute. I've been trying to track down this bleeder for the last 45 minutes!!!! Using -v isn't exactly helpful: " parse list_test semantic list_test semantic2 list_test semantic3 list_test ..\..\std\dtl\functions\predicates.d(133): cannot implicitly convert int to bit " Well thanks very much Einstein, I could have told myself that. Please, please, please, PLEASE, can the compiler be amended to give rich contextual information. I'm transgressing a template's definition. Tell me in which instantiation this is happening! Tell me where (file/line) this is happening! If that's inside another template instantiation, tell me all about that! Repeat for up to 10 levels! I don't care if you give me too much info - that's what Perl/Python/Ruby was invented for. But not enough information is no longer tolerable: I cannot continue loosing such huge tracts of my time on these pointless wild-goose chases.
Jul 30 2004
Try breaking up line 133 into multiple lines. "Matthew" <admin.hat stlsoft.dot.org> wrote in message news:cef8jv$jk9$1 digitaldaemon.com...At the moment I'm getting "..\..\std\dtl\functions\predicates.d(133): cannot implicitly convert intto bit"And that's it. It's spectacularly unhelpful stuff. I'm trying to get a minimally compilable distr of DTL, and whatever smallchanges I made late last night have nowescaped me, so I'm just trolling around in the dark with /+ +/. If thiswas C++, I'd get some helpful additional contextand be on it in a flash. Truely, I can track and fix this kind of stuff inC++ in less than a minute. I've been tryingto track down this bleeder for the last 45 minutes!!!! Using -v isn't exactly helpful: " parse list_test semantic list_test semantic2 list_test semantic3 list_test ..\..\std\dtl\functions\predicates.d(133): cannot implicitly convert intto bit" Well thanks very much Einstein, I could have told myself that. Please, please, please, PLEASE, can the compiler be amended to give richcontextual information. I'm transgressing atemplate's definition. Tell me in which instantiation this is happening!Tell me where (file/line) this is happening! Ifthat's inside another template instantiation, tell me all about that!Repeat for up to 10 levels!I don't care if you give me too much info - that's what Perl/Python/Rubywas invented for. But not enough information isno longer tolerable: I cannot continue loosing such huge tracts of my timeon these pointless wild-goose chases.
Jul 30 2004
I'm assuming you're making a gag in an to attempt to difuse/dissipate my obvious frustrations. (Didn't work, btw, but playing football with the boys outside for 30 mins has at least taken the edge off.) Notwithstanding, I'll address your comment seriously. Line 133 looks like, in context: template FunctionPredicate(F, A) { class FunctionPredicate : public Predicate!(A) { public: alias FunctionPredicate class_type; public: this(F f) { m_f = f; } public: bool opCall(argument_type v) { return m_f(v); // !!!! Line 133 !!!! } private: F m_f; }} Splitting a line's not going to do much, is it? Can you ignore the specifics of this case, and address my general point. I am perfectly serious that my recognition/diagnosis of bad-template-instantiation is usually measured in seconds in C++, and almost always measured in minutes in D. Surely you must concede that this is indicative of something "wrong" with D? As I said below, I suggest that it's the lack of contextual information in the compiler, though I must to concede that my own unfamiliarity with the language will play a part. I would simplistically suggest that contextual information would trim the D:C++ "error grok" latency relationship from its current 50-100:1 to about 5-10:1. That's pretty massive, and it might even be better than that once I'm more ensconced in the ways of D. Doubtless many others who are well practised in C++ might experience similar improvements. Is this not something you would want for D? Would this not help reduce the amount of time _you_ must spend in answering ill-tempered semi-rants on the NG, or on boiling down code that others have failed/faultered on? I tell you, if "Try breaking up line 133 into multiple lines." is really your serious response to my predicament, then I can only be thankful that I shave my head with a 2mm setting, otherwise I'd be about tearing my hair out now. FWIW: I dreamt up the bulk of DTL's concept/design in a couple of days, and wrote most of the code in two stints in March (3 days) and two weeks ago (1.5 days), include anything that one might reasonably term "debugging". All told that's less than a week. I'd honestly estimate that I've spent about another 15-20 days over the last 4-5 months just playing around trying to get the compiler to do what I want, or playing /++/ roulette; none of that time has been what one might call design/coding/debugging/testing, just wasted time wandering around a dark room with a bag on my head. As I said to you the other day, the experiences I am having may (or may not) be unique now, but they most certainly will not be once D 1.0 is released. The TMP-world and all their bad-haired friend's will be making a beeline for D armed with arcane lore and recondite code. DTL will seem like child's play in comparison. If D does not handle complex concepts, or fail more gracefully/informatively, it'll be saddled with a bad name for generics that may be *very* hard to shake. Given the amount of time and effort I'm investing in D, I don't want that to happen. I want D to kick arse in generics, and I'd quite like DTL to be seen favourably. <g> Can you give me a switch to flick to turn dmd.exe into a garrulous little puppy? Please. "Walter" <newshound digitalmars.com> wrote in message news:cefc3j$ko1$1 digitaldaemon.com...Try breaking up line 133 into multiple lines. "Matthew" <admin.hat stlsoft.dot.org> wrote in message news:cef8jv$jk9$1 digitaldaemon.com...At the moment I'm getting "..\..\std\dtl\functions\predicates.d(133): cannot implicitly convert intto bit"And that's it. It's spectacularly unhelpful stuff. I'm trying to get a minimally compilable distr of DTL, and whatever smallchanges I made late last night have nowescaped me, so I'm just trolling around in the dark with /+ +/. If thiswas C++, I'd get some helpful additional contextand be on it in a flash. Truely, I can track and fix this kind of stuff inC++ in less than a minute. I've been tryingto track down this bleeder for the last 45 minutes!!!! Using -v isn't exactly helpful: " parse list_test semantic list_test semantic2 list_test semantic3 list_test ..\..\std\dtl\functions\predicates.d(133): cannot implicitly convert intto bit" Well thanks very much Einstein, I could have told myself that. Please, please, please, PLEASE, can the compiler be amended to give richcontextual information. I'm transgressing atemplate's definition. Tell me in which instantiation this is happening!Tell me where (file/line) this is happening! Ifthat's inside another template instantiation, tell me all about that!Repeat for up to 10 levels!I don't care if you give me too much info - that's what Perl/Python/Rubywas invented for. But not enough information isno longer tolerable: I cannot continue loosing such huge tracts of my timeon these pointless wild-goose chases.
Jul 30 2004
"Matthew" <admin stlsoft.dot.dot.dot.dot.org> wrote in message news:cefeq2$lde$1 digitaldaemon.com...I'm assuming you're making a gag in an to attempt to difuse/dissipate myobvious frustrations. (Didn't work, btw, butplaying football with the boys outside for 30 mins has at least taken theedge off.) No, I was serious. Sometimes people fill up a line with stuff, and breaking it up can help.Notwithstanding, I'll address your comment seriously. Line 133 looks like, in context: template FunctionPredicate(F, A) { class FunctionPredicate : public Predicate!(A) { public: alias FunctionPredicate class_type; public: this(F f) { m_f = f; } public: bool opCall(argument_type v) { return m_f(v); // !!!! Line 133 !!!! } private: F m_f; }} Splitting a line's not going to do much, is it?I would guess that the problem is that m_f() returns an int. Or perhaps v is an int, and m_f() takes a bit as an argument.Can you ignore the specifics of this case, and address my general point. Iam perfectly serious that myrecognition/diagnosis of bad-template-instantiation is usually measured inseconds in C++, and almost always measured inminutes in D. Surely you must concede that this is indicative of something"wrong" with D? As I said below, I suggestthat it's the lack of contextual information in the compiler, though Imust to concede that my own unfamiliarity withthe language will play a part. I would simplistically suggest that contextual information would trim theD:C++ "error grok" latency relationship fromits current 50-100:1 to about 5-10:1. That's pretty massive, and it mighteven be better than that once I'm moreensconced in the ways of D. Doubtless many others who are well practisedin C++ might experience similar improvements.Is this not something you would want for D? Would this not help reduce theamount of time _you_ must spend in answeringill-tempered semi-rants on the NG, or on boiling down code that othershave failed/faultered on?I tell you, if "Try breaking up line 133 into multiple lines." is reallyyour serious response to my predicament, then Ican only be thankful that I shave my head with a 2mm setting, otherwiseI'd be about tearing my hair out now.FWIW: I dreamt up the bulk of DTL's concept/design in a couple of days,and wrote most of the code in two stints inMarch (3 days) and two weeks ago (1.5 days), include anything that onemight reasonably term "debugging". All toldthat's less than a week. I'd honestly estimate that I've spent aboutanother 15-20 days over the last 4-5 months justplaying around trying to get the compiler to do what I want, or playing/++/ roulette; none of that time has been whatone might call design/coding/debugging/testing, just wasted time wanderingaround a dark room with a bag on my head.As I said to you the other day, the experiences I am having may (or maynot) be unique now, but they most certainly willnot be once D 1.0 is released. The TMP-world and all their bad-hairedfriend's will be making a beeline for D armed witharcane lore and recondite code. DTL will seem like child's play incomparison. If D does not handle complex concepts, orfail more gracefully/informatively, it'll be saddled with a bad name forgenerics that may be *very* hard to shake.Given the amount of time and effort I'm investing in D, I don't want thatto happen. I want D to kick arse in generics,and I'd quite like DTL to be seen favourably. <g> Can you give me a switch to flick to turn dmd.exe into a garrulous littlepuppy? Please. Good error messages are an art, they take time to develop. C++ has been working on trying to improve template error messages for over 10 years now, with some success, even though C++ is still *notorious* for very obtuse error messages. Error messages in DMD are slowly getting better. Also, don't underestimate the familiarity you might be with the particular C++ tool you are using. That can make a big difference in figuring out why a particular message is happening.
Jul 31 2004
"Walter" <newshound digitalmars.com> wrote in message news:cefhan$ndo$2 digitaldaemon.com..."Matthew" <admin stlsoft.dot.dot.dot.dot.org> wrote in message news:cefeq2$lde$1 digitaldaemon.com...I don't need good ones, I just need some clues. You already have the context somewhere in your state machines - just dump it out.I'm assuming you're making a gag in an to attempt to difuse/dissipate myobvious frustrations. (Didn't work, btw, butplaying football with the boys outside for 30 mins has at least taken theedge off.) No, I was serious. Sometimes people fill up a line with stuff, and breaking it up can help.Notwithstanding, I'll address your comment seriously. Line 133 looks like, in context: template FunctionPredicate(F, A) { class FunctionPredicate : public Predicate!(A) { public: alias FunctionPredicate class_type; public: this(F f) { m_f = f; } public: bool opCall(argument_type v) { return m_f(v); // !!!! Line 133 !!!! } private: F m_f; }} Splitting a line's not going to do much, is it?I would guess that the problem is that m_f() returns an int. Or perhaps v is an int, and m_f() takes a bit as an argument.Can you ignore the specifics of this case, and address my general point. Iam perfectly serious that myrecognition/diagnosis of bad-template-instantiation is usually measured inseconds in C++, and almost always measured inminutes in D. Surely you must concede that this is indicative of something"wrong" with D? As I said below, I suggestthat it's the lack of contextual information in the compiler, though Imust to concede that my own unfamiliarity withthe language will play a part. I would simplistically suggest that contextual information would trim theD:C++ "error grok" latency relationship fromits current 50-100:1 to about 5-10:1. That's pretty massive, and it mighteven be better than that once I'm moreensconced in the ways of D. Doubtless many others who are well practisedin C++ might experience similar improvements.Is this not something you would want for D? Would this not help reduce theamount of time _you_ must spend in answeringill-tempered semi-rants on the NG, or on boiling down code that othershave failed/faultered on?I tell you, if "Try breaking up line 133 into multiple lines." is reallyyour serious response to my predicament, then Ican only be thankful that I shave my head with a 2mm setting, otherwiseI'd be about tearing my hair out now.FWIW: I dreamt up the bulk of DTL's concept/design in a couple of days,and wrote most of the code in two stints inMarch (3 days) and two weeks ago (1.5 days), include anything that onemight reasonably term "debugging". All toldthat's less than a week. I'd honestly estimate that I've spent aboutanother 15-20 days over the last 4-5 months justplaying around trying to get the compiler to do what I want, or playing/++/ roulette; none of that time has been whatone might call design/coding/debugging/testing, just wasted time wanderingaround a dark room with a bag on my head.As I said to you the other day, the experiences I am having may (or maynot) be unique now, but they most certainly willnot be once D 1.0 is released. The TMP-world and all their bad-hairedfriend's will be making a beeline for D armed witharcane lore and recondite code. DTL will seem like child's play incomparison. If D does not handle complex concepts, orfail more gracefully/informatively, it'll be saddled with a bad name forgenerics that may be *very* hard to shake.Given the amount of time and effort I'm investing in D, I don't want thatto happen. I want D to kick arse in generics,and I'd quite like DTL to be seen favourably. <g> Can you give me a switch to flick to turn dmd.exe into a garrulous littlepuppy? Please. Good error messages are an art, they take time to develop. C++ has been working on trying to improve template error messages for over 10 years now, with some success, even though C++ is still *notorious* for very obtuse error messages. Error messages in DMD are slowly getting better.Also, don't underestimate the familiarity you might be with the particular C++ tool you are using. That can make a big difference in figuring out why a particular message is happening.Maybe, but I use more than 20 different C++ compilers, and can make sense of almost all of their output.
Jul 31 2004
Walter wrote:Good error messages are an art, they take time to develop. C++ has been working on trying to improve template error messages for over 10 years now, with some success, even though C++ is still *notorious* for very obtuse error messages. Error messages in DMD are slowly getting better.Definately. In Matthew's case however, it would have been useful to know the full type of FunctionPredicate and the context in which opCall was called. Or heck, even just the context. Sure you can always find the offending line, but why spend 30 minutes doing text searches when the compiler can tell you where to look? Sometimes I think templates were just invented to make compiler writer's lives difficult ;) Sean
Jul 31 2004
Sean Kelly wrote:Walter wrote:I think it's just an unavoidable side effect: Code that operates on code is always hard. (sure seems that way, anyhow) It's true even in Python, where the only difference is that you're creating instances of a class called 'type'. (fun sidenote: the 'type' class is its own type, and therefore an instance of itself) -- andyGood error messages are an art, they take time to develop. C++ has been working on trying to improve template error messages for over 10 years now, with some success, even though C++ is still *notorious* for very obtuse error messages. Error messages in DMD are slowly getting better.Definately. In Matthew's case however, it would have been useful to know the full type of FunctionPredicate and the context in which opCall was called. Or heck, even just the context. Sure you can always find the offending line, but why spend 30 minutes doing text searches when the compiler can tell you where to look? Sometimes I think templates were just invented to make compiler writer's lives difficult ;)
Jul 31 2004