The future of SM...
Julian Fitzell
julian at beta4.com
Fri Jul 16 16:56:04 UTC 2004
Martin Wirblat wrote:
> Putting modules together is similar to "normal" programming, just on a
> larger scale with a coarser granularity. We are expecting a Smalltalk
> Class to stay the same when we change something (minor) in it in the
> sense that it should serve its clients the same way it did before.
> Programming is speaking a language for our brains. Adding version numbers
> would be an explosion of the vocabulary. To give classes or methods
> version numbers would be nonsense. You want to assure that the core
> functionality is as universal as possible and that it stays the same as
> long as possible. Every programming style which does not adhere to this
> principle is less efficient if not impossible. And because "moduling" is
> programming, it is useful to work towards what Lex proposed quite some
> times now, modules that work together regardless of there version.
You make two valid points in here:
- minor changes to classes (or packages) are unlikely to affect their
compatibility with other classes (or packages)
- we should always try to ensure that classes (and packages) remain
compatible with their defined interface so that they are more likely to
keep working with other classes (or packages)
But, first, your statement about version-numberd classes and methods
being nonsense is a bit silly. We already version all these things
(looked at the Versions browser lately?) and we group particular
versions of them together into a release (whether they be fileouts, mc
packages, or whatever). We don't bother giving them sequential version
numbers but they do have timestamps which come to pretty much the same
thing. And you wouldn't expect to be able to take package A version 1.0
and load 3 methods at random from package A version 2.5 and have it
necessarily work. So I think the exact case you say is nonsense pretty
much already exists.
Second, nothing about either of your valid points implies that we
shouldn't store the version numbers of packages that work together.
While it may be true that version 1.01 of a package will work fine in
place of 1.00, it's a pretty good bet that version 2.00 will not.
Remember that we already have to deal with this issue with methods and
classes, but that when a release is made, a set of methods and classes
that all work together are made available all at once by a person or
group. When we're talking about packages, each one may be managed by a
different person. The author of Library A v.1.2 will likely release
version 2.0 without all the hundreds of authors who use that library
simultaneously releasing new versions of their applications. At this
point, nobody would be able to install those applications.
Third, there is an implicit suggestion in your reasoning that if you
record the version numbers of compatible packages you are preventing
flexibility of using newer compatible versions. But this is just false.
The tools just have more information to determine that, if A-1.23 and
B-2.34 work together, then it is likely safe to load B-2.36 but probably
best to move up to A-1.27 instead of A-1.6. The user can even still
decide to try the newest versions, but if they have problems they know
what working configurations to fall back on. As Goran said in his
reply, all you are doing is storing more information...
Julian
More information about the Squeak-dev
mailing list
|