Key Pages
ProjectsSo it is important the project proceeds gradually but consistently:
To use a sporting metaphor, it will be important to "kick goals early". This will both raise the profile of the project, and show that there is a real commitment to change.
There are a number of Tcl-only changes and extensions that could make an early, significant impact:
It is suggested the first phase contain three deliverables, each building upon the previous
The problem with BWidgets (and other widget sets like iWidgets) is that there is a certain amount of baggage that will need to be discarded. For example,
There will need to be example applications to demonstrate the new look/feel. Since the early releases will be aimed at developers, it may be a reasonable approach to give tools such as tkinspect and tkcon a makeover and include them as an example, along with the ancient Tk demonstration program (which should be brought up to date too).
Here is a suggested timeline, including some specific deliverables.
Tk is dead because it's one monolithic app. As such, it exceeds the resources of a single programmer to understand or modify it. Since Tk is open-source, it's on-going development depends on individual programmers, working for free, incrementally extending it. But right now - and for the last five years or so - Tk is simply too big and complicated for an individual programmer, with limited time, to do this.
Which is why it's just not happening - and why programmers who do want changes re-write the widget concerned from the ground up - rather than upgrading the existing widget.
To fix this, we need to break Tk up, so that every widget is a single, stand-alone piece of code, that may be separately compiled (into a stand-alone dll/so). Presumably there'll also have to be a 'core' library for shared features like the Options Database.
Forget about the enhancements listed on this page. They'll only make things worse. Let's smash Tk up. Then the enhancements will come fast and furious - just as they did in the beginning.
However, you are one of the few people, to date, that I've heard advocating that approach. I'm not saying that you are wrong - just that if you want to see something like this, then you probably will need to start on it on your own, and then, perhaps after you get some of the infrastructure built, others will see the benefits of what you are advocating and join in.
I myself can't envision how the changes you discuss could do anything more than make tk more difficult to maintain and extend. But then, I've not much experience on the 'innards' of Tk.
What other graphical user interfaces do you know of which provides functionality such as you envision?
And obviously, as you pointed out, even breaking it up into more manageable (eg; widget-sized) clumps, still seems more work than anyone can get exited about.
But there are a lot of people who've spent a lot of time implementing new widgets. Iwidgets, Bwidgets, tkhtml, treectrl, tablelist, hugelist etc. The list just goes on and on. So there doesn't seem to be any shortage of people wanting and working to imrove Tk.
But how much of the work that they do replicates functionality that's already in the core. It's often easier to write a new widget, from the ground up, rather than upgrade/extend the existing one. The core remains static. And it's limitations (such as lack of theming/styling,) remain in-place.
The Tk styling project on Sourceforge is an example of this. As far as I can tell, the guys are re-writing some of the core widgets from the ground up. They're essentially re-writing Tk. The project's great. The #1 feature missing from Tk is IMHO theming. But surely it would be more efficient if themes could have been added to the existing widgets.
So I still feel that breaking the Tk core up in manageable, stand-alone chunks is the only way to save it. But I don't see it as being an easy task. And I agree with you, there seems to to be little enthusiasm for doing this.
But then, that's the fundamental problem with Tk and Tcl. The single, monolithic core approach is self-defeating. As the core becomes bigger, it becomes harder and harder to enhance and upgrade. Eventually, it stagnates and dies.
It's just a case of switching from a single monolithic core approach. To one centered on small, easily maintained modules - each with it's own well-defined, well documented API.
It's probably too late to save Tk, but perhaps new widget writers like the Tk styling project can bear Tk's fate in mind. And keep the code modularised, well-documented, and easily maintainable.