digitalmars.D.bugs - [Issue 7726] New: 'virtual' keyword please
- d-bugmail puremagic.com (19/19) Mar 18 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (9/9) Mar 18 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (10/10) Mar 18 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (25/25) Mar 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (21/21) Mar 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (17/17) Mar 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (33/33) Mar 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (33/33) Mar 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (9/9) Mar 19 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
- d-bugmail puremagic.com (12/15) Mar 21 2012 http://d.puremagic.com/issues/show_bug.cgi?id=7726
http://d.puremagic.com/issues/show_bug.cgi?id=7726
Summary: 'virtual' keyword please
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: critical
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: turkeyman gmail.com
Used in conjunction with 'final:' at the top of the class, gives access to
explicit virtual code.
Allow implementation of such a policy for a large code team.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 18 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bugzilla digitalmars.com
Severity|critical |enhancement
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 18 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726
Piotr Szturmaj <pszturmaj tlen.pl> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pszturmaj tlen.pl
---
Instead, please use final: at the bottom of the class.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 18 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726
Then I can't use private:, since that suffers from the same problem of not
having a corresponding 'public'.
{
[public virtual methods]
private:
[data members]
final:
[non-virtual methods] // are now private
}
{
[public virtual methods]
final:
[non-virtual methods]
private:
[data members] // error because of the 'final:' bug
}
This all leads to messy, and rather difficult to follow classes. I like to keep
associated stuff together.
I also really like the virtual keyword, it states in the API clearly how to
extend the class, and you can grep for it.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726
---
You can tag individual members with public/private and final. final: and final
{ } are just for convenience.
You can also try something like this:
{
void virtualMethod() {}
private:
int privateMember;
public final:
void finalMethod() { } // public
}
I guess you are opting for virtual: keyword to just disable existing final:
specifier. There are other possible solutions without adding a new keyword:
- Use default: to restore public and virtual.
- Use negation, like !final: to disable specifiers that differ from public and
virtual.
But I'm ok with current approach.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726
No actually, I want a 'virtual' keyword to write in front of virtual methods.
Not 'virtual:', I don't believe that would be very useful.
every programmer that exists expects:
class MyClass
{
final:
this()
void method();
property void thing(int t) {}
property int thing() {}
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726
*crap, I tapped tab and the 'commit' button gained focus, and when I pressed
space bar, it posted.*
class MyClass
{
final:
this();
property void property1(int t)
property int property1()
property void thing(int t)
property int thing()
void doThing()
void addUnrelated(Unrelated x);
Unrelated getUnrelated();
virtual void updateUnrelateds();
// etc.
private:
virtual void update();
virtual void draw();
void handlerDelegate();
void handlerDelegate2();
int data1;
float data2;
...
}
Ie. logically group stuff, mark the occasional virtual explicitly, continue as
final.
This looks like a fairly realistic class to me. I really want to be able to
explicitly mark each function that is virtual in this way.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726
---
You can write it like this:
class MyClass
{
final {
this();
property void property1(int t)
property int property1()
property void thing(int t)
property int thing()
void doThing()
void addUnrelated(Unrelated x);
Unrelated getUnrelated();
}
void updateUnrelateds();
// etc.
private:
void update();
void draw();
final {
void handlerDelegate();
void handlerDelegate2();
}
int data1;
float data2;
...
}
IMHO it makes no sense to introduce virtual keyword since virtual in D is the
default...
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726 Yeah, I'll do that in the mean time, but it's not a 'solution'. I still can't grep for virtual (important). And it's really ugly; breaks indentation policy, separates things in and out of braces. D is meant to be cleaner and tidier than C++. Certainly not messier. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Mar 19 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7726
timon.gehr gmx.ch changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |timon.gehr gmx.ch
every programmer that exists expects:
I'd be careful with strong/wrong statements of this kind. They make your
argument seem feeble even if it is not.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Mar 21 2012









d-bugmail puremagic.com 