Walter:

> While it's nice to demangle the names, and optlink does so for C++ names, it 
> doesn't reduce the confusion about what the linker is doing. Surprisingly, I 
> see 
> these questions not just from newbies, but regularly from people with 10+ 
> years 
> of experience.

What the linker is doing is something that conceptually is not complex, so an 
average programmer is supposed to understand what are the problems a linker may 
encounter in its work.

Yet clearly some newbie programmers don't understand those linker errors, this 
is one recent example (and I have seen two or three other similar questions):
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learn&article_id=22731

Quotation from that post:

> test.d:(.text._Dmain+0x9): undefined reference to `_D7libtest3funFiZi'
> collect2: ld returned 1 exit status
> --- errorlevel 1
> 
> I have no troubles with standard libraries, just mine's. I have the dmd
> 2.0.50 compiler on a GNU/Linux 64bit system. Any idea?

A better error message is probably able to avoid similar requests for help. A 
better error message spares the need for the newbie D programmer to know what 
the linker is doing (eventually to program in D seriously you need to know why 
the linker is working, but asking such knowledge from day zero is not wise, 
especially because some future D programmer may come from JavaScript, Python, 
Ruby, Java, etc where there is no experience about linkers).

Recently you have modified the error messages, so this D2 program:

void main() {
    writeln("Hello world!");
}

Now gives an error message useful for the D newbie:

test.d(2): Error: 'writeln' is not defined, perhaps you need to import 
std.stdio; ?

Helping the newbie with the linker errors will be similarly useful (even better 
is to DMD to find its needed modules by itself on default, unless a compiler 
switch is used to disable this feature. I think this solves the problem. It's 
good for newbies, it's good for small or script-like D programs, and for more 
serious usages of D you just need to add the disabling switch in the command 
line).

Bye,
bearophile

Reply via email to