Michel Fortin wrote:
On 2009-01-31 20:51:57 -0500, Chris R Miller
<[email protected]> said:
If you had a smart enough dynamic linker and the signature of each
function in the virtual table, you could do that in D too by creating
virtual tables and updating offsets in the code accordingly while
linking. (Objective-C doesn't work like that, but it has the same
effect.) Alternativly, it could be done in some static initialisation
phase.
An increasingly interesting toy to study (I would think) would be
Categories - the ability to take an existing class and just randomly
tack on additional receivers. Perhaps this is exclusive to
Objective-C's message-receiver architecture, but it's a curious little
technology nonetheless.
I'm sure we could add something like categories with what I'm proposing
above. In fact, many people on this list have requested a way to write
extensions to classes: more methods you can invoke using the dot syntax.
Perhaps virtual tables built at runtime could allow people to write
class extensions and still be able to override extension methods in
subclasses.
It would be great if D could have categories/open classes and you could
do something like this:
class A
{
void foo () {}
}
class A
{
void bar () {}
}
void main ()
{
auto a = new A;
a.foo;
a.bar;
}
And it should of course work on classes you don't have access to the
source code.