Sunday, June 25, 2006

 

Current status

Ok, once again I've been slacking rather when it comes to updating this blog. Apologies for watchers, but I have a bit of an excuse this time -- namely that my family has been expanded by a new arrival, Isaac Arthur Rose, who was born at 7.15 am on the 10th of June. Needless to say I've been a little distracted with that.

There has been some progress with DUIM. I initially decided to write unit tests using the RT framework (which I did, up to a point). Over the last couple of weeks I've converted the FunDev tests to Lisp, and written a very simple equivalent of FunDev's 'TestWorks' harness to reduce the changes to the FunDev tests that needed to be made. Since there were a couple of problems using RT for me (difficult to test intermediate states, since a bunch of the DUIM code isn't functional) I figured I'd use this quick hack for all my tests, and have now also moved my unit tests over to this new framework.
Currently, there's a bunch of code that fails the tests (and the converted Dylan tests don't yet compile) but I feel I'm making (good) progress at the moment.

Stuff to do:
o My unit-test framework is very bad at running multiple suites, and could do a better job of reporting its results. I need to give it a little polish, document it, and then perhaps release it on its own (oh joy, yet another test framework!). It also needs to do better at handling errors in the test setup / teardown code (this work is currently done outside the framework altogether, so failing code kills the test run which is not ideal.
o I need to formalise (and document) a strategy for object creation within DUIM. Currently I'm specialising MAKE-INSTANCE by EQL specialising on STANDARD-CLASS which may or may not be legal (there was a thread on c.l.l. about this recently, dig out the reference). Note also that DUIM occasionally has a MAKE method for subclasses of some type, rather than for specific types. The Dylan tests mentioned above also do this, so I need to come up with something reasonable in the near future.
o The code is currently quite schizophrenic over its handling of vectors and lists. Dylan is more forgiving than Lisp when it comes to dealing with these types (for example, it appears to be legal to give APPLY a vector as its final argument) and parts of the DUIM code rely on this. The transliteration currently uses the same types as the original Dylan code so I've hit a few places where vectors need to be converted to lists in order for the code to work (the current example is how regions are held in and friends). This should just be a matter of sitting down and going through the code (again, trying to be consistent).
o I've tried to avoid 'Lispifying' the code to date (it still looks very similar to the Dylan code). I think I've gone about as far as I can without doing at least a little 'Lispification' (particularly wrt slot accessors), so some of that needs doing too.
o I need to document more, especially if the code starts to diverge from the Dylan implementation since the FunDev documentation will not be so useful anymore.

I think this needs prioritising in the following order: list/vector changes, unit test changes, object construction, lispification with documentation being a common thread over all tasks.

More updates soon (I'm not going to promise since I'm so bad at providing them, but I will promise to try harder :-)

This page is powered by Blogger. Isn't yours?