http://d.puremagic.com/issues/show_bug.cgi?id=5309
Summary: Add language support for external D symbols refs Product: D Version: D2 Platform: All OS/Version: Windows Status: NEW Severity: enhancement Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: ah0801...@yahoo.com --- Comment #0 from Austin Hastings <ah0801...@yahoo.com> 2010-12-02 05:01:21 PST --- Presently there is no way that I can find to declare a D symbol in another module. That is, this doesn't work: ========== module m1; import some.type; // defines SomeType extern(D) SomeType m2.var; void foo() { m2.var.doSomething(); } ========== The reason I want this is that I am generating D source code programmatically - a file full of tables. And I am using DMD's dependency reporting facility to generate build rules for use in a Makefile. Because of the build rules, all of the source code has to be valid enough to satisfy DMD at all times. Including when the generated code files do not exist (after a make clean, for example). That means that I cannot have an import of a file which does not exist, so I cannot simply do import generated.module; D *does* have support for extern (C), and I could certainly use that. But that eliminates the benefit of namespacing in the first place. What I would like is a way to provide a module definition that includes the declaration of an external D object. This way my code could import that module definition, and the build system would be happy. And the generated code could be generated, compiled, and added to the library later on, and the whole thing would work together and sing Kumbaya and live in peace and harmony, modulo the occasional lion attack. Frustratingly, DMD already HAS this: the .di file. So that's what I'm using. It works pretty much exactly the way I want, except of course that I'm not generating the .di file from the .d source (which is itself a generated file). Sadly, though, the spec says (http://www.digitalmars.com/d/2.0/dmd-linux.html#interface_files): """ D interface files bear some analogous similarities to C++ header files. But they are not required in the way that C++ header files are, and they are not part of the D language. They are a feature of the compiler, and serve only as an optimization of the build process. """ The important part being "they are not part of the D language." I'm sure that I'm not the first, or even the second, person to think of generating data tables in source files. So I'm requesting either (1) what is the part-of-the-D-language way to do this; or (2) please add the .di mechanism, or something very much like it, to the D language proper. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------