Schol-R-LEA wrote:
I have the opposite problem; I keep changing direction before getting anywhere with my OS project, and thus have never really written any code for it at all.
I was doing this for a long time. A couple of features were unchanging, but I kept going off on wild tangents. Eventually I... limited my ambition... I stopped going off on wild tangents, but I kept my language specific model and 2 or 3 main goals. I had to shelve something I did really want: undo everywhere, but my UI and IPC ideas seem achievable enough, my array ideas may be helpful in the long term, and I'm sure I'll be able to work in something like file versioning later. Perhaps you could do the same with some variety of Lisp or another interesting language. I'd just recommend not choosing too pure a functional language or too pure a language of any other model. Some jobs are far easier if you can bend the language model or use another one entirely. These days, I put purity together with properness and elegance as things which look nice and help clarity a little, but I think they're more an indication of humans' limited capacity to understand than of any deep principles. I don't think any of them are worth trying too hard for. In a similar line, have you heard the quip that Common Lisp's loop is so powerful, they invented functional programming to get away from it?
I'll never forget it because not too long before I heard it, I'd been trying very hard to choose the right loop for the job. Back then, structure was a big deal, the anti-goto jihad was in full swing and the Proper Way To Write Programs was to use the language's features, not ugly things like break or continue. I believed it all and I tried really hard, but had to give up and accept breaking out of loops; it's so much more practical. I'm amused to find Plain English Programming only has infinite loops with break. It implements counted loops with a "decider" (boolean function) which has a
side effect of incrementing the counter, and a
compile-time side effect of creating a counter variable if there wasn't one, and yet it's amazingly elegant and clear!