digitalmars.D.learn - Are public/private imports implemented?
- Ary Borenszweig (16/16) Jan 21 2008 Again, testing some Descent semantic code, I was getting errors on
- Tyro[a.c.edwards] (8/30) Jan 21 2008 module imports are private by default. This means that since you
- Bill Baxter (5/35) Jan 21 2008 The truth seems to be more that fully qualified names are always made
- Tyro[a.c.edwards] (6/43) Jan 21 2008 I thought I ran across that bug a few weeks back when I bought and
- Bill Baxter (8/51) Jan 21 2008 It's going to bite me hard if it ever gets fixed. For imports I'm not
- Ary Borenszweig (6/14) Jan 21 2008 Thanks for your answers.
- Jarrett Billingsley (3/6) Jan 21 2008 I kind of wonder if W's done the same.
- Tyro[a.c.edwards] (7/16) Jan 21 2008 No! I don't think so. Just hasn't bubbled up to the top of the list as
- Jarrett Billingsley (7/13) Jan 21 2008 I was thinking about this; not only is const's priority much higher than...
Again, testing some Descent semantic code, I was getting errors on undefined functions. --- module one; import two; void foo() { char[] srcfilename = std.path.join("one", "two"); } --- --- module two; import std.path; // same with "private import std.path;" --- I was getting an error on "std.path.join", because since the import on module two is private, join is not visible. But DMD seems to compile it without problems. What's the truth about imports?
Jan 21 2008
Ary Borenszweig ????????:Again, testing some Descent semantic code, I was getting errors on undefined functions. --- module one; import two; void foo() { char[] srcfilename = std.path.join("one", "two"); } --- --- module two; import std.path; // same with "private import std.path;" --- I was getting an error on "std.path.join", because since the import on module two is private, join is not visible. But DMD seems to compile it without problems. What's the truth about imports?module imports are private by default. This means that since you "privately" imported std.path into module two, then the entire content of the std.path module becomes visible to module two, and module two alone. As a result std.path is not defined in module one. In order for it to be defined, you would also need to import std.path in module one or do "public import std.path;" in module two. Andrew
Jan 21 2008
Tyro[a.c.edwards] wrote:Ary Borenszweig ????????:The truth seems to be more that fully qualified names are always made public. http://d.puremagic.com/issues/show_bug.cgi?id=314. --bbAgain, testing some Descent semantic code, I was getting errors on undefined functions. --- module one; import two; void foo() { char[] srcfilename = std.path.join("one", "two"); } --- --- module two; import std.path; // same with "private import std.path;" --- I was getting an error on "std.path.join", because since the import on module two is private, join is not visible. But DMD seems to compile it without problems. What's the truth about imports?module imports are private by default. This means that since you "privately" imported std.path into module two, then the entire content of the std.path module becomes visible to module two, and module two alone. As a result std.path is not defined in module one. In order for it to be defined, you would also need to import std.path in module one or do "public import std.path;" in module two.
Jan 21 2008
Bill Baxter さんは書きました:Tyro[a.c.edwards] wrote:I thought I ran across that bug a few weeks back when I bought and started reading "Learn to Tango with D" but somehow managed to convince myself that it didn't exist. Thanks bb. AndrewAry Borenszweig ????????:The truth seems to be more that fully qualified names are always made public. http://d.puremagic.com/issues/show_bug.cgi?id=314. --bbAgain, testing some Descent semantic code, I was getting errors on undefined functions. --- module one; import two; void foo() { char[] srcfilename = std.path.join("one", "two"); } --- --- module two; import std.path; // same with "private import std.path;" --- I was getting an error on "std.path.join", because since the import on module two is private, join is not visible. But DMD seems to compile it without problems. What's the truth about imports?module imports are private by default. This means that since you "privately" imported std.path into module two, then the entire content of the std.path module becomes visible to module two, and module two alone. As a result std.path is not defined in module one. In order for it to be defined, you would also need to import std.path in module one or do "public import std.path;" in module two.
Jan 21 2008
Tyro[a.c.edwards] wrote:Bill Baxter さんは書きました:It's going to bite me hard if it ever gets fixed. For imports I'm not using extensively in a module I tend to use fully qualified names and take a "shoot first; ask questions later" approach. So for instance I'm sure I have *lots* of std.string.format()'s in modules that never imported std.string which just happen to work because some module somewhere that I imported does. --bbTyro[a.c.edwards] wrote:I thought I ran across that bug a few weeks back when I bought and started reading "Learn to Tango with D" but somehow managed to convince myself that it didn't exist.Ary Borenszweig ????????:The truth seems to be more that fully qualified names are always made public. http://d.puremagic.com/issues/show_bug.cgi?id=314. --bbAgain, testing some Descent semantic code, I was getting errors on undefined functions. --- module one; import two; void foo() { char[] srcfilename = std.path.join("one", "two"); } --- --- module two; import std.path; // same with "private import std.path;" --- I was getting an error on "std.path.join", because since the import on module two is private, join is not visible. But DMD seems to compile it without problems. What's the truth about imports?module imports are private by default. This means that since you "privately" imported std.path into module two, then the entire content of the std.path module becomes visible to module two, and module two alone. As a result std.path is not defined in module one. In order for it to be defined, you would also need to import std.path in module one or do "public import std.path;" in module two.
Jan 21 2008
Bill Baxter escribió:It's going to bite me hard if it ever gets fixed. For imports I'm not using extensively in a module I tend to use fully qualified names and take a "shoot first; ask questions later" approach. So for instance I'm sure I have *lots* of std.string.format()'s in modules that never imported std.string which just happen to work because some module somewhere that I imported does. --bbThanks for your answers. Phobos is going to be bitten hard if it gets fixed, but the fix is pretty easy: just add import statements. :-) For now, I'll make Descent have that bug too, so it behaves exactly like DMD (although it's harder for me to implement that incorrectly :-P).
Jan 21 2008
"Tyro[a.c.edwards]" <no spam.com> wrote in message news:fn353h$2ni1$3 digitalmars.com...I thought I ran across that bug a few weeks back when I bought and started reading "Learn to Tango with D" but somehow managed to convince myself that it didn't exist.I kind of wonder if W's done the same.
Jan 21 2008
Jarrett Billingsley $B$5$s$O=q$-$^$7$?(B:"Tyro[a.c.edwards]" <no spam.com> wrote in message news:fn353h$2ni1$3 digitalmars.com...No! I don't think so. Just hasn't bubbled up to the top of the list as yet. Got to admit that there are a lot of processes competing for WPT (Walter Processing Time). Probably just need to modify the process scheduler a bit to take this into consideration and downgrade the priority of a few of those "greedy" processes (const comes to mind here) so that those oft ignored once get their chance to surface.I thought I ran across that bug a few weeks back when I bought and started reading "Learn to Tango with D" but somehow managed to convince myself that it didn't exist.I kind of wonder if W's done the same.
Jan 21 2008
"Tyro[a.c.edwards]" <no spam.com> wrote in message news:fn3l7g$17ef$1 digitalmars.com...No! I don't think so. Just hasn't bubbled up to the top of the list as yet. Got to admit that there are a lot of processes competing for WPT (Walter Processing Time). Probably just need to modify the process scheduler a bit to take this into consideration and downgrade the priority of a few of those "greedy" processes (const comes to mind here) so that those oft ignored once get their chance to surface.I was thinking about this; not only is const's priority much higher than anything else, Walter seems to follow a SJF (shortest job first) process schedule. Unfortunately this means given a steady stream of small, easier-to-fix issues, the older, larger ones tend never to get fixed. It's kind of sad, really.
Jan 21 2008