A lot has happened in Emdros-land since my last post, even though the last public release was on February 2008 -- almost a year ago.  The code has been progressing, even though I am now a PhD, and an assistant professor, and a father.

Today's blog post is not about my public silence, however, but about a design bug that exists in every version of Emdros since the first release.

Since the day I wrote the first line of what was to become Emdros, there has been a design error in the way object references are handled. This has meant that object references could not really be relied upon to provide correct results under certain circumstances, leading to misleading results.

There has never been a problem with this kind of object reference:

[Phrase as p1
   [Word parent = p1.self]
]

That is, there has never been a problem when the object block referenced was a parent of the referencing object block.

The problem, rather, has shown up in circumstances where the object block referenced was either a sibling, or a nephew, or an uncle, or a cousin, or a cousin twice removed... etc... of the referencing object block.

For example:

[Clause
   [Phrase as p1]
]
[Clause
   [Phrase cousin = p1.self] // This can lead to errors
]

I have worked very hard on this problem on and off for at least 3 years now.  I have finally found a solution.

Some time ago, I ported the topographic subset of Emdros to the Python programming language. It is not a port of the complete topographic subset, but it does allow me to experiment with new extensions of Emdros in the much more malleable Python language.

I have used this Python version of Emdros to experiment with this "uncles and nephews" problem.  The solution was conceived of in a three-hour session of writing up the solution, and the implementation in Python has taken around 12 hours so far.  I have tested the solution, and am now ready to port it over to C++.

Stay tuned for news about a release of Emdros having the fix (but don't hold your breath ;-) ).

Ulrik