Squeak is an unsuccessful open source project (was RE: Let
usface reality)
Kamil Kukura
kamk at volny.cz
Wed Feb 9 00:38:25 UTC 2005
Lex Spoon napsal(a):
> We used to consistently have SMTPSocket, HTTPSocket, etc., all
> subclasses of Socket. Yes, *consistently*. Then the *Client stuff got
> introduced, but without fully updating the major Internet applications on
> SqueakMap. There was a long period where Scamper and Celeste did not
> work, and until today, we still have the inconsistencies you describe.
> For some reason, this "cleanup" project ended up making quite a big
> mess!
This is where packaging system with side-effect of isolation and
identification comes in place. If networking will be package with clear
borders and clear assignment that version X.Y is responsible for this,
that and that functionality (class X, Y, Z), then hopefuly this won't be
happening often regarding to ability to load/unload package.
> My take: if you want to embark on a cleanup expedition, be prepared to
> do it all the way. Write updates for all the major packages using the
> functionality, deal with a transition period where both old and new
> names work, and eventually be a good sport and actually get rid of the
> old names as planned. It's a *bad* thing to submit a renaming changeset
> and do nothing else. It adds bugs, and I'd rather have things work than
> have things be named in the best way.
Sure, this is what package correlation should solve. Debian does very
nice job in this. If packages will be in sync it should be working. But
I feel we have so much obsolete stuff we just can't go in progress and
keep everything working.
> Personally, major cleanups are usually way too much effort. I find it much
> better to save cleaning for when I am working on that part of the system
> for some other reason. I am expecting to break stuff anyway, so I may
> as well try to tidy things up a little while I am there. If I'm not
> working on the code, though, then why bother cleaning it? Working,
> debugged, time-proven code is extremely valuable!
In this way there's consequence coming from something like "I would
abandon this obsolete stuff because it is done better by this class(es)
but no, what if is someone is using it. I leave it for sure". I don't
object this is way of life, I just miss here some _art of design_.
Something kept simple, clear and stable.
>>- leave it as it is and just keep that mess arround. Of course, pray
>>someone won't write IMAPClient or XYZClient derived from Object and
>>pissing all this concept.
>
> Yes, leave it alone. Why is it so bad if this concept gets destroyed?
> IMHO, I am not convinced it will really work, anyway: I am not sure that
> line-orientedness is a good enough reason to use up your one chance for
> a superclass. But it doesn't matter what I think, because Smalltalk
> lets us evolve our concepts over time. We don't *have* to stick with
> any particular approach if it is not working. People can make Client's
> that are a subclass of the telnet protocol class, and they can make
> Client's that aren't. They can even change their mind later.
Sure we can do *anything*. But isn't there something fundamental what
should be left after us? Sure it might be refactored in future, but it
must be like crystal ball. I want to send ping and receive pong? I use
ICMPSocket. I need to communicate with other side sending data forth and
back? I use ProtocolClient. I need to send and receive data
simultaneously? I use DuplexProtocolClient or whatever.
I can easily get stuck on that I need to for example use SMTP's VRFY
command and despite the fact that class SMTPClient bears comment "This
class implements the SMTP (mail sending) protocol specified in RFC 821."
it simply doesn't. Sure, I will enhance it and while I'm at it, I may be
having a taste to *complete* it, to be it really RFC complaint. But that
was not my intention. Is that development platform I can build very
specific things on?
> People successfully rely on Squeak as a development platform. Your
> theory is differing from practice.
I also do. But in *practice* I needed to tell in one application if
server has _refused_ my connection attempt (IMCP mesage) or the request
to connect just _timed out_. I didn't find a way how to. When I got deep
inside socket stuff I started to learn how is it implemented, what
primitives are called, why I can't get the real error code. Then I
started to browse VM's sources, but I ran away a fairly long way from
what I was doing and what I wanted to do.
I'd be very glad to contribute in spare time. But also want make such a
contribution real sense. To be used as solid basement, not just
someone's experiment or just-needed tackle.
--
Kamil
More information about the Squeak-dev
mailing list
|