www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Error messages for newbies survey

reply "bearophile" <bearophileHUGS lycos.com> writes:
  From Reddit, a nice survey:
http://www.reddit.com/r/coding/comments/118ssp/honours_student_at_my_university_is_doing_a/


For my Computer Science Honours research project, I am currently 
investigating ways of improving the terse, technical error 
messages given by traditional compilers to make them more useful 
to novice programmers. As part of this research, I have designed 
this survey to help determine which types of common novice 
errors are inadequately reported by a traditional compiler and 
to gather ideas on how they should be reported to a novice.<

http://www.esurveyspro.com/Survey.aspx?id=23752434-e25f-4a48-86bf-bb2634e1b5ce So this survey is not to improve error messages in general, it's specific for newbies. So the error situations shown in the survey are not typical for C programmers. Below some of the examples converted to D, with their relative error messages. --------------------------------- void main() { int height = 25; int width = 50; int area = height.width; } temp.d(4): Error: undefined identifier 'width' --------------------------------- void main() { int x = 3; int y = 2(x + 1); } temp.d(3): Error: function expected before (), not 2 of type int --------------------------------- int main() { for (int i = 0, i < 10, i++) { // do something } return 0; } temp.d(2): Error: semicolon expected, not '<' temp.d(2): Error: expression expected, not '<' temp.d(2): Error: found '10' when expecting ';' following for condition temp.d(2): Error: expression expected, not ',' temp.d(2): Error: found 'i' when expecting ')' temp.d(2): Error: expression expected, not ')' temp.d(2): Error: found '{' when expecting ';' following statement temp.d(5): Error: Declaration expected, not 'return' temp.d(6): Error: unrecognized declaration --------------------------------- void main() { int value = 0; while (value < 10) do { // do something value++; } } temp.d(8): Error: found '}' when expecting 'while' temp.d(8): Error: found 'EOF' when expecting '(' temp.d(8): Error: expression expected, not 'EOF' temp.d(8): Error: found 'EOF' when expecting ')' temp.d(8): Deprecation: do-while statement without terminating ; is deprecated temp.d(8): Error: found 'EOF' when expecting '}' following compound statement --------------------------------- void main() { double value = 1; switch (value) { case 1: // do something break; } } temp.d(4): Error: 'value' is not of integral type, it is a double temp.d(5): Error: case must be a string or an integral constant, not 1 temp.d(4): Deprecation: non-final switch statement without a default is deprecated --------------------------------- void main() { int i = 0; if (i => 0) { // do something } } temp.d(4): Error: expression __lambda2 of type void does not have a boolean value --------------------------------- void toDouble(int integer) { return cast(double)integer; } int main() { double x = toDouble(1); return 0; } temp.d(2): Error: cast has no effect in expression (cast(double)integer) temp.d(2): Error: cannot return non-void from void function temp.d(5): Error: expression toDouble(1) is void and has no value --------------------------------- int f(int x) { return x * x - x + 1; } int main() { int x = 5; x = f; return 0; } temp.d(6): Error: not a property f --------------------------------- import std.math; int main() { double x, y; x = 0.5; sin(x) = y; return 0; } temp.d(5): Error: sin(cast(real)x) is not an lvalue --------------------------------- void main() { int arr[10]; for (int i = 0; i < 10; i++) { arr(i) = 0; } } temp.d(5): Error: function expected before (), not arr of type int[10u] --------------------------------- import std.stdio; int main() { int i = 1; printf("%f\n", i); return 0; } 0.000000 (DMD gives no warning here) ================================= Let me add few basic mistakes specific for D, and the error messages they generate: void main() { foreach (i, 0 .. 10) {} } temp.d(2): Error: basic type expected, not 0 temp.d(2): Error: no identifier for declarator int temp.d(2): Error: found '0' when expecting ';' temp.d(2): Error: expression expected, not '..' temp.d(2): Error: found '10' when expecting ')' temp.d(2): Error: found ')' instead of statement temp.d(3): Error: unrecognized declaration --------------------------------- void main() { int[10] data; foreach (i, x, data) {} } temp.d(3): Error: no identifier for declarator data temp.d(3): Error: found ')' when expecting ';' temp.d(4): Error: found '}' when expecting ')' temp.d(4): Error: found 'EOF' instead of statement temp.d(4): Error: found 'EOF' when expecting '}' following compound statement --------------------------------- void main() { int[10] data; foreach (i; x; data) {} } temp.d(3): Error: found ';' when expecting ')' temp.d(3): Error: found ')' when expecting ';' following statement --------------------------------- void main() { int[10] data; foreach (i; x, data) {} } temp.d(3): Error: undefined identifier x --------------------------------- struct Foo { int x; } void main() { Foo[10] data; foreach (f; data) f.x++; } [No error messages nor warnings] --------------------------------- Some of those D error messages are sub-optimal for new programmers. Bye, bearophile
Oct 10 2012
next sibling parent Don Clugston <dac nospam.com> writes:
On 10/10/12 14:09, bearophile wrote:
   From Reddit, a nice survey:
 http://www.reddit.com/r/coding/comments/118ssp/honours_student_at_my_university_is_doing_a/



 For my Computer Science Honours research project, I am currently
 investigating ways of improving the terse, technical error messages
 given by traditional compilers to make them more useful to novice
 programmers. As part of this research, I have designed this survey to
 help determine which types of common novice errors are inadequately
 reported by a traditional compiler and to gather ideas on how they
 should be reported to a novice.<

http://www.esurveyspro.com/Survey.aspx?id=23752434-e25f-4a48-86bf-bb2634e1b5ce So this survey is not to improve error messages in general, it's specific for newbies. So the error situations shown in the survey are not typical for C programmers. Below some of the examples converted to D, with their relative error messages.

Many of the things you report are examples of bug 8684. Please file bug reports for any others you think are important.
Oct 10 2012
prev sibling next sibling parent "ixid" <nuaccount gmail.com> writes:
On Wednesday, 10 October 2012 at 12:33:23 UTC, bearophile wrote:
  From Reddit, a nice survey:
 http://www.reddit.com/r/coding/comments/118ssp/honours_student_at_my_university_is_doing_a/


For my Computer Science Honours research project, I am 
currently investigating ways of improving the terse, technical 
error messages given by traditional compilers to make them more 
useful to novice programmers. As part of this research, I have 
designed this survey to help determine which types of common 
novice errors are inadequately reported by a traditional 
compiler and to gather ideas on how they should be reported to 
a novice.<


Maybe I'm not quite as novice as most of those errors but by far the most frustrating thing is unhandled exceptions as a scrub. You just get thrown out of the program with no idea what caused it to sulk and little idea how to diagnose and fix it, making things like stack overflows and so on really irritating as a beginner.
Oct 10 2012
prev sibling parent "bearophile" <bearophileHUGS lycos.com> writes:
Don Clugston:

 Many of the things you report are examples of bug 8684. Please 
 file bug reports for any others you think are important.

I have added some cases here: http://d.puremagic.com/issues/show_bug.cgi?id=8684 Add added a new report: http://d.puremagic.com/issues/show_bug.cgi?id=8807 Bye, bearophile
Oct 12 2012