On Jun 29, 2009, at 3:10 AM, Stéphane Rollandin wrote:
now, seriously: I never said things should not be cleaned up. my view about backward compatibility and progress is quite balanced, to me. I'm sorry I can't make it convincing, and sorry to end up being considered as an extremist opposed to any change.
Stef
I applaud your efforts - all of you - on the creation side.
I abandoned my Python base this last year because I got tired of the language changing. This system was the result of 10 years of part- time development. I like most of the changes to the language over the years, especially as they firmed up the OO aspects (names spaces, etc.), I just simply got tired of rewriting my code every time a new version came out and I wanted to utilize the features. And sometimes that was because some 3rd party library wasn't being ported to the new version and I was forced to adopt a new library. (Sure, I am being a little dramatic, as not every change was so radical as to require rewrites.)
I had some interest in C++ in the mid-1980's... but I did not like that the language definition kept changing (in that era). Fortunately I discovered smalltalk and objective-c around that time. Although, because of the lack of stable (multi-platform) support for objective- C, my shop ended up rolling our own dynamic messaging system (change- notification manager, and all the bells and whistles) in straight-up C... because we knew we would always be able to compile C.
For people to get serious about building large apps in Pharo -- and the following may not be one's goal, depending on who we are talking about -- it MUST have a stable interface (set of methods) to some core classes. Ideally, the core environment should have the minimal interface that is guaranteed not to change. The implementation can be whatever fulfills the behavioral requirements best at the time; the end user (a programmer) does not care, so long as a given interface provides a predictable behavior across versions.
Is this a good time to talk about packages and namespaces? As a user (programmer), it would be nice to be able to specify which extensions (or behavioral overrides) to the core classes to enable. Ideally these extension sets/definitions could co-exist in the same image... but that is NOT required to provide the capability. It seems that a such capabilities would allow one to clean up the core, without abandoning existing interfaces; and hence, without completely breaking legacy code, e.g. to have #isKindOf:orOf: perhaps you need to import, or load the package KitchenSink. It *seems* that such capabilities could help bridge any future gaps between Squeak & Pharo, for example.
Of course, having these capabilities is one thing, and going through and scrubbing the code is another. Which, aside from the effort, still requires a committee to decide what is core (and to be permanently supported) and what is not.
-- back to broad adoption issues...
Speed/performance is also important in order to make Pharo appeal to a broader audience. Xupery might solve the problem. (I assume the C code generated has been highly optimized -- does any person "in the know" believe there is an opportunity for improving the C code?)
--
[Did I write something like this last week? I think i did, and then deleted it -- if this is a repeat, my apologies.]
Pharo is great. And for my development, I simply do not perform the updates very often, because I do not want to risk entering a debugging cycle on things that currently work. But the momentum is exciting and is part of the attraction!
With appreciation, Cam