Thread overview | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
January 09, 2005 DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Hi guys, should this be right? <code> // test D :) import std.stdio; class C { // they are p-r-i-v-a-t-e private: int a=1; int b=2; } void main() { C c = new C(); // but see what happened int i=c.b; writefln("%d", i); // this compiles! } </code> The RESULT is(on an linux): [uframer@uFramerMagicLinux ~]$ dmd Digital Mars D Compiler v0.110 Copyright (c) 1999-2004 by Digital Mars written by Walter Bright ... [uframer@uFramerMagicLinux ~]$ dmd test.d gcc test.o -o test -lphobos -lpthread -lm [uframer@uFramerMagicLinux ~]$ ./test 2 [uframer@uFramerMagicLinux ~]$ |
January 09, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to uframer | > Hi guys, should this be right? The code is correct; it's not a bug. It's D`s solution to friendship. Check out these answers, http://www.prowiki.org/wiki4d/wiki.cgi?ShortFrequentAnswers |
January 09, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to uframer | On Sun, 09 Jan 2005 20:53:55 -0500, uframer wrote:
> Hi guys, should this be right?
Read the manual. You'll find that this is an intended access capability for all members of the same module.
|
January 10, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vathix | OH, i see. Thanks a lot. |
January 14, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Reimer | On Sun, 09 Jan 2005 06:59:05 -0800, John Reimer <brk_6502@yahoo.com> wrote: > On Sun, 09 Jan 2005 20:53:55 -0500, uframer wrote: > >> Hi guys, should this be right? > > > Read the manual. You'll find that this is an intended access capability > for all members of the same module. > I can understand (but disagree) with the DEFAULT being package/module (whatever D uses) but explicitly setting private should mean nobody should see it. Walter has his own veiws, though. -- Using Opera's revolutionary e-mail client: http://www.opera.com/mail/ |
January 14, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simon Buchan | On Fri, 14 Jan 2005 21:12:30 +1300, Simon Buchan wrote:
> On Sun, 09 Jan 2005 06:59:05 -0800, John Reimer <brk_6502@yahoo.com> wrote:
>
>> On Sun, 09 Jan 2005 20:53:55 -0500, uframer wrote:
>>
>>> Hi guys, should this be right?
>>
>>
>> Read the manual. You'll find that this is an intended access capability for all members of the same module.
>>
>
> I can understand (but disagree) with the DEFAULT being package/module
> (whatever D uses)
> but explicitly setting private should mean nobody should see it. Walter
> has his own
> veiws, though.
I'm no OOP guru, although I pick up the ideas and buzz-words bit by bit
over the years (comprehending about 25% of this input, then
promptly forgetting about 99% of that 25% :-( ), so perhaps it's not safe
for me to comment on the rightness or wrongness of the issue.
But because I'm sometimes bold and stupid :-) ...
I don't see module level access to private variables being a
terrible problem. The majority of the time, classes (and procedures) that
share the same module name are together in there for very specific
reason, otherwise each class is separated into individual modules. Nothing
outside the module should have access to these private members, but it
could be useful for the same module members to have access to them.
Perhaps this is more the case with private methods over private variables.
On the other hand, perhaps we /should/ ask why we even would need to access those private members from another class or procedure in the first place (even in the very specific context of the module). Is this an indication of bad OOP design? Is the ability to do so the fault of the compiler or the programmer? What is the significance of this access as compared to the "friend" attribute of C++?
Now, I can't remember if packages share the same trait (modules in the same directory); if these modules had classes that could access other module class' private variables or methods, then I would start wondering about the purpose of the private attribute.
For now, I guess you just use the "feature" or don't use it if you don't like it. I do agree that D has some... uh... "different" OOP approaches when compared to other languages. But that may be a result of D being one of those hybrid languages. It's OOP if you want it to be, but its base is imperative. This is much the way Modula-3 was designed, but I think D does a better job.
OT: I started studying Modula-3 again. It used to be one of those
languages that I /thought/ I worshiped. That was until I started getting
into it more. Just looking at features offered by a language really
doesn't tell you how great it is. After reviewing it's syntax more in
sample programs, I just about croaked. At first I thought, "Hey, it's
just new... be patient, it'll grow on you." But later I gave up on that
theory. I'm afraid I'm stuck with C-type syntax. I can't fathom how one
can get used to the almost pedantic style of programming in
pascal-like languages. I guess people are attracted to what they are used
to.
Later
John
|
January 14, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Reimer | On Fri, 14 Jan 2005 01:24:39 -0800, John Reimer <brk_6502@yahoo.com> wrote: > On Fri, 14 Jan 2005 21:12:30 +1300, Simon Buchan wrote: > >> On Sun, 09 Jan 2005 06:59:05 -0800, John Reimer <brk_6502@yahoo.com> wrote: >> >>> On Sun, 09 Jan 2005 20:53:55 -0500, uframer wrote: >>> >>>> Hi guys, should this be right? >>> >>> >>> Read the manual. You'll find that this is an intended access capability >>> for all members of the same module. >>> >> >> I can understand (but disagree) with the DEFAULT being package/module >> (whatever D uses) >> but explicitly setting private should mean nobody should see it. Walter >> has his own >> veiws, though. > > I'm no OOP guru, although I pick up the ideas and buzz-words bit by bit > over the years (comprehending about 25% of this input, then > promptly forgetting about 99% of that 25% :-( ), so perhaps it's not safe > for me to comment on the rightness or wrongness of the issue. > > But because I'm sometimes bold and stupid :-) ... > > I don't see module level access to private variables being a > terrible problem. The majority of the time, classes (and procedures) that > share the same module name are together in there for very specific > reason, otherwise each class is separated into individual modules. Nothing > outside the module should have access to these private members, but it > could be useful for the same module members to have access to them. > Perhaps this is more the case with private methods over private variables. I can see what you're saying here, though I like to think that the way the code is STORED should have absolutly no effect on the program: imagine a quick'n'dirty program that became not so quick, (but hopefully less dirty too) split into multiple files, then a whole bunch of errors and crud, meaning (correctly or not) our unlucky coder gets to redesign his whole program. Which is also why I think multiple modules should be able to be defined in one file (each making a seperate object) Note however that D does have the package attribute, which as far as I know should do what private does now, but MAKES SENSE. (It may only be for imports or something atm... but shouldn't be IMHO) > On the other hand, perhaps we /should/ ask why we even would need to > access those private members from another class or procedure in the first > place (even in the very specific context of the module). Is this an > indication of bad OOP design? Is the ability to do so the fault of the > compiler or the programmer? What is the significance of this access as > compared to the "friend" attribute of C++? I should think that generally the whole 'friend' thing is a workaround for unimplented C++ features (nested classes or something) and should be abolished. > Now, I can't remember if packages share the same trait (modules in the > same directory); if these modules had classes that could access other > module class' private variables or methods, then I would start wondering > about the purpose of the private attribute. I don't think D cares where files are (or even if there are files that will be linked to this one, thats the job of the linker) > For now, I guess you just use the "feature" or don't use it if you don't > like it. I do agree that D has some... uh... "different" OOP approaches > when compared to other languages. But that may be a result of D being one > of those hybrid languages. It's OOP if you want it to be, but its base > is imperative. This is much the way Modula-3 was designed, but I think D > does a better job. <lame_excuse>Ehh, but I don't like reading that kind of code... </lame_excuse> > OT: I started studying Modula-3 again. It used to be one of those > languages that I /thought/ I worshiped. That was until I started getting > into it more. Just looking at features offered by a language really > doesn't tell you how great it is. After reviewing it's syntax more in > sample programs, I just about croaked. At first I thought, "Hey, it's > just new... be patient, it'll grow on you." But later I gave up on that > theory. I'm afraid I'm stuck with C-type syntax. I can't fathom how one > can get used to the almost pedantic style of programming in > pascal-like languages. I guess people are attracted to what they are used > to. Pedantic code syntax is _theoreticly_ good, which _theoreticly_ is as good as good in _practice_. I will never be able to give up the _ability_ to write programs in ONE EXPRESSION! even if I would never actually use it... (which is why we have the Obfusicated C Code Contest :D) About the only thing I really miss in C style syntax (apart from NOT HAVING C++'s template syntax) is more flexibity with functions, ie type-enforced variable args (something like func(float, *[int, string]) ? Obviously a syntax nightmare) and multiple/overloadable return types. > Later > > John -- Using Opera's revolutionary e-mail client: http://www.opera.com/mail/ |
January 14, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Reimer | On Fri, 14 Jan 2005 01:24:39 -0800, John Reimer <brk_6502@yahoo.com> wrote: > On Fri, 14 Jan 2005 21:12:30 +1300, Simon Buchan wrote: > >> On Sun, 09 Jan 2005 06:59:05 -0800, John Reimer <brk_6502@yahoo.com> wrote: >> >>> On Sun, 09 Jan 2005 20:53:55 -0500, uframer wrote: >>> >>>> Hi guys, should this be right? >>> >>> >>> Read the manual. You'll find that this is an intended access capability >>> for all members of the same module. >>> >> >> I can understand (but disagree) with the DEFAULT being package/module >> (whatever D uses) >> but explicitly setting private should mean nobody should see it. Walter >> has his own >> veiws, though. > > I'm no OOP guru, although I pick up the ideas and buzz-words bit by bit > over the years (comprehending about 25% of this input, then > promptly forgetting about 99% of that 25% :-( ), so perhaps it's not safe > for me to comment on the rightness or wrongness of the issue. > > But because I'm sometimes bold and stupid :-) ... > > I don't see module level access to private variables being a > terrible problem. The majority of the time, classes (and procedures) that > share the same module name are together in there for very specific > reason, otherwise each class is separated into individual modules. Nothing > outside the module should have access to these private members, but it > could be useful for the same module members to have access to them. > Perhaps this is more the case with private methods over private variables. I can see what you're saying here, though I like to think that the way the code is STORED should have absolutly no effect on the program: imagine a quick'n'dirty program that became not so quick, (but hopefully less dirty too) split into multiple files, then a whole bunch of errors and crud, meaning (correctly or not) our unlucky coder gets to redesign his whole program. Which is also why I think multiple modules should be able to be defined in one file (each making a seperate object) Note however that D does have the package attribute, which as far as I know should do what private does now, but MAKES SENSE. (It may only be for imports or something atm... but shouldn't be IMHO) > On the other hand, perhaps we /should/ ask why we even would need to > access those private members from another class or procedure in the first > place (even in the very specific context of the module). Is this an > indication of bad OOP design? Is the ability to do so the fault of the > compiler or the programmer? What is the significance of this access as > compared to the "friend" attribute of C++? I should think that generally the whole 'friend' thing is a workaround for unimplented C++ features (nested classes or something) and should be abolished. > Now, I can't remember if packages share the same trait (modules in the > same directory); if these modules had classes that could access other > module class' private variables or methods, then I would start wondering > about the purpose of the private attribute. I don't think D cares where files are (or even if there are files that will be linked to this one, thats the job of the linker) > For now, I guess you just use the "feature" or don't use it if you don't > like it. I do agree that D has some... uh... "different" OOP approaches > when compared to other languages. But that may be a result of D being one > of those hybrid languages. It's OOP if you want it to be, but its base > is imperative. This is much the way Modula-3 was designed, but I think D > does a better job. <lame_excuse>Ehh, but I don't like reading that kind of code... </lame_excuse> > OT: I started studying Modula-3 again. It used to be one of those > languages that I /thought/ I worshiped. That was until I started getting > into it more. Just looking at features offered by a language really > doesn't tell you how great it is. After reviewing it's syntax more in > sample programs, I just about croaked. At first I thought, "Hey, it's > just new... be patient, it'll grow on you." But later I gave up on that > theory. I'm afraid I'm stuck with C-type syntax. I can't fathom how one > can get used to the almost pedantic style of programming in > pascal-like languages. I guess people are attracted to what they are used > to. Pedantic code syntax is _theoreticly_ good, which _theoreticly_ is as good as good in _practice_. I will never be able to give up the _ability_ to write programs in ONE EXPRESSION! even if I would never actually use it... (which is why we have the Obfusicated C Code Contest :D) About the only thing I really miss in C style syntax (apart from NOT HAVING C++'s template syntax) is more flexibity with functions, ie type-enforced variable args (something like func(float, *[int, string]) ? Obviously a syntax nightmare) and multiple/overloadable return types. > Later > > John -- Using Opera's revolutionary e-mail client: http://www.opera.com/mail/ |
January 14, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to John Reimer | On Fri, 14 Jan 2005 01:24:39 -0800, John Reimer <brk_6502@yahoo.com> wrote: > On Fri, 14 Jan 2005 21:12:30 +1300, Simon Buchan wrote: > >> On Sun, 09 Jan 2005 06:59:05 -0800, John Reimer <brk_6502@yahoo.com> wrote: >> >>> On Sun, 09 Jan 2005 20:53:55 -0500, uframer wrote: >>> >>>> Hi guys, should this be right? >>> >>> >>> Read the manual. You'll find that this is an intended access capability >>> for all members of the same module. >>> >> >> I can understand (but disagree) with the DEFAULT being package/module >> (whatever D uses) >> but explicitly setting private should mean nobody should see it. Walter >> has his own >> veiws, though. > > I'm no OOP guru, although I pick up the ideas and buzz-words bit by bit > over the years (comprehending about 25% of this input, then > promptly forgetting about 99% of that 25% :-( ), so perhaps it's not safe > for me to comment on the rightness or wrongness of the issue. > > But because I'm sometimes bold and stupid :-) ... > > I don't see module level access to private variables being a > terrible problem. The majority of the time, classes (and procedures) that > share the same module name are together in there for very specific > reason, otherwise each class is separated into individual modules. Nothing > outside the module should have access to these private members, but it > could be useful for the same module members to have access to them. > Perhaps this is more the case with private methods over private variables. I can see what you're saying here, though I like to think that the way the code is STORED should have absolutly no effect on the program: imagine a quick'n'dirty program that became not so quick, (but hopefully less dirty too) split into multiple files, then a whole bunch of errors and crud, meaning (correctly or not) our unlucky coder gets to redesign his whole program. Which is also why I think multiple modules should be able to be defined in one file (each making a seperate object) Note however that D does have the package attribute, which as far as I know should do what private does now, but MAKES SENSE. (It may only be for imports or something atm... but shouldn't be IMHO) > On the other hand, perhaps we /should/ ask why we even would need to > access those private members from another class or procedure in the first > place (even in the very specific context of the module). Is this an > indication of bad OOP design? Is the ability to do so the fault of the > compiler or the programmer? What is the significance of this access as > compared to the "friend" attribute of C++? I should think that generally the whole 'friend' thing is a workaround for unimplented C++ features (nested classes or something) and should be abolished. > Now, I can't remember if packages share the same trait (modules in the > same directory); if these modules had classes that could access other > module class' private variables or methods, then I would start wondering > about the purpose of the private attribute. I don't think D cares where files are (or even if there are files that will be linked to this one, thats the job of the linker) > For now, I guess you just use the "feature" or don't use it if you don't > like it. I do agree that D has some... uh... "different" OOP approaches > when compared to other languages. But that may be a result of D being one > of those hybrid languages. It's OOP if you want it to be, but its base > is imperative. This is much the way Modula-3 was designed, but I think D > does a better job. <lame_excuse>Ehh, but I don't like reading that kind of code... </lame_excuse> > OT: I started studying Modula-3 again. It used to be one of those > languages that I /thought/ I worshiped. That was until I started getting > into it more. Just looking at features offered by a language really > doesn't tell you how great it is. After reviewing it's syntax more in > sample programs, I just about croaked. At first I thought, "Hey, it's > just new... be patient, it'll grow on you." But later I gave up on that > theory. I'm afraid I'm stuck with C-type syntax. I can't fathom how one > can get used to the almost pedantic style of programming in > pascal-like languages. I guess people are attracted to what they are used > to. Pedantic code syntax is _theoreticly_ good, which _theoreticly_ is as good as good in _practice_. I will never be able to give up the _ability_ to write programs in ONE EXPRESSION! even if I would never actually use it... (which is why we have the Obfusicated C Code Contest :D) About the only thing I really miss in C style syntax (apart from NOT HAVING C++'s template syntax) is more flexibity with functions, ie type-enforced variable args (something like func(float, *[int, string]) ? Obviously a syntax nightmare) and multiple/overloadable return types. > Later > > John -- Using Opera's revolutionary e-mail client: http://www.opera.com/mail/ |
January 14, 2005 Re: DMD0.110's accessibility BUG? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Simon Buchan | <snip>
not so bloody revolutionary now, is it?
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
|
Copyright © 1999-2021 by the D Language Foundation