Stuff

This sucks. I have to go to bed like, now, because my wife is taking the SATs tomorrow, but the lovely people at the College Board decided that the best place for this sort of thing is on the other freaking side of Jacksonville, which is the largest city by land area in the continental United States.

Now I love my wife to death, but she can’t navigate to save her life, so I have to drive her to take the test, which means I have to be up in about 6 and a half hours, assuming I fall asleep as soon as I lay down (I won’t, I’ll toss and turn for a couple of hours. :-( ).

I’ve been spending my free time recently working on abakus. I’ve investigated ANTLR for generating the C++ parser for abakus, but unfortunately it is not only too time consuming to relearn and switch, but I’ve figured out how to make the current form more or less sane without sacrificing a ton of nice code design principles. What I’m doing now is forming a syntax tree for every expression that descends from a common base (incidentally this has let me add user defined function support). The functions used to create the syntax tree are, instead of being global functions, a part of a singleton object, which can emit signals as needed. Once I’ve cleaned everything up it should be really cool.

What I also need to do is see about switching to qmake again. Since I’m compiling everything in C++ mode now that shouldn’t be a problem, although I have the feeling that qmake will somehow barf on the lex/yacc part once again. I wonder if there’s a way in qmake to indicate that some files depend on parser.y or lexer.l, since that would make my job much easier.

It has occurred to me that developing abakus has been a delightfully useful exploration of various techniques that most KDE devs don’t get a chance to practice often, which has been both good and bad. For example, we obviously don’t typically roll our own Makefiles. This hasn’t helped users whose systems were different enough from mine to be a problem, but it has (ironically) made me much more productive, not to mention the incredible speedup in the build process for users where my Makefile did work.

I’ve also been able to play with C/C++ integration, although I wouldn’t recommend that anyone stop what they’re doing and try it. If you have a choice in the matter it is better to simply compile everything you can in C++ mode and use singleton objects or namespaces when you need to use global functions.