Pathological import symbol shadowing

Timon Gehr timon.gehr at gmx.ch
Sun Nov 15 14:24:21 UTC 2020


On 15.11.20 10:06, Walter Bright wrote:
> On 11/13/2020 2:57 PM, H. S. Teoh wrote:
>> Just ran into this today:
>>
>>     void main() {
>>         int[string] aa;
>>         int x;
>>
>>         x = aa.get("abc", 123);    // OK
>>
>>         import std;
>>         x = aa.get("abc", 123);    // Error: template std.net.curl.get 
>> cannot deduce function from argument types ...
>>
>>         import std, object;
>>         x = aa.get("abc", 123);    // OK
>>     }
> 
> Using:
> 
>      import std;
> 
> is a bad idea.
> 

Straw man. Seeing that we're at it: It's also a strange idea to write a 
program that does not perform any I/O. Also, obviously the AA is 
overkill, we could just assign 123 to x, which the snippet does three 
times in a row, but x is never read again!

Writing that code is a bad idea; just use void main(){} instead, it will 
do what you wanted, and without any compilation errors. :o)

I think it's safe to say that the snippet was written to illustrate a 
point and to focus on anything else to the detriment of a discussion of 
that point is just deflection.

If the language was working properly, the code would compile and run 
fine. There is a hole in the design of the language here. There's no 
need to prioritize this particular issue, but I don't understand why you 
don't just acknowledge that this is not how the compiler should behave 
in this situation.

It's not just rejects-valid either, this issue has accepts-invalid cases:

---
import std.stdio;

string readAndLog(string filename){
     import std.file;
     auto text=readText(filename);
     write(filename," read successfully!\n");
     return text;
}

void main(){
     writeln(readAndLog("important_data.txt"));
}
---


More information about the Digitalmars-d mailing list