[BUG]UndefinedObject(Object)>>error:
ducasse
ducasse at iam.unibe.ch
Fri Oct 17 08:28:07 UTC 2003
I agree
On Vendredi, oct 17, 2003, at 01:57 Europe/Zurich, Richard A. O'Keefe
wrote:
> =?iso-8859-1?Q?Nathanael_Sch=E4rli?= <n.schaerli at gmx.net> wrote:
> 1) It is not possible to create a class with a class variable that
> shadows a global. This is exactly the same as it is not possible to
> create a temp var with the same name as an inst. var.
>
> I hate this sort of bondage-and-discipline approach, because it never
> scales
> well. Consider the following story:
>
> Miss X writes a class C in Squeak 3.7. It follows every known
> style
> rule and works flawlessly. It has a class variable Seeds. She
> saves
> it in C.st
>
> Along comes Squeak 3.8. Miss X tries to load C.st. Now she is
> told "you EVIL NAUGHTY WICKED programmer you; you DARE you do
> anything like that in front of an innocent computer?" Why?
> Because
> Squeak 3.8 now has a Seeds global variable.
>
> This can also lead to situations where class X can be loaded before
> class Y but not after.
>
> This is not an entirely hypothetical situation; I don't know most of
> the classes in Squeak, and each release there are more I don't know.
> It's especially likely to be a problem for someone writing a class
> using
> the development version and someone else trying to load it into the
> full
> version. In fact, it was precisely a
> developed=in-one-context-and-loaded-
> in-another problem which started this whole thread.
>
> The real answer doesn't lie in punishing the victim, but in controlling
> the global namespace better, which was of course the point of the
> Modules
> attempt.
>
> I assume that everyone agrees on 1)
>
> NO. *Warnings* yes. But it is really quite unacceptable to stop
> someone
> writing or loading a perfectly well defined class just because of some
> obscure addition to an uncontrolled global namespace.
>
> In precisely the same way, if I have a method with an argument or
> temporary
> called "x", and later someone adds an instance variable named "x", that
> should by all means raise a warning, but on no account should the
> method
> be broken. And this kind of shadowing should be tolerated as a
> temporary
> stepping-stone in a refactoring. If I push a method using an argument
> or
> temporary "x" down from a parent class that doesn't have an instance
> variable
> x to a child class that does, I should be allowed to do so and THEN
> rename
> the variable.
>
More information about the Squeak-dev
mailing list
|