Re: Why should file names intended for executables be valid identifiers?
On Thursday, 17 December 2015 at 04:26:04 UTC, Shriramana Sharma wrote: Sorry but I don't get this fully: can't a hyphen be part of such mangled names? I'm actually not sure but I have never seen it done. And any reflection of the module name would also be just a string which need not be a valid identifier no? Reflection would be a string, but it is often mixed in and the other uses like name disambiguation is still identifier.
Re: Why should file names intended for executables be valid identifiers?
On Tuesday, 15 December 2015 at 03:31:18 UTC, Shriramana Sharma wrote: I expect it should not be difficult for the compiler to see that this D file is not a module being imported by anything else or even being compiled to a library which would need to be later imported. In which case, why does it insist that the file should be given a valid module name? All files in D are modules. The only thing special about the "main" module is that it exports a function called `main`, which druntime calls at startup. It's like asking why you need to have a class in Java that only contains `public static void main(...)`, instead of just having the main function itself; it's simply how D is designed, and it reduces the number of special cases. Though after compiling, module names are irrelevant; you can name the binary whatever you want: `dmd -o whatever-filename.exe my_module.d` Name mangling is irrelevant; you can't have a dash in the module name because it would make certain code ambiguous (ex. `foo.my-module.bar`: is one module field reference or a subtraction between two field references?)
Re: Why should file names intended for executables be valid identifiers?
On 12/16/2015 08:26 PM, Shriramana Sharma wrote: > can't a hyphen be part of such mangled names? Perhaps my response is naive but hyphen means subtraction (or minus). If the grammar is context-free then it cannot appear in a name, no? Ali
Re: Why should file names intended for executables be valid identifiers?
Adam D. Ruppe wrote: > It still has a module name that can be used in reflection, must > be used in name disambiguation (at the linker level if nothing > else, any functions are mangled with the module name so they > don't conflict with C functions with the same name), and other > things. Sorry but I don't get this fully: can't a hyphen be part of such mangled names? Aren't they just strings that the linker hashes or something? (My knowledge of compiler/executable internals is limited.) And any reflection of the module name would also be just a string which need not be a valid identifier no? -- Shriramana Sharma, Penguin #395953
Re: Why should file names intended for executables be valid identifiers?
On 2015-12-17 05:26, Shriramana Sharma wrote: Sorry but I don't get this fully: can't a hyphen be part of such mangled names? Aren't they just strings that the linker hashes or something? (My knowledge of compiler/executable internals is limited.) I'm not sure about a hyphen but a dollar sign is allowed for example. And any reflection of the module name would also be just a string which need not be a valid identifier no? I would guess it's to simplify the compiler. Funny thing: Ruby allows you to have names of methods that you cannot declare and cannot call :). The trick is to use metaprogramming and reflection to declare and call the methods. -- /Jacob Carlborg
Re: Why should file names intended for executables be valid identifiers?
On Tuesday, 15 December 2015 at 03:31:18 UTC, Shriramana Sharma wrote: For instance, hyphens are often used as part of executable names on Linux, but if I do this: $ dmd usage-printer.d I get the following error: usage-printer.d: Error: module usage-printer has non-identifier characters in filename, use module declaration instead Try adding the line: module usage_printer; at the top of the file. This overrides the default module name (same as file name). --Jon
Re: Why should file names intended for executables be valid identifiers?
On Tuesday, 15 December 2015 at 03:31:18 UTC, Shriramana Sharma wrote: I understand that module names need to be valid identifiers in that other modules would need to import them. But when a file is intended to be just an executable, why is it mandatory to give it a module declaration with a valid identifier? It still has a module name that can be used in reflection, must be used in name disambiguation (at the linker level if nothing else, any functions are mangled with the module name so they don't conflict with C functions with the same name), and other things. Just use the module declaration, you can always call it something like `module main;` generically if you know there is just one in your file.
Why should file names intended for executables be valid identifiers?
I understand that module names need to be valid identifiers in that other modules would need to import them. But when a file is intended to be just an executable, why is it mandatory to give it a module declaration with a valid identifier? For instance, hyphens are often used as part of executable names on Linux, but if I do this: $ dmd usage-printer.d I get the following error: usage-printer.d: Error: module usage-printer has non-identifier characters in filename, use module declaration instead I expect it should not be difficult for the compiler to see that this D file is not a module being imported by anything else or even being compiled to a library which would need to be later imported. In which case, why does it insist that the file should be given a valid module name? -- Shriramana Sharma, Penguin #395953