I got a letter asking me why I didn’t use the 1.0 model for developing 2.0, that is, released 1.0 when it reached “usable” and then incrementally improved it.
There are a few reasons for this, but most essential is that with 2.0 a lot of my goals were stuff I had no idea how to do, much of this is internal features, for example looking at the core editor some of my goals here were:
- Allow threaded operations in a transparent way, not having (threaded) parser, spell checker, save (to slow network mount) etc. need to know about buffer locks and similar.
- Simple index-based API for buffer that is fully unicode aware including diacritics, combining marks, and provide scoped settings and the likes in a similarly easy fashion yet at the same time also support line-based indexing without pathetic running times and efficient batch access (search/replace, save, etc.).
- Decoupled layout code based on an API which can support “complex” layouts yet allow efficient incremental updates.
- Extend scope system to allow scopes to come from file’s location in file system and attributes associated with that location plus various other sources like SCM and general file state.
- Allow general preferences to target specific files, folders, and projects.
- Allow commands to run for events such as “document saved”, allow them to run w/o a document but also allow them to be run directly on files from the file browser.
- Provide an abstraction for commands to allow toolbars/palettes, and unified key bindings — that is, introduce an abstract action like “build” that ⌘B might call in certain contexts, but have ⌘B be “bold” in a prose context.
It is only a subset but it should show that it is about data structures, algorithms, modularity, and “abstractions” plus some unification (like make the HTML preview be a command which is re-executed based on the new event system, let smart typing be based on (nested) snippets, etc.).
To realize this I felt it was necessary to start from scratch, and it has involved a lot of experimentation, rewriting, and it is why I didn’t feel like discussing progress in the open because I had no idea about how many of my ambitions would pan out. The program itself has been in a constant state of flux with essential stuff missing because my focus has initially been on all the stuff I didn’t know how to do, as I could always do the “easy” stuff later (and doing the easy stuff first just leads to rewriting it when new insights are gained).
All in all this has been a giant puzzle with a lot of pieces that needed to fall into place. When I did the last status blog post about “90% done” it was because I felt that the last piece of the puzzle had fallen into place — of course it is never so, but all the big unanswered questions have an answer, that doesn’t mean there isn’t still a lot of stuff to do before it is alpha ready, just that the road toward alpha is no longer filled with huge unknowns.
I know a lot of you want me to give some estimate about when the first alpha is out, but if you didn’t already read the software is hard essay then please go read it now! I can’t give any estimate I am able to fulfill, which makes the entire thing pointless and will just set me up for more negative comments.
What I can say is that the code base is nearing 50 KSLOC which in my book is a lot, I didn’t think 2.0 would be more than 30 KSLOC, but in comparison 1.x is almost 40 KSLOC (but with higher redundancy than 2.0).
I feel I should stress that I am not posting these “status posts” in an attempt of painting some picture of TM 2.0 being around the corner to increase sales or avoid having people jump ship. Please make your decisions about what software to use/buy/support based on released software, not what I or someone else writes about “the future” (which none of us can predict).
Hope that gives some more insight in what has been going on for the last few years. I know I aimed to describe some of the abstractions 2.0 will introduce, but the intent was to have someone else write about this which didn’t work out, and me writing blog posts is a serious drain on my resources, and right now I really just want to finish 2.0, I also feel much better about releasing software than writing about what I think the version I hope to release in maybe half a year should probably contain if all the stars align right…
Thank you all for your patience and support during this exercise.