Le 30/07/2013 00:12, Brendan Eich a écrit :
๏̯͡๏ Jasvir Nagra wrote:
Unless I am really misreading your examples, I do not think the new proposal overcomes the problems of http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null. If Function.setTypeOf dynamically affects subsequent use of typeof, then action-at-a-distance problems will persist. If one library adopts one convention regarding typeof null and another a different one, then these libraries will not be useable together.

Right, so don't do that
This is asking to never use any currently existing library. Fixing typeof null doesn't way enough and by a large factor.

There's no assumption of hostile code here, as usual you have to trust what you include into your single-frame/window (realm) TCB, etc.
"This is a human-factors / phenomenology->likelihood problem."?

Le 30/07/2013 01:04, Brendan Eich a écrit :
Allen Wirfs-Brock wrote:
I would argue that Functioun.setTypeOf(null, "null") is actually a different kind of beast and one that you would want to be lexically scoped. The difference is that it is changing the meaning of a pre-existing operator applied to a pre-existing value. This reinterpretation really does need to be scoped only to code that wants to see that change.

Ok, good feedback between you and jasvir. This suggests using the syntax I mooted:

  typeof null = "null"; // lexically rebind typeof null
  new code here
  typeof null = "object"; // restore for old code after
I'm not sure I understand how it's different from Function.setTypeOf.
What happens if you don't restore? Does the rest of the program gets executed with typeof null === 'null'? If, for whatever reason, one doesn't restore, it seems that the semantics of code starts depending on execution order (thinking of script@async). Something I would avoid and recommend other devs to avoid. Also, all in all, I'd prefer Function.setTypeOf because it's deletable (like Object.prototype.__proto__)


Function.setTypeOf (or typeof null = 'whatever' assuming I understand the restore part right) is an ambiant capability that dynamically changes the whole-program semantics of typeof null. I hope I made the dynamic flavour of the feature sound scary enough for it to be considered as a bad idea :-)


I'm tempted to say "directive or nothing".
But even as a directive, it's annoying as it makes code harder to read. In code, you'll almost never see:
    typeof x === "null"
because
    x === null
means the same thing and is shorter.
The only cases in code where the directive would make a change is:
    typeof x === 'object'
I imagine the mental burden to switch between some code using one behavior and some other code using another one will be big enough for people to think "fuck it! I'm going for the legacy behavior! That's the one people know and use anyway!"

If the things to think about when transitioning to strict mode [1] make a scale of annoying-ness, then typeof null would be placed in the worst category (semantic differences) and probably be the worst of these given that it's much more used than arguments, eval and this-in-non-OO-contexts (maybe combined). That makes transitionning code from old-typeof-null to new-typeof-null nothing be a nightmare.

I would love to see typeof null fixed or even fixable, but that probably takes a different language :-(

David

[1] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode/Transitioning_to_strict_mode?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FFunctions_and_function_scope%2FStrict_mode%2FTransitioning_to_strict_mode
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to