BCS:

>Could you elaborate on what exactly the expression problem is?<

I am far from being an expert on such matters, I will do what I can to answer.
It's not an esoteric problem, if you program with an OO language you have 
probably faced it sometime.

I think it's one of the two most important OOP problems not yet solved by D. 
And I think it deserves some thinking. But it can be work for the design of the 
D3 language.

Curiously one of the original design goals of Scala was to "solve" the 
expression problem.

(The other basic OO problem not currently solved by D2 is the 
variance/covariance of collections that contain objects (like arrays). There is 
a well known bug report about this. C# has introduced only in its 4.0 release 
syntax to face this problem, and recently I've sent Andrei the URL of an 
article that shows how Scala faces and solves this problem in its collections.)

You can see a canonical example of this problem in the D and Python code I've 
shown in my original post. In OO languages simpler than Scala and CLisp+CLOS 
the expression problem is sometimes solved using this pattern, the same I've 
used in the D code:
http://en.wikipedia.org/wiki/Visitor_pattern

The have discussed it a little here:
http://lambda-the-ultimate.org/node/2232

You can find some info relative to C++ solutions here too:
http://www.mpi-inf.mpg.de/~kettner/courses/lib_design_03/notes/advanced.html#DoubleDispatch

More on the same in C++:
http://lambda-the-ultimate.org/node/2590
It contains a paper from Bjarne Stroustrup too:
http://www.research.att.com/~bs/multimethods.pdf

In the Python code I have used multiple (double) dispatch to solve it, 
hopefully better.

Bye,
bearophile

Reply via email to