How to escape implicit 'with (this)' of a method body

Maciej Stachowiak mjs at apple.com
Fri Aug 1 13:03:40 PDT 2008


On Jul 31, 2008, at 5:24 AM, Dave Herman wrote:

>> We should take this problem seriously. ...
>>
>> Dynamic scope is very bad.
>
> Specifically:
>
> - Classes are supposed to provide integrity, but dynamic scope makes  
> the
> internals of code brittle; any variable reference inside the
> implementation could be subverted by the seemingly innocuous insertion
> of a property.
>
> - Dynamic dispatch has a reasonably understandable cost model, but  
> only
> if it's confined to explicit property references. With dynamic scope,
> any variable reference could potentially be very expensive.
>
> - Generally, code within a `with' block is brittle and hard to
> understand, and as Tucker says, the implicit `this.' means that all  
> code
> inside class methods is within a `with' block... this means that all
> code inside class methods is brittle!
>
> - In the past, this has been enough for many programmers to deprecate
> all use of `with' -- we should certainly hope to avoid the same
> happening for classes.

I'm not sure of the benefits on the whole of implicit 'this' for class  
methods, but isn't it plausible to apply it only to static properties  
and not dynamically inserted ones, so all references continue to be  
bound at compile time and this sort of brittleness does not come up?

Regards,
Maciej




More information about the Es4-discuss mailing list