On Dec 22, 2010, at 11:58 PM, Mark S. Miller wrote: > On Wed, Dec 22, 2010 at 11:44 PM, Brendan Eich <bren...@mozilla.com> wrote: > On Dec 22, 2010, at 11:34 PM, Mark S. Miller wrote: > > > Brendan, I still do not understand why you think it is illegitimate to > > consider private names and soft fields as alternatives. Do you really think > > we should provide syntactic support for both? > > The discussion here, including Dave's point about transposed get or set for > [] being conceptually mismatched to the current [] meaning, and David-Sarah's > reply about why you can't stop a third party from using your frozen object > identity as the key in a weak map, have convinced me that even the frozen AST > example doesn't need syntax, so much as weak maps and whatever soft fields > make sense on top of them as library code. > > I do not understand this reply. Could you expand?
Dave wrote: "[O]verloading that syntax to mean lookup in a side table is what seems like a drastic break from the intuitive model of objects. I have nothing against side tables as a programming idiom; it's when you make them look like they aren't side tables that they become confusing. Especially when you can do counter-intuitive things like add new properties to a frozen object. Of course, there are clearly use cases where you want to associate new data with a frozen object, and convenience would be helpful. I'm just not convinced that making it look like ordinary object lookup is the right programmer-interface." David-Sarah wrote: "What's your intended goal in preventing 'adding' fields to [a frozen] object? If the goal is security or encapsulation, then freezing the object is sufficient. If I add the field in a side table, that does not affect your use of the object. I could do the same thing with aWeakMap.set(obj, value)." To answer David-Sarah's question, my goal in preventing "adding" fields to a frozen object depends on the syntax used to add those soft fields in exactly this way: aWeakMap.set(obj, value) is no problem, but (per Dave's words) obj[aSoftField] = value succeeding in spite of obj being frozen *is* a problem, conceptually for teachers, learners, documenters, hackers -- everyone building a mental model of "objects and properties" including freezing. It seems you agree enough to be exploring @ instead of ., which could desugar to transposed .get or .set. So perhaps more new syntax will help, rather than less new syntax and too much overloading of old. /be
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss