- Released 1.10.2.
- Reducing duplication beween Grunt and Download Builder.
- Scott reviewed Mike's progress on clip animations.
- We're getting close.
- Mike will address the issues we found.
- Gathering feedback for jqueryui.com.
Author Archives: builder
jQuery Core Team Meeting – Mar 18 2013
- Attending: DaveMethvin, timmywil, mikesherov, rwaldron, orkel, gibson042
link jQuery 2.0 Final
- Ship for jQuery Uk (April 19)
- Stuff to be ironed out
- Use in node.js
link Migrate 1.2
- Ship with jQuery 2.0, reflecting 1.10 changes as well
- List of changes below
link jQuery 1.10
- Create a 1.10-stable branch to land stuff? Or maybe a 1.x-stable?
- Dave working on blog post; shared here:
- Ship a month or two after 2.0, near Portland conf
link Document differences 1.x to 2.x
- 2.x data can be attached anywhere
link (Add these to Migrate Plugin and document NOW for 2.0/1.10 release)
- No script execute by default, must use $.parseHTML
- Groundwork for XSS reduction, but not a complete fix atm
- This would make the no-leading-space restriction unnecessary?
- http://bugs.jquery.com/ticket/13417 domManip and empty text nodes
- http://bugs.jquery.com/ticket/12838 $.ajax hook point for domManip
- change Event.isTrigger from boolean to bitmask
- allow multiple args for .replaceWith (ref)
link jQuery 1.9.2
- None planned
link Documentation Day
- Need moar docs fixes
- https://github.com/jquery/api.jquery.com/issues
- Timmy and I did some triage last Wednesday
- Please look at tickets and suggest wording for updates
link Open tickets triage
Testing Team Meeting – Mar 14 2013
March 14, 2013
Location: #jquery-meeting on Freenode
Attending: James, Scott, Ghislain, Jörn, Richard, Timo
Time: 11am ET (16:00 UTC)
QUnit
- qunit-reporter-junit in its own
repo, running current grunt, built by Travis-CI - composite addon updated in master
( https://github.com/jquery/qunit/pull/408
), James will move to its own repo soon - Discussing replacing callbacks
with events: https://github.com/jquery/qunit/issues/422- Timo to work on that
- Refactored assertion addons, add
assertions to QUnit.assert ( https://github.com/jquery/qunit/pull/418
) - Update QUnit to grunt 0.4 (
https://github.com/jquery/qunit/pull/423
) - add-on vs plugin vs extension?
Let’s go with plugin. And publish them to npm. - Browser support for QUnit (
https://github.com/jquery/qunit/issues/412
) vs
plugins? Should they match? Will jQuery 1.x support IE6 forever? - We’ll keep the PhantomJS plugin: https://github.com/jquery/qunit/issues/420#issuecomment-14909617
Jenkins/Travis
We’d like to run `grunt` for all
PRs – Travis makes this really easy, mergatron should do it, too.
We want TestSwarm for regular
commits, this won’t work with Travis, since it can’t expose
confidential
credentials to PR committers.
TODO: Add a few more projects to
Travis, gives us basic testing for PRs
- travis.yml to init/update
submodules, npm install -g grunt-cli - npm install && npm test
is done on travis by default
We can use that at least until
mergatron can do it better.
TestSwarm
- projects update shelved for a
week, until higher priority issues are resolved (infrastructure,
BrowserStack)
Ecma/TC39 Meeting – Mar 14 2013
link March 14 2013 Meeting Notes
John Neumann (JN), Norbert Lindenberg (NL), Allen Wirfs-Brock (AWB), Rick Waldron (RW), Waldemar Horwat (WH), Eric Ferraiuolo (EF), Erik Arvidsson (EA), Luke Hoban (LH), Matt Sweeney (MS), Doug Crockford (DC), Yehuda Katz (YK), Brendan Eich (BE), Sam Tobin-Hochstadt (STH), Alex Russell (AR), Dave Herman (DH), Adam Klein (AK), Bernd Mathiske (BM), John Pampuch (JP), Avik Chaudhuri (AC), Edward O'Connor (EOC), Rick Hudson (RH), Andreas Rossberg (ARB), Rafeal Weinstein (RWN), Mark Miller (MM), Reid Burke (RB),
link 4.8 Object.observe Implementation Report
(Presented by Adam Klein, on behalf of Rafael Weinstein)
See: http://wiki.ecmascript.org/doku.php?id=harmony:observe
Slides (PDF, will prompt download): http://wiki.ecmascript.org/lib/exe/fetch.php?id=meetings%3Ameeting_mar_12_2013&cache=cache&media=meetings:object.observe_implementation_report.pdf
(Slide 1)
- Results are encouraging
- Two Google projects are pleanning to deploy run-time support
- Use cases ?
(Slide 2)
- Spec fully implemented (behind flag)
- Mostly self hosted: changRecord allocation, enqueing and delivery is in JS
- Mutation sites of observed objects deoptimize. Observed arrays are alwas slow mode
- Biggest perf bottleneck is feting changeRecords; plan to speed up Object.freeze()
YK: Concern about changeRecord spam (build up of changes delivered at the end of the turn)
AK: There are places were large numbers of changeRecords are a concern
AWB: (missed question)
AK: We could define the properties as non-configurable, this is orthogonal to the isFrozen check.
AWB: Even if there isn't a specified state for a frozen object
EA: With proxies, that becomes observable
AK: There are changes to the spec since last brought to the committee...
(Slide 3)
Object.deliverChangeRecords()
continues delivery until pending- Added
{ type: "prototype" }
changeRecord which reports changes to__proto__
- Minor changes to changeRecord generation to enforce consistency invariants
DC: Does that cause the turn to never end?
AK: Yes, same as recursive calls
ARB: Just another footgun in that respect
(Slide 4)
ChangeSummary JS Library
Supports dirty-checking and Object.observe (polyfill to fast/safe object observation)
Exposes semantics for a "diffing summary (Tn -> Tn+1 changes)
Observe
- "Values at a path" eg.
var foo = { bar: { baz: "..." } }; observe.observePath(foo, "bar.baz");
- Entire Objects
- Array splice
- "Values at a path" eg.
??
WH: What is "values at a path"
AK: If you have:
1
2
3
|
|
?: Observing paths leaks objects if we only have weak maps, not weak references
WH: Please explain
?: Path observers observe mutations anywhere on an object path a.b.c.d. Without weak refs these will leak a if d is still alive but a wouldn't otherwise be.
(Slide 5)
Per Analysis (dirty checking vs Object.observe)
- Results not surprising (this is good!)
- nothing-changed case is overwhelming win
- Discovering that nothing changed only incurs the cost of de-optimizing observed objects
- Object.oberse case never needs to keep a copy of observed data
- Object.observe appears to observed properties have changed (depending on observation "type")
- Arrays encourage "hidden" everything-changed cases eg.
unshift();
AK: One of the worst cases is observing Arrays
WH: If you do that, do you get one record for the array, or one for all properties?
AK: One for every index and length
?: Which then can get (inefficiently) summarized back to one change record for the array if you use a summarizing adaptor.
EA: We knew about this from the very beginning, but decided to address it after we had implementation experience.
(Slide 6)
Adding Support for Array "splice mutations"
- Report on changes to Array elements (isUInt32(propertyName)) as "splice mutations"
- Degrade to "normal" property mutations if...
- !Array.isArray(array)
- array has non-data index properties
- array has non-writable or non-configurable index properties
- operation will affect indices > UInt32
WH: What happens when you observe a WeakMap?
AK: It's an object, but nothing interesting happens, because there are no exposed properties that will be changed. We could have synthetic events for Map, Set etc.
LH: We would have to specify these synthetic events ahead of time
AK: The requirement for Map and Set would be to come up with new types.
WH: Observers make changes between properties and getters/setters (such as what we're doing to regexp flags to support the compile method) uncomfortably likely to break user code that observes such objects.
LH: But these can already use synthetic events
WH: What are synthetic events?
LH: (explains the synthetic events api)
AR: We may want a declarative way to "squelch" certain event types.
AK: ...discussion of the cost of notifying for all changes
YK: As we add more "types" there will absolutely need to be a way filter the types you care about.
RW: It would be nice to specify the "type", similar to registering handlers for specific event types. eg. Object.observe(o, "type:prototype", ...)
gives me only changes to the prototype. etc.
YK/AK: ...more discussion about complexity of adding the feature now or later.
AR: If you have filtering, users can choose the level of changes they are shown, without taking away any of the low level type notifications.
STH: What is the consequence of changing the system now? Can't we just do the right thing here for arrays?
LH: It introduces new complexity
AK: ...discussion of failure cases
AR: Fixing the Array thing for ES7 is a reasonable thing. But this is an example of something we will want to do in the future. This is also a chance to get the filtering feature and maintain upward compatibility.
YK: An array as an identity map
LH: An array as a tuple, its an object data type.
YK: Arrays used in Ember, specifically for numeric indices
...
YK: Do exceptions bubble up?
AK: There are many issues.
...May be better to special case splices
YK: ...discussion about spamming of changeRecords at the end of the turn and the sync behavior.
STH: If you're counting typing speed, you want all of the changeRecords
ARB: What happens when there are new observers or removed observers during a changeRecord delivery.
YK: I'm happy with the current implementation, but it would be nice to be able to squelch certain types of changeRecords
AK: Let's take this offline and look into ways of making this possible.
BE: (to ARB) are you ok with staying off the fast path?
ARB/YK/AK: ...Discussion about the possibility of a fast path for properly implemented Arrays
AWB: What happens if the object is implemented via Proxy, and doesn't have the normal representation of properties.
ARB: Treated the same as accessors
AR: To clarify, we call this the "slow path", but for apps that are going to use this, it's demonstrably preferable to existing art.
link 4.6 Symbols
(Presented by Andreas Rossberg)
ARB: Update on implementation of (unique) symbols in V8: mostly finished, and as efficient as strings as property names. But symbols don't fully behave like objects yet, as would be required by current spec.
ARB: Propose two changes to the proposal:
- Make symbol a primitive type
- Change toString behavior to avoid hazard
Problem with 1: extending typeof
AWB: Symbols as objects allows for useful operations like toString
ARB: Can be solved the same way as for other primitive types: wrapper object
AWB: From a spec perspective, making them not an object is more pervasive
ARB: Very different for implementations. You can use them in context of string or object, but you can pick only one representation. Chose string-like context because that's more important to optimize. But makes special-casing all object contexts costly
DH: Would have to do this if we made this a primitive type as well.
ARB: it would just fall into similar cases as other primitive types (in v8 at least)
AWB: ...compares to primitive and object wrapper classes
DH: And we would have to provide wrapper class
AWB/DH: We should have a new typeof type
DH: Real implementations have other typeof types, eg. IE
STH/BE: ...recalling prior discussion that had no definitive conclusion re: new typeof types.
ARB: Can we really afford precluding new typeof results for all eternity?
DH: If we can get away with this, then it supports adding new types for future additions, eg. int 64
BE: This is important:
1
2
3
|
|
...: The proposal from AR preserves this.
STH/DH: Giving the switch(typeof...) example
YK/RW: When would symbols be passed to this code anyway?
YK: It's a fuzzy case that is already broken, because null
can't be checked
BE: We should just do it and that'll learn 'em. ;)
DH: A new type in typeof is good and we should just do it.
General agreement.
DH: Now that these are essentially primitives, we need ways to discern private and unique
STH/YK: Committed to a new global because we use Symbol
to construct them.
AWB: Symbol
is a factory that creates symbols, new Symbol
creates instance of the wrapper class. (same as Number)
BE: Value objects allow "new"
AWB: I can define the Symbol[@@create]
to throw
ARB: The current spec has a toString for implicit conversion, which makes it too easy to convert the symbol to a string accidentally without realizing.
STH: Have a name property, and a toString that throws
ARB: Or simply no toString. But {}.toString.call
still works.
EA: String conversion already throws for null-prototype objects
DH: That's fair, it makes senses to have some sort of infallible stringify.
DH: Proto-less dictionaries will become more widely used
AWB: ...recalling existing specification of ToString conversion
...Mixed discussion about ToString
link Conclusion/Resolution
- New addition to typeof table
typeof symbol === "symbol"
- [ToString] => throws
- therefore
symbol + ""
=> fails w/ error
- therefore
Object.prototype.toString.call(symbol)
=> "[object Symbol]" (ARB: or rather something else, given that we just decided symbols shouldn't be objects)
link 4.17 Legacy Compatibility for Block Level Function Declarations
(Presented by Allen Wirfs-Brock)
See: http://wiki.ecmascript.org/lib/exe/fetch.php?id=meetings%3Ameeting_mar_12_2013&cache=cache&media=meetings:legacyblockfunctiondcl2.pdf (This is a PDF that will initiate a download!)
(Copied from PDF)
Prior to the Sixth Edition, the ECMAScript specification did not define the occurrence of a FunctionDeclaration as an element of a Block statement’s StatementList. However, support for that form of FunctionDeclaration was an allowable extension and most browser-hosted ECMAScript implementations permitted them. Unfortunately, the semantics of such declarations differ among those implementations. Because of these semantic differences, existing web ECMAScript code that uses Block level function declarations is only portable among browser implementation if the usage only depends upon the semantic intersection of all of the browser implementations for such declarations. The following are the use cases that fall within that intersection semantics:
- A function is declared and only reference within a single block:
- A function declaration with the name f is declared exactly once within the function code of an enclosing function g and that declaration is nested within a Block.
- No other declaration of f that is not a var declaration occurs within the function code of g
- All references to f occur within the StatementList of the Block containing the declaration of f.
- A function is declared and possibly used within a single block but also referenced within subsequent blocks.
- A function declaration with the name f is declared exactly once within the function code of an enclosing function g and that declaration is nested within a Block.
- No other declaration of f that is not a var declaration occurs within the function code of g
- References to f may occur within the StatementList of the Block containing the declaration of f.
- References to f occur within the function code of g that lexically follows the Block containing the declaration of f.
- A function is declared and possibly used within a single Block but also referenced by an inner function definition that is not contained within that same Block.
- A function declaration with the name f is declared exactly once within the function code of an enclosing function g and that declaration is nested within a Block.
- No other declaration of f that is not a var declaration occurs within the function code of g
- References to f occur within another function h that is nested within g and no other declaration of f shadows the references to f from within h.
- All invocations of h occur after the declaration of f has been evaluated.
Use cases 2 and 3 for a given function declaration f might occur within the same function.
The first use case is interoperable with the inclusion of Block level function declarations in the sixth edition. Any pre-existing ECMAScript code that employees that use case will operate using the Block level function declarations semantics defined by clauses 10 and 13 of this specification.
LH: Has to be a statically verifiable approach
DH: We can statically declare a conservation class of blocks
AWB: Most blocks are conditional in some form.
WH: (whiteboard)
1
2
3
4
5
6
7
8
9
|
|
WH: This example illustrates that #2 is not interoperable. It's not even clear to me what #2 means.
- Does the first call to g (in the else close) lexically follow the inner definition of g?
- Regardless of the answer, the second call to g is not in the intersection semantics (the inner g is never defined due to the if false) yet is treated by #2 as though it were.
AWB: A fix for this case: Add an additional clause that says the subsequent
AWB: The semantics we want, for non-legacy cases, in non-strict mode are the ES6 semantics.
DH: Not compatibility with reality.
...
Sixth edition interoperability for the second and third use cases requires the following extensions to the clauses 10 and 13 semantics. These extensions are applied to a non-strict mode functions g if the above pre-conditions of use cases 2 and/or 3 exist at the time of static semantic analysis of g. However, the last pre-condition of use case 3 is not included in this determination and the determination is only applied to function declarations that are nested within syntactic constructs that are specified in the Fifth edition of this specification.
Let B be environment record for the construct within g that introduces a new environment contour and which most closely encloses the declaration of f, all function code references to f, and the definitions of all nested functions that contain syntactically unshadowed references to f. This syntactic construct may be the definition of g itself, in which case B is the function environment record for g.
As part of the instantiation of B, its CreateMutableBinding concrete method is called with arguments "f" (the string name of the function) and false. This creates an unitialised binding for the name f. Any reference that resolves to that binding prior to step 3 below will throw a ReferenceError exception.
When the InitializeBinding concrete method is used to initialise the binding for the function declaration f also invoke InitializeBind on B using the same arguments.
If an ECMAScript implementation has a mechanism that produces diagnostic warning messages, a warning should be produced for each function g for which the above steps are performed.
WH: #1 is a circular definition. Some references to g will go to the outer g in the example. It is up to us to define which definition points to which.
AC: It would be beneficial to look at examples and then apply the fix rules and allow that inform the direction.
AWB: (whiteboard)
1
2
3
4
5
6
7
8
9
10
|
|
AWB: The interoperable fix:
- As if there was a
let g;
at the top of the inner block... - the g() reference points to the g() declaration in the same scope
WH: ok, put back the outer g()
AWB: (whiteboard)
1
2
3
4
5
6
7
8
9
|
|
...Didn't take into account this case, will need time to consider.
AWB: Could be two inner blocks, with declaration of g()...
WH: (whiteboard)
1
2
3
4
5
6
7
8
9
|
|
WH: What happens when the first g() is called?
AWB: the first g() is bound to the outer g(), then a new g() is defined.
WH: (whiteboard)
1
2
3
4
5
6
7
8
9
10
|
|
WH: Now what happens?
AWB: Per the proposed rules, both calls to g() are bound to the inner definition via the phantom let binding [presumably with the first one encountering a dead zone?].
[MM walks into the room and expresses speechless incredulity when he learns that adding the second call to g in this example changes which g the first call to g is referring to.]
AC: There is merit to avoid being clever. Benefit to preserving any existing semantics.
BM: There should be a vision for a desired semantics goal
STH/LH: Two goals, which are competing:
- We must remain compatibility with the web
- Introduce block scope bindings
BM: Bad that an outer binding can change
AC: ...correlates to AS
STH: We have sensible semantics for ES6/strict mode
AWB: We have sensible semantics for both modes
AC: Confident that we might be able cover all existing use cases. But what happens when someone discovers a case that was covered?
STH: Easy to come up with sensible rules from other languages
AC: All practical purposes
[? trying to start a meta-discussion about getting sidetracked on theoretical rather than practical problems]
WH: We are discussing because we know this is a real, practical problem based on research demonstrated at the previous meeting.
STH: The only guiding principle is to avoid breaking the web.
AWB: Where we're at, is the hypothesis that we can identify and fix the cases that break the 1% of sites that have code that violates. Introduce a declaration that spans the point of declaration and the point of reference
STH: ...clarifies the subset semantics definition
AC: Two cases:
- What to do?
- Identify that subset.
STH: Yes
AWB: This conversation only applies to the 1% of code that exists that must be dealt with in a way that matches the 99% semantics
LH: ...recapping
AWB: JavaScript programmers will have two learn that non-strict mode always uses odd-ball semantics in addition to the strict mode semantics. If we make this work, there is one semantics to learn.
DH: Inclined to agree with Allen. A worse semantics, easy to explain vs. a better semantics that serves the 99% but loses the 1%... and we'll lose the 1% in a deep dark hole. ...Arguing for:
- One set of rules, that is weird and less pleasant
- Carve out heuristics for identifying ... giving the good semantics to 99%
BM: Missing analysis?
STH: Presented at last meeting
DH: Arguing for #2 (99%)
WH: Want to see the semantics of strict mode in non-strict mode as often as possible. Don't want to legitimize new quirks, even if that means that the transition rules are more complex. Hope that in a few years the strange semantics can be eliminated in favor of what strict mode is doing.
LH: This is exactly Allen's point. If Allen's point achievable? If it is, then I support it, but I don't think it's achievable.
AWB: This is a first draft.
YK: Function in block is oddball already. If we have a semantics for non-strict FIB and different from strict mode, it will make it hard to upgrade to strict mode.
Note: AC/BM please send Allen any materials that might be useful for specifying the semantics for FIB.
link Conclusion/Resolution
- All (esp. AWB) to continue working through known issues in the 1% cases
link 8.1 Comments from Istvan, stated by John Neumann
The ECMAscript trademark is rather through. We have it in the most important countries, incl. US and EU.
The EU formal recognition for ECMA-402 and TR/104 is progressing. We are now in the evaluation phase by a small group. They asked me to make a first draft for evalutation, which I did. Informally I have one "yes" so far, and no "no" yet. If the small group gives an ok, then the member countries have to vote. The process will take a few months more (but I do not know how long, because this is the first experience with the new EU policy).
Regarding the IPR Adhoc. We are progressing. I think I can distribute an updated package to TC39 at the end of March. GA vote is planned for June 2013. Comments back to the IPR Adhoc, GA, or GA members. Just as last time.
WH: ECMA's TC39 email reflector is incompatible with gmail. If a gmail user sends an email to the reflector, non-gmail users will receive it but no other gmail user will receive it in his inbox. It will always arrive in the spam folder due to some SPF issue.
[Various people checking their spam folders now and discovering TC39 emails in there.]
link 4.10 Array Extras
(Presented by Rick Waldron) (notes from EA)
RW: Wrote spec (using spec prose) Array.prototype.find and Array.prototype.findIndex. Found in most PL and JS libraries
1
|
|
https://gist.github.com/rwaldron/5079436
1
|
|
https://gist.github.com/rwaldron/5079427
MM: What about start indedx? Does it go before the thisArg or not?
RW: None of the existing languages supports passing a start index.
RW: Not sure if this is for ES6 or Harmony
AWB: Feature creep
DH: Common, makes sense.
link Conclusion/Resolution
- Exception being made. Approved for ES6.
link 4.15 Template Strings
(Presented by Adam Barth [present], Mike Samuel [phone] guests from Google)
BE: What can we do to template strings to make them secure by default and not an XSS hazard.
- tagless?
- a default tag?
AWB: They're useful for making strings.
BE: (reiterating) The obvious problem: using backticks with no prefix/tag, you create potential for xss.
DH: Ok, so we've outlined the security argument, but important to note that tagless are useful and the security fix is still not enough to "fix" the bug picture security problems.
DC: No placeholders in tagless?
BE: Possible
YK: ...recalling discussion with Mark where the rabbit hole became extremely deep when trying to avoid accidentally coercing to a string.
MM: String.prototype.trim apply to delayed template string, which turns it into a string. ...Delayed template string inherits from template string
YK: Implicit coercions.
MM: This is one option
BE: Make the default case somehow not present, or neutered
AWB: Remember for "+" and explicit coercion cases, we're falling into the DefaultValue mechanism, which has a unique Symbol hook (in ES6), which means that what is sent to the object initially does not have a toString. The DefaultValue for the delayed template string is... ...DefaultValue applied in concatenation could throw,
MM: ...specifically the deferred template string. Specifically for the tagless template string case.
(RW: some terminology issues addressed)
WH: Understand the utility of tagged template strings, with possibly a default tag that does string concatenation, but what's the rationale for deferred template strings?
[some discussion, with no answer to WH's question]
MM: If the behavior is for the DefaultValue to throw, reject the implicit coercion. However, if you're writing a REPL and want to stringify, you can explicitly call toString
STH: This is insane
DH: This is destroying the usefulness of tagless template strings.
YK: It's not clear how taking a nice feature and making it harder to use will fix a security issue, the problem will still exist with string concatenation.
DH/RW: Agree
Mixed discussion re: security issues in the DOM.
AR: Security issues revolve around reasoning about data and behavior which you'd like to think is benign, but combining them create abilities that they shouldn't have.
DH: By calling out template strings, we're effectively blaming "strings" for these security issues.
AR: innerHTML
STH: That's the problem
AR: This isn't about hard-and-fast, right-and-wrong. Security is about doing the right thing more often. Security bugs are just a subclass of bugs that bite very hard. The biggest thing any system can do to improve the security situation is to set the economics of doing the right vs. wrong thing in such a way that it's "cheaper" to do the right thing. So we can't pretend that this is about some perfect answer; it's about the economics of designing a solution that leads to doing the right thing more often, and that's a question about probabilities and psychology. We want to build a honeypot for doing it the right way.
MM: Key, either get rid of tagless template string or make them unpleasant; have we created a situation where developers would or would not have used the feature...
AR: What is the reality that adding a no-op tag? What does it actually provide? Stopping developers from using tagless by giving them a tag that does interpolation.
DH: Strings are the most used data structure in all programming. Yes, they are used heavily in secure code construction. ...Then there is the pitchforks and torches cost of making this harder.
MM: Also, the cost of companies that will be screaming about being bit by a security issue
RW: But these are no different then the existing security issues today.
AR: That's not a fair argument to discussion.
MM: The screaming over vulnerabilities is probably more costly then developer hardship. ...If you use a tagless template string in particular context, you can have a an autoescaped context.
BE: So, you could change innerHTML setter to check if the RHS was a tagless template string
MS: (phone) If you don't try applying the string concatenation operators to the tagless template string, you get secure auto escaping. innerHTML
MM: Let's call that "Mike's Original Proposal"
STH: (listing)
- Current status with default handler that interpolates
- No tagless template strings
- tagless template strings with no interpolation
- tagless template strings produce delayed template string objects, with toString
- tagless template strings produce delayed template string w/ special handling that coerces
- tagless template strings produce delayed template string w/ special handling that throws
- Allow overloading of the default handler for the tagless template strings
MM: (whiteboard)
1
2
3
4
5
6
7
8
9
10
|
|
1
2
3
|
|
WH:
1
2
3
4
5
6
7
|
|
WH: Using a tagless template string to construct an english sentence and I stick it into html, what do I get out of that?
AWB: You'll probably get garbage, because the innerHTML parser rules will be applied.
WH: How does foo in the example know how its deferred template will be interpreted? It becomes a really sneaky part of the API, where foo can return different things depending on the context it's called in -- can be string concatenation, various kinds of escaping, etc. This is too brittle and dangerous.
LH: innerHTML should've been forced to apply cleansing on all strings.
BM: How about immediately constructing and scrubbing?
STH: Same issue with E4H
DC: Don't forget about the off-browser cases.
YK: So the socket API should check strings that are created in Node?
AB: Yes
YK: Ok, I said this to be ludicrous.
AB: If you eagerly coerce to a string, you lose the structure of the object: which part of was a template and which part was data.
WH: We have no way to tell which part is which. [In the example above, if foo returns a deferred quasi, it's like it returns a bag of stuff that it wants joined together but it doesn't say what the stuff is (individual characters? names? rows in a table? entities? script statements? HTML elements?) or how it should be joined. It's not clear to anyone reading foo's code how what the semantics of the bag of stuff is. This is too brittle.]
STH: The point Yehuda is making, is that people make code and ship it out over the wire.
AB: ...describes the way Ruby server programs create outbound blobs that from templates and data that are flatten just before sending.
YK: I wrote that.
...Discussion about JavaScript developers, use of strings vs. DOM authors creating APIs that can handle template strings
AR: This is a new string of a different type
YK: We'll need to blacklist all strings if this is the case.
MM: ...introduces Mike Samuel's work
BM: Summarizing...
- Adam: We control all user code
- Yehuda: We control no user code
AK: Specifically, Yehuda refers to all existing code that follows a form where:
"string..." + " is concatenated";
and used to assign to innerHTML (or similar)
MS: Able to successfully migrate a codebase from ad hoc work-arounds. This used closure templates. Statically compiled version of templates.
STH: Is the argument leaning towards tagless or tagged, or is that not relevant?
MS: The system worked with nested script, css and html. In cases where developers needed, they circumvented the system.
YK: ...recalling hardships of Rails upgrading for a similar auto-escape system.
...
YK: Happy with current system + html default handler provided by the browser(*)
DH: Template strings are useful for other reasons: multiline strings, etc.
MM: Yehuda's suggestion (*) is good
STH: Established that we wanted a delay handler, which produced a delayed template string per Mark's suggestion
MM:
- Immediate String interpolation
- Delayed Template String
(Summarized from 1 & 4 from the list above)
LH: This delayed template string concept is now a second string type in the language and I'd be afraid to use them because they I can't rely on them.
MM: Is anyone opposed to #1? (Adam)
RW: Will any of the implementors here remove the template string feature or tagless template string handler.
No?
LH: I was not comfortable with "quasis" when they required a tag, and even less if they produce a delayed thing. ...This forks the string "type" WH: That's exactly what I was trying to say earlier. Deferred quasis are too brittle.
MM: Can process based on context
WH: This is just another bug. Makes the problem far worse if you have a function that returns a template string.
DC: The reason we went with template string over String.prototype.format was because this was safer.
MM: (to Mike) Do you find #1 & #4 acceptable?
MS: Yes.
AB: (whiteboard)
1
2
3
4
|
|
LH & AB: ...discussing the value of #1 & #4
STH: Reviving #2 & #3
- Drop template strings
- Current status with default handler that interpolates
- No tagless template strings
- tagless template strings with no interpolation
- tagless template strings produce delayed template string objects, with toString
AR: Leaning on #2 or #3
YK: Nobody wants #2 or #3
WH: I want #2
DH: If we go with #2 or #3, we should just take it out of ES6
Discussion about a provided tag, called "s"
RW: Which means we now have a binding "s" and minifiers and existing code conflicts.
MM: Argument for #3...
DH: This is a tremendous failure of our duty.
MM: My preferred option is that we agree on something ...#2 does not subtract value
BE: Opportunity cost
MS: (Arguments for the current system.)
WH: Some browsers used to have a behavior that allowed regexp to be called without exec, and called directly—should we be able to take that out?
STH: Should a programming language not be allowed to have a feature that all other languages have?
AB: I'm not a programming language designer, I can't answer that
STH: That's a cop-out, because that's what you're asking us to do.
DH: (disdain)
WH: Originally, I wanted #1, now I want #2 because its too easy for people to forget to add "html``"
BM: #0 and #1 are the best cases, #0 adds no additional security risks. #1 is the pure option. #2 changes because you add to the boilerplate. The rest are a new thing. ...I'm for #1 because either you do it or you don't.
STH: Answer this... Is this something that all languages should do? Or just JavaScript because it's bound to the web?
AR: Yes, we have to pay the cost for the good of the web and yes other languages should've done this (ie, not had the equivalent of untagged template strings). ...wants #3
RB: re: #3, important to have to think about what kind of handler need you need to use.
YK: That might work for your case, but the wider world will just use the interpolation tag.
...
DH: We're flailing. We should just go #2 and just move on, because I'm failing to make my case.
WH: I like #1 and #2, which are similar, but prefer #2 purely for a couple of practical considerations:
- Forgetting the html in html
...
causes a syntax error instead of introducing a security hole. - s
...
is preferable to...
because it's practical to search for sin general-purpose editors, while it's not practical to search for only the occurrences of
that do string concatenation.
AC: If using this feature and just want to use string interpolation, why should I have to think about "raw" when "raw" doesn't really even reflect what I want.
(Allen leaving. 4, 1, 3, 2)
AR/AC: ...continued discussion
Beginning to devolve.
YK/STH: arguing that it's not the language's job to hand hold
AR/AK/AB: ...disagree
WH: (whiteboard)
1
|
|
(illustrating the dangers of blindly coding with html`` concatenations everywhere)
(Running out of time)
MM: What is the intersection?
DH: We're headed the wrong way, forcing into a design approach that we don't do.
RW: Should we table?
DH: Yes, that's where I'm heading.
AC: We may never get consensus
DH: We won't give up, we've gained consensus under worse duress.
link Conclusion/Resolution
- Tabled.
jQuery Mobile Team Meeting – Mar 14 2013
- Attending: Todd Parker, John Bender, Jasper de Groot, Jason D Scott, Anne-Gaelle Colom, Gabriel Schulhof, Alex Schmitz, Ghislain Seguin
link Todd
- No meeting last week
- 1.4 Planning in early stages, organize into sub-teams
- Plugins & API – Ghislain, Bender, Alex, Gabriel
- UI/Mobile API and code standards, shared core
- Widget review and re-factoring for performance, bug fixes
- Markup & Theming – Todd, Jasper, Mat, Jason, Ben (Codiqa)
- New theme framework and icons
- Markup simplification
- Docs – Anne, Ralph
- Plugins & API – Ghislain, Bender, Alex, Gabriel
- New jQuery Mobile site and blog in progress (Ralph, Scott)
- Maintenance release schedule:
- 1.1.2 and 1.2.1 within the next week. Branches updated, blog posts with changelogs drafted
- 1.3.1 within 2 weeks
link John Bender
- Method list https://gist.github.com/johnbender/3a4898465e4c0a9092eb
- not much to get rid of (effects)
- Widget Regsitry
- Testing on travis
link Jasper de Groot
- bit of triage and demo center bug fixes
link Anne-Gaelle Colom
- Liaised with Brad Lassey to get Firefox OS phones sent to Todd & Mat
link Gabriel Schulhof
- Fixed a bunch of bugs and merged a bunch of PRs
- Need review
- https://github.com/jquery/jquery-mobile/issues/5710 (strip query upon submit via GET)
- https://github.com/jquery/jquery-mobile/pull/5768 (move _handleHashChange, _registerInternalEvents, _bindPageRemove, and _maybeDegradeTransition to $.mobile._private)
- Idea from Changsuk’s team: Lazy-load widget definitions -> This could play into the widget registry, because we could modify not only the way we enhance widgets, but also the way we define widgets. Basically, we load the library without defining any widgets, and then, upon the first pagecreate, we check all the widgets that we need for the page (presumably via initSelector), execute the $.widget call for each type of widget we have found that we need, and then enhance the page. After the page is displayed, we can execute $.widget for the rest of the widgets from an idle loop. The mechanism we use for resolving enhance-time dependencies can also be used to make sure that the superclass is defined before the subclass.
- More generally speaking, Changsuk said that, the fact that our library consists of one large IIFE, JS loaders cannot properly lazy-load, because they do not see the insides of the IIFE and they have no choice but to run it. Does the fact that we’re now trying to do all this lazy-loading by hand mean that we have missed the opportunity to organize our library such that JS optimizers can do some of this lazy loading themselves?
link Ghislain Seguin
- Travis CI integration, now using build matrix to spawn tests cycles against different jQuery versions. So now these run in parallel.
- We still need Jenkins for git build ( latest ) & testswarm testing
- Shut down master and 1.3-stable Phantom builds on Jenkins
- I need to work with the infra guys because the git build was renamed to -git instead of -latest per Corey’s request but it doesn’t show on code.origin.jquery.com
- Started working on splitting unit tests and integration tests. Once that’s done I need to create a new Jenkins job that will run the integration tests.
link Alexander Schmitz
- began work on removing page.sections and toolbar widget.
link Jason Scott
- Added cover transitions from the BlackBerry 10 theme to the main project.
- Working on optimizing slider performance, feels laggy on BB10
- Helping David (on my team at BlackBerry) with adding a top panel, originally for BB10 but the main project can also benefit from it. Should be up for review in a day or so.
Ecma/TC39 Meeting – Mar 13 2013
link March 13 2013 Meeting Notes
John Neumann (JN), Norbert Lindenberg (NL), Allen Wirfs-Brock (AWB), Rick Waldron (RW), Waldemar Horwat (WH), Eric Ferraiuolo (EF), Erik Arvidsson (EA), Luke Hoban (LH), Matt Sweeney (MS), Doug Crockford (DC), Yehuda Katz (YK), Brendan Eich (BE), Sam Tobin-Hochstadt (STH), Alex Russell (AR), Dave Herman (DH), Adam Klein (AK), Bernd Mathiske (BM), John Pampuch (JP), Avik Chaudhuri (AC), Edward O'Connor (EOC), Rick Hudson (RH), Andreas Rossberg (ARB), Rafeal Weinstein (RWN), Mark Miller (MM), Reid Burke (RB), Edward Yang (EY), Dan Stefan (DS),
link 4.14 Make new Date(dateObj)
(Presented by Allen Wirfs-Brock)
See: https://bugs.ecmascript.org/show_bug.cgi?id=1257
AWB: Propose to fix this by spec'ing the Date constructor to special case date object arguments and produce an accurate copy of the date object.
DC: Produces a clone?
AWB: Yes.
DC: a Issues with toString?
AWB: No
NL: Bug mixes ES5/ES6 spec language: DefaultValue/DateValue?
AWB: Not an issue
link Conclusion/Resolution
- When date object is passed to the Date constructor, it makes an accurate copy of the date object.
link 4.4 Spec Update
(Presented by Allen Wirfs-Brock)
http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts
link RegExp global, ignoreCase, multiline, source, sticky are now prototype accessor properties rather than instance own data properties.
AWB: WH's question, "why are the flags now accessor properties?" (re: RegExp global, ignoreCase, multiline, source, sticky) is necessary to support a web compatible "compile" method. The web reality takes an existing instance and reinitializes a new instance.
MM: SES doesn't whitelist "compile", but could we specify "compile" to be SES whitelistable. Freeze, no longer modifiable by compile
Example:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
|
DC: What is the history of "compile"?
AWB: Not sure, but I believe it was JScript
link ArrayBuffer and TypedArray object length no longer restricted to 2^32 limit
DH: We should talk offline about making sure this is future proof
MM: is the new length 2^53? If it goes over, there will be a length that can't be represented
...Mixed discussion about the length limitations of existing arrays.
AWB: Isn't really an issue, just allows the length of arrays to be sufficiently large. I believe this is the future proof solution
ARB: Is it inconceivable that you might want to create a TypedArray backed by a large mapped memory?
DH: Not inconceivable. ...Regardless of whether you want something 2^53 or above
YK: Agree with Allen that this is probably sufficient.
DH/AR: (brief discussion about ownership of TypedArray spec)
AWB: Can't use the same methods as Array, because they use 2^32 length.
MM: And are all generic, so really work on "array likes"
AWB: It's not clear that they should work and it may not make sense to have these methods. There are possible solutions
WH: An example of non backwards compatible?
MM: Sparse array that's not populated up to the limit and push on it? What happens?
WH: Calls ToUint32 on it?
AWB: Yes
WH: Doesn't consider those array like?
AWB: Array spec, gets and sets, does its own Uint32 ...Need to look at each of these methods and see what can be done to make these compatible.
BE/AWB: (mixed discussion about historic compatibility issues)
BE: We can try it and the first sign of trouble, back off.
MM/AWB/BE: (agreement)
WH: The main use I see of ToUint32 is to call it on the existing length. Indices passed in as arguments are generally processed via ToInteger. As such, getting rid of the ToUint32 in generic Array methods applied to non-Array objects shouldn't present much difficulty (when they're applied to Array objects the change would be invisible because Array length can't reach 2^32).
AWB: But it doesn't have to be an array ...We should move on.
link 4.5 Private Symbols, WeakMaps, and Relationships
(Presented by Mark Miller)
Slides (PDF, will prompt download): http://wiki.ecmascript.org/lib/exe/fetch.php?id=meetings%3Ameeting_mar_12_2013&cache=cache&media=meetings:relationships.pdf
MM: Concerned about the overlap in functionality between WeakMaps and private Symbols.
...WeakMap named with the word "Map" inverts the thinking.
...Allen noted that WeakMaps are about a Relationship, between two objects.
Legend:
base is key field is map
(Slide 2)
"Map" inverts thinking (the use of ">>" signifies the that the item on the LEFT is usually better for most purposes then the RIGHT)
Syntax: base@field >> map.get(key) ...Describes the relationship more accurately
GC: impl(base)[field] >> impl(map)[key] ...A better implementation on the LEFT, despite most implementing the RIGHT
Lookup: Inherited props >> own props
Intuition: Relationship >> Symbol >> Map
Unique Symbols ok.
STH: Weak hash tables are found in programming languages and people want them in JS, but they historically fall in the RIGHT. Why can't we declare victory and go home?
MM: I feel like we can declare victory, but more work to do.
WH: Let's avoid a meta discussion.
(Slide 3)
ES6 Encapsulation Mechanisms
Closures hide lexical state (ES5)
Modules hide non-exports
Direct Proxies hide handler and target
WeakMaps hide keys, do rights-amplification
Private Symbols
(Slide 4)
GC: base@field = value ...Not discoverable given "base". Have to have both "base" and "field" to get value.
Abstract heap maps(base, field) => value base and field reachable -> value reachable
...Introduces an "and" into the previously only "or" GC map
Obvious representations:
impl(base)[field] => value better when field lives longer ...When base dies early, it will take the association with it, by regular GC and without needing ephemeral
impl(field)[base] => value better when base lives longer ...When field dies earlier, it will take the association with it, by regular GC and without needing ephemeral
(Slide 5)
GC by use case
When base is known to live longer Just use a map (per Yehuda)
oo private field is known to live longer. Just use representation #1
Most remaining WeakMap use cases would do better with representation #1 (untested claim)
(From a GC perspective)
MM: The GC cost is significant. If you chose the wrong implementation, every object that gets trademarked is retained by the WeakMap until you invoke the ephemeron collection algorithm.
ARB: It's worse in v8 because it has an incremental GC that currently can only run that on full collections
MM: w/r to normal access, I believe it's a wash
AWB: I don't think it's a wash, case 1 requires an index, case 2 requires a hash code
(Slide 6)
GC by use case
Only need ephemeron collection when
- you guessed wrong relative longevity
- you care about the memory pressure
Felix's O(N) algorithm is affordable with inverted representation
Examples: Membranes
MM: Membranes are an example where you still need the ephemeron collection algorithm
b is base object f is field
L is left side R is right side
T is target P is proxy
(Slide 7)
Transparency vs Privacy ...Membrane:
Test: bL@fL = vL bR@fR === vR
...see slide
[Whiteboard Example, get image from Sam]
MM: Propose changing the name of WeakMap and changing the way we specify and describe them for implementors to think about.
AWB: Last meeting, we discussed cases... eg. when you invoke a method whose this object expects access to the private state, but it receives a proxy, it will break. I believe the solution might solve the problem
YK: |this| binding issues are orthogonal to this issue
BE: (Agree)
MM: (refutes)
WH: I challenge on this, there is a claim that we don't need private symbols and that they're broken, but we need to do things that private symbols are for. So why can't private symbols work the same way?
MM: This accomplishes things that we needed private symbols to accomplish, if you want to propose changing the name of w
WH: I want to see common uses of private symbols and how you would replace them.
MM: I haven't shown the broken solutions...
STH: I think that would've been much more helpful then showing what works today and that you wouldn't change.
MM: I believe this is an acid test to prove the transparency
WH: Implement private symbols in terms of whatever you're proposing.
MM: fT
is a private symbol
WH: ...
MM: I'm trying to answer your question
WH: What would I need to do differently and why, using your glorified new approach.
MM: In the expansion of a class that uses a private symbol, for each declared private instance variable, there will be a private symbol per instance variable.
WH: I think you'll need to write it down.
MM: (describes semantics, based on Slide 8)
WH: You're saying private symbols work if they adopt this semantics
WH/STH: What are the changes?
STH:
- There is no trapping on writes and reads of proxies, passes through
- proxy a private symbol and write sets and gets, trapped to the handler that has that private symbol.
...In Mark's defense, this is a substantial change to how we think about private symbols
AWB: It's a new type of access on an object, with a new type of state. A new, different operation with separate behaviors
YK: Will the vast majority of JavaScript programmers have to understand this? This is the most important question for me
ARB: ...?
TVC: Don't need to change proxies in anyway
YK: Not actually my concern
STH: Need to think of these as something more then properties
MM: Thinking of them as properties is what caused me to gravitate towards addressing
(Slide 9)
Desugaring Private Relationships
1
2
|
|
(Slide 10)
What about symbols and strings?
1
2
3
4
5
6
7
8
9
10
11
12
|
|
MM: Don't want to use string name "get" and "set" for the invocation, I want to use a symbol
WH: What is the implementation of @geti?
MM: The semantics of WeakMap's get, with exception that if the key isn't found, it tries the object the key inherits from (i.e., follows the prototype chain) until it finds a key or fails. In other words, it implements the inheritance semantics we expect of accessing properties. Given the use of representation #1, this can reuse the existing optimizations for inherited property lookup.
...?
MM: Private symbols, not discoverable
AWB: You've transformed it into a alternate MOP level operation, but you could've transformed it into a new MOP level operation... (missed this before Waldemar interrupted)
WH: This was my proposal 3 years ago...
MM: Explanation...
WH: Not allowing these things to have normal descriptor rules is a bug.
STH: Exactly, the existing proposal reuses the mental model of JavaScript programmers that we should continue to use. Same is true for encapsulation at the property level and GC mappings.
AWB: If you want true privacy
WH: ... You need
AWB: You can't proxy anything that has private state. Cant proxy any built-ins, or anything with private symbols.
BE: Asking TVC to address Waldemar's concern
WH: When the issue of membranes vs private symbols first came up, I showed an inversion approach, instead of asking the object's proxy to look up, you'd ask the private symbol's proxy. This had been intended to solve the proxy privacy leak problem (don't want object proxies to see the objects' private state), but it's essentially the same issue and solution.
TVC: Having property access by the private symbol
STH: Mark is proposing something that has similar semantics, without a new meta operation, but pays for that by making it less like true properties
WH: So which is it?
MM: If the definition of WeakMaps is something you "stick things into", then the answer is private symbols.
WH: Please show an example how we'd actually use this and how it would interact with a proxy
(break for lunch)
MM:
private is a pseudo-syntax mechanism
1
2
3
4
5
6
7
8
9
10
|
|
Desugars to...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
|
YK: If you're calling add through a proxy?
MM: If you're calling one Point proxy from another Point proxy, the
YK: Use case, I want the |this| binding to be the proxy
MM: Call add() method on a proxy of a Point If the right operand is a proxy,
BM: a proxy to a point doesn't have an x
AWB: Specifically, a proxy to a point isn't registered in x
...Concern: if you had done toString simply as a get access
YK/STH: If Proxies are going to fit into the language, with any sort of concept of private state, then we need to solve the problem, and this doesn't solve the problem.
MM: Use membranes.
WH: If you come up against this problem many times and each time the answer is membranes, then we need to add membranes, not proxies.
General Agreement.
STH: Until we decide which side of the solution we want: either transparently proxying objects with private state should work, or private state can indicate that something is a genuine not-a-proxy instance of an abstraction (such as Date), then we can't possible have a solution.
YK: Hiding implementation details that manage private state that can't be proxies.
AWB: Virtual object vs Caretaker
BE: Not going to make unstratified traps
YK: only need a small amount of traps: get and set
...Can't go down this road.
(going in circles now)
BM: Notes that the next logical step is interfaces, where you define an interface and proxies implement against this.
BE: Can't apply an interface to already born objects.
BM: if you pre-plan that the object is inline with the interface then security is under control
BE: We should defer private symbols
AWB: If we do that, then there is no private branding on the object
STH: Doesn't solve the problem for "what does proxy for dates do"?
More discussion about the general flaw of proxies wherein... objects that have some form of internally implemented "private" state cannot be observed and therefore not subject to trapping.
MM: Can we agree that transparency through membranes is a requirement?
AWB/STH/YK: Agree its important, but there are a lot of requirements.
MM: A champion group should go and solve these problems. Retaining WeakMaps, deferring private symbols very closely matches the proposal.
STH: ...
MM: Just want to consolidate the issues
STH: Bad idea to postpone WeakMaps, which useful and are already shipping in browsers. Bad idea to postpone anything based on a particular issue with Proxies. A separate issue with regard to the design of private symbols. None of these are solved by adding "@" to represent a WeakMap.
WH: It seems like @ for WeakMap makes sense
BE: Too much for ES6
MM: Regardless of the syntax/API, the slides show that we should encourage implementers to hang the state off the key, not the base.
AWB: The WeakMap abstraction we have is fine as is. If an implementation wants to invert its handling of keys and the map, then that's fine too.
WH: (some comment about private state?)
STH: That's not related
AWB: (re-iterates)
MM: The inverted representation is the better one.
YK: So, what is your proposal?
MM:
- My proposal is the private symbols get postponed to ES7
- WeakMap gets renamed to reflect the inverted thinking
- If we adopt the @ syntax in ES6, I want to be able to use a WeakMap on the right side
...Don't care so much about the renaming, but feel that it could add clarity to the feature
RW: (Disagree based on experience teaching the concept)
WH: no consensus on class without private symbols
MM: Rick, can you find the history of this?
RW: (recounts two meetings where Waldemar was not present, but a general consensus existing with the understanding that Waldemar would still have something to say. At Northeasten, Allen presented @-names, in which Waldemar found to sufficiently meet his privacy requirement for classes)
...Discussion around class private state as a whole.
BE: We need to synthesize what's going into ES6. Waldemar claims this must include some way of adding class private state.
STH: I would like to stop this conversation and allow myself time to think about this.
BE: Done.
link Conclusion/Resolution
- Sam, Mark and Allen to work on "relationships" and varied representation in ES6.
link 4.3 Proxy
BE: We've had prototype implementations for some time, we made it through the change of API. We use them extensively.
link 4.16 Current Status of ES6
(Presented by Luke Hoban)
Spreadsheet: http://sdrv.ms/Z9pQxs
AWB: Based on this review, we should shoot for December 2014
Discussion of time tables for completed spec reviews
NL: Also need to look at progress on implementations.
NL: Concerned about impact on Internationalization API 2.0 – need to evaluate whether to base on ES5 or slip to December 2014.
link Conclusion/Resolution
- November 2013, Final review draft
- June 2014, Editorially complete (STH: we said June in the meeting, but July makes more sense, since we don't have to submit to the GA until September, IIUC)
- December 2014, ECMA approval
link 4.7 Runtime costs of the override mistake
(Presented by Mark Miller)
Override Mistake http://wiki.ecmascript.org/doku.php?id=strawman:fixing_override_mistake
(Request spreadsheet)
RW: Would like to see the most minimal piece of code required to illustrate the operation, measured by executing the operation in several rounds with MAX number of executions calculated to a mean value. Also, there is use of an in
operation which will skew the results between Firefox (a bit faster) and Chrome (slow)
WH: I'd like to see comparisons of non-frozen vs. frozen to see whether the two order of magnitude Chrome slowdown is caused by freezing or inherent slowness of push and pop.
Varying, lengthy discussions around SES techniques and the implications of the override mistake.
Non-issue for code that doesn't freeze.
link Conclusion/Resolution
- Investigate instrumentation when silently fails non-writable prototype properties.
jQuery UI Team Meeting – Mar 13 2013
- Client-side updates for download builder
- concat and minify JS
- concat and minify CSS
- templates rendered on the client using Handlebars
- 1.10.2
- planned for this week
- Prototyping Pointer Events polyfill
- looking into jQuery special events implementation
- reviewing hand.js by MS Open Tech
- reviewing toolkitchen polyfill
Ecma/TC39 Meeting – Mar 12 2013
link March 12 2013 Meeting Notes
John Neumann (JN), Norbert Lindenberg (NL), Allen Wirfs-Brock (AWB), Rick Waldron (RW), Waldemar Horwat (WH), Eric Ferraiuolo (EF), Erik Arvidsson (EA), Luke Hoban (LH), Matt Sweeney (MS), Doug Crockford (DC), Yehuda Katz (YK), Brendan Eich (BE), Sam Tobin-Hochstadt (STH), Alex Russell (AR), Dave Herman (DH), Adam Klein (AK), Edward Yang (EY), Dan Stefan (DS), Bernd Mathiske (BM), John Pampuch (JP), Avik Chaudhuri (AC), Edward O'Connor (EOC), Rick Hudson (RH), Andreas Rossberg (ARB), Rafeal Weinstein (RWN), Mark Miller (MM)
link Opening
link Introduction
link Logistics
link Adoption of Agenda
Mixed discussion regarding scheduling over the course of the 3 days.
Approved.
link Approval of January 2013 Meeting Notes
Approved.
link Adobe
JP: Here to help accelerate the ES6 spec, positive motivation. Excited about Modules, concurrency, debugging and profiling specifications.
BM: Background as trained language designers and implementors and here to help.
JP: Also excited about asm.js
BM: Not sure about the spec status/prospects of asm.js.
Edit (2013-03-22) http://blogs.adobe.com/standards/2013/03/21/adobes-ecma-tc-39-involvement
link 4.9 JSON, IETF changes
(Presented by DC Crockford)
Currently, JSON is an RFC, informational, the IETF version will be an internet standard and there is a minor correction that affects ECMAScript.
The use of "should" in 15.12.2
AR: What is the motivation of the change?
DC: The change involves the mistake of using "should" w/r to multiple same-named keys error. Multiple same-name keys are invalid and must throw an error (vs. "should" throw an error)
LH: This is a breaking change
DH: The worst being the use case of multiple, same-named keys as comments
DC: That's stupid
YK: That's based on on your recommendation to use a keyed entry as a comment, so people naturally used the same key, knowing they'd be ignored.
DC: I would certainly never recommend that practice
YK: It was a side-effect
AR: Which key is used now?
AWB: The last one wins.
AR: Is that the root of the security vector?
DC: Not in ES, but in other encodings
AR: Order matters, unescaped content that follows...
DC: The current spec says "[they should not]", but will say "[they must now]"
YK: Let's define an ordering and make it cryptographically secure.
DC: (recapping to Mark Miller, who just arrived)
MM: You can't do that. (laughs)
MM: You can't change "should" to "must"
YK: Agreed, you cannot change JSON, there are too many JSON documents in existence.
MM: Agreed.
AR: It's possible to ignore this change?
DC: Yes
DH: Then why are we creating a dead letter?
MM: ES has a grammatical specification for validating and parsing JSON. Anything that is not conformant JSON, would not parse. This change loses that property.
DC: Or we don't change the spec
MM: The way that you properly reject our favorite fixes, I think you should apply to your favorite fixes
DC: I'll consider that
AR: There is considerable opposition to this change
DC: Two choices...
- Make it an error
- Continue to take the last one
DC: Decoders have license to do what they want with non-conformant material. Encoders must be conferment to new changes.
MM: Our current encoder conforms...
AWB: I don't think it does... reviver/replacer
MM: No, can only apply objects instead of the original objects.
AR: Did not realize the production/consumption distinction of this change.
WH: Supports this change. ECMAScript is already conformant because it never generates duplicate keys.
MM: With this change ECMAScript would have two unappealing choices: A. No longer be a validating parser (i.e. a parser that doesn't allow any optional syntax or extensions, even though extensions are permitted by the JSON spec). B. Do a breaking change by throwing errors when seeing duplicates when parsing.
link Conclusion/Resolution
- Revisit this, after DC has made a final decision.
- FTR: Majority opposition, no consensus.
link 4.12 StopIteration/Generator
(Presented by Dave Herman)
https://github.com/dherman/iteration-protocols
DH: ...Confirms that there is lack of understanding for Generator "instances"
MM: Clarify terminology
DH: Generator objects are instances of Iterators, in that they have a next
method. The current design is based on a thrown StopIteration
C#, Java, Python apis for comparison.
My opinion, a single method is win.
Concrete proposal:
- The benefit of a single method
- Not based on exceptions
- Compatible with Generator semantics
Iterator API object has a single method:
1
2
3
4
|
|
b/c generators can return an argument, if you're using a return value
1
2
3
4
|
|
for for-of
this doesn't matter, but for libs like q, task.js this is useful for pause and resume with value
If we didn't care, the result value can be omitted
This API was pleasant to write and works nicely with existing idioms
MM: Requires allocation for every iteration?
DH: Yes, will still need the object allocation, but
WH: Does next return a fresh object? or can reuse the same?
DH: Can reuse
AWB: For every iterator in the spec, we need to specify a fresh or reused object?
DH: Yes.
YK: The current API, able to do yield ...returns a promise...
DH: Can still do that, this change is internal and w/r to performance, this should be highly optimizable.
AWB: Anything that uses a method based implementation, will be more optimizable through calls vs exception.
DH: I've never seen an iterator API that didn't have some performance issues
AWB: (refutes) Any method based approach can be better optimized over exception based approaches.
DH: I don't have a solid performance story, but the feedback I'm getting is that there is negative concern about the StopIteration approach, whereas this approach mitigates these concerns. Issues arise when dealing with multiple iterators
WH: If you try throwing StopIteration across iterators, it will be caught
AWB: Or it won't
EA: Surprising: If any function throws a StopIteration, it will jump out of the for-of.
AWB: I noticed this in the examples shown in the github repo
WH: Why I'm in favor... Throwing StopIteration across places where no iterators exist and if code is refactored so that an iterator is present, you'll experience unexpected behavior. (This suffers from the same capture flaws as Lisp's old dynamic scoping.)
LH: When we last talked about this, we whiteboarded the priority order. for-of is the primary case, generator authoring is the secondary case. Cases affected by this: direct API consumption as third and direct API authoring is fourth
If we're really sure the engines will do the work to optimize these things?
A. will this slow down implementation? B. won't be willing to implement due to poor performance?
AR: No implementation wants to ship something that will potentially be slow
LH: Of course, but StopIteration has to go.
MM: One allocation per loop
WH: So is this
MM: Only if you reuse the record
LH/WH: Of course and that's what you want
MM: Then, as Allen said we need to specify this
DH: My inclination would be to use a fresh object each time
AWB: ...you know the first time, because it's the first time that next is called,
MM: My proposal is that you provide stop token as a parameter of next(stop), every time. next(stop) would return either the next value or the stop token.
DH: (clarifying) "iteration" is one time around the loop. "loop" is the entire the operation.
WH: It's possible for next(stop) to cause havoc from one iteration to another by caching one next call's stop parameter and returning it from a different next call.
[Someone had also presented a variant of the proposal where
MM: In order to not allocate on every iteration, you have specify (???)
MM: A new stop token would be generated per loop.
WH: What's a loop? This gets confusing when you have iteration adaptors.
AWB: If the client passes in the token on next(), then it's the client's burden
MM: Anything that's unforgable, unique, or itself side affectable.
DH: Is there support for Mark's API?
RH: If you use Mark's API, overtime...
MM: My API reuses the object for the iterations of the loop, by passing it back in as an argument to next()
RH: To avoid the cost of allocation?
MM: Yes, but only as a token
EA: You can have a return value in a generator so the object passed in needs to be mutated to include the return value in case of end of iteration.
MM: That is a downside of this proposal, where StopIteration would carry the value.
DH: (examples of the two proposals)
Dave's
1
2
3
4
|
|
Marks's
1
2
3
|
|
AWB: (suggests an alternative: pass an object to next, on which next sets the result)
STH: ...is hostile to implementors and user code.
ARB: That's the C-style of doing it.
WH: Suppose the iterator takes an object and returns all the properties, but calls on itself?
DH: Mark's proposal is broken, because it doesn't work with return values of generators.
MM: Agreed.
DH: Don't think that we're approaching consensus, but don't let your idea of perfect cloud judgement. I'm asking engine implementors if this is appealing. The concern over StopIteration is real.
AWB: This is certainly better then the current plan of record
AR: Agree.
BM, JP, AC: Agree
BM: This is also future proof and works well with concurrency and the semantics are sound. It's also easy to implement and optimize.
AWB: All spec iterators/generators must specify a reused iterator or fresh
MM: (further support for AWB's claim)
DH: Not sure if we're trading short term wins for long term losses. Are there long terms
ARB: There is another secondary effect that it encourages better GC
AWB: This shouldn't be a problem for a good GC
MM: I'm really only concerned about the loop aspect
AR: We have the tools to work with hot loops
WH: Alex's point about the escape valve is key
DH: Not discounting the needs of the developers/user code. The method API is appealing, vs. StopIteration
RW: Agree.
DH: (Shows example of C#)
AWB: The third use case that Luke gave, using an iterator and the fourth use case, creating an iterator. ...This API is more complex for user code ...More ways for client code to go wrong
BM: Disagree, this is a safer.
DH: Don't get out of sync. Argue that the Java and C# API are too error prone.
BM: Agree, this is actually superior to the Java and C# APIs
ARB: This is actually the path you'd want in typed languages, minimizes state space
DH: I want to see a better overall interface for iterators and generators, without jeopardizing the acceptance.
MM: In favor of this API, if the implementors are not objecting. Although I don't like the API itself.
DH: Agree, I prefer the pure, stateless proposal
AWB: If an object is passed an argument, the object is used as the value bucket.
DH: Still mutates the object
AWB: But it mutates an object that you've explicitly provided
BM: The issue is not the allocation, but that you have to go to heap at all.
ARB: If you do this pre-allocation thing, it might be observable
BM: But that's the case either way
DH: Is the mutable version going to harm optimization?
ARB: Yes: the object may be shared, in which case mutation may become observable from the distance, and cannot be optimized away
RH: If the object being mutated escapes to an old mutation, this kills potential optimizations.
DH: Seems like consensus on the pure, stateless version of this:
1
2
3
4
|
|
JP: "more" vs. "done"?
(can discuss further)
link Conclusion/Resolution
- Rough agreement (between those present) on pure, stateless version of:
1
2
3
4
|
|
...To replace StopIteration
- Always has an own property called "value":
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
|
- Built-in iterators should be specified as returning a fresh value.
- See: https://gist.github.com/dherman/5145925
- Without Brendan, a champion of iterators and generators, don't have full consensus
link 4.2 Modules
(Presented by Dave Herman, Sam Tobin-Hochstadt, Yehuda Katz)
See: https://gist.github.com/wycats/51c96e3adcdb3a68cbc3
Slides (PDF, will prompt download): http://wiki.ecmascript.org/lib/exe/fetch.php?id=meetings%3Ameeting_mar_12_2013&cache=cache&media=meetings:modules-march-2013.pdf
DH: We're committed to making this happen for ES6, it's too important to miss and I'm going to do whatever it takes. Please remember that you can always bring specific issues directly to us (DH, STH, YK).
...Not going to spend time on syntax. Focus on Module loading semantics to address any outstanding issues, spent last two months working with Sam and Yehuda and polling community leaders to get use cases to work with.
Recognize that some use cases may not be covered, but that's ok.
link Module Loading Semantics
...Currently a notion of having a string-name registry
...Move towards having a separate space for module registration
Minimalism - IN Nested Modules - OUT
1
2
3
4
5
6
7
8
9
|
|
The registry corresponds to a Loader
which creates a Realm
MM: But you can have more then one Realm
DH: Think of Loader
as a virtual "iframe", as a concrete way of describing it. When you create an "iframe", you get a whole new global object with it's own DOM. A Loader
creates a "sandbox" global that can share system intrinsics.
The System
loader.
1
2
|
|
Custom loader:
1
2
3
4
5
6
|
|
Acts like a map, .get()
will get the module
[Module pipeline diagram]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
|
Produces one of three values:
- undefined: default linking behavior
- Module: registers module instance object directly
- {imports : [ModuleName], execute : (Module ...) -> Module, exports : [String]} : invokes execute to produce module, exports optional
...
link Use Case: Module Paths
1
2
3
4
|
|
...is sugar for...
1
2
3
4
5
6
7
8
9
10
11
12
|
|
MM: This is changing the behavior only at the system Loader
?
DH: Yes.
STH: This is the API that several people indicated was important during the last meeting.
link Use Case: ...?
link Use Case: Compile To JS
1
2
3
4
5
6
|
|
LH: Is this updated on the Wiki?
DH: Will update. Much of the changes are about refining API and making common things easy and most things possible
link Use Case: Custom AMD
Creating custom translations for extensions...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
|
WH: Why would you want to do it this strange way (escape text only to then eval it) instead of just letting the text be? [It feels kind of like the folks doing eval("p." + field) instead of p[field]].
DH: (explains James Burke's summary of static asset loading)
link Use Case: Importing Legacy Libraries
(Specifically, not libraries that use CommonJS or AMD, but libraries that mutate the global object)
1
2
3
4
5
6
7
8
9
10
11
12
13
|
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
|
LH: Once we ship this, we want people to start using modules as soon as possible. How?
YK: Realistically, a "plugin" for something like require.js will have to provide an ES6 "shimming" mechanism.
LH: To paraphrase, we're providing the primitives that make the common cases easy to overcome. What about the legacy libraries that won't be brought up to date? Can we provide a simple mechanism?
DH: No, legacy libs that just expose themselves to the global object, without any sort of shimming mechanism are out of reach
LH: Thank you, that's a sufficient answer
link Use Case:
Import AMD style modules and Node style modules. Effectively, ES6 module importing from non-ES6 module.
There is no way to tell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
|
BM: Could you postulate that exports and
DH: You could but, unrealistic
BM: Could be optimizing for module provider, but not consumer... ...
MM: What does the Module
constructor do?
DH: Copies the own properties of the given object.
MM: What is the job of the System.link
hook?
STH: To go from a piece of JavaScript source code to module instance object, translate is string->string.
WH: Is it a module
or Module
instance?
DH: Module
instance object
Take the source code, all the deps, finds all the exports, links them together.
The link hook can return
- undefined for the default behavior
- A Module instance, where everything is done and complete
- An object, with list of deps and factory function to execute at some later time (eg. when all deps are downloaded and ready)
YK: Explains that a two phase system is required whether you're using node, AMD or anything. Now you can use ES6 provided hook.
BM: Optionally specify the list of exports?
DH: Yes.
Conversation about specific example.
MM: Clarify... noting that the positional args is similar to AMD positional args
DH: Yes.
ARB: No static checking for non-ES6 modules?
DH: Yes, it's a hole that can't be filled if we want interop from AMD->ES6 and ES6->AMD (or node)
ARB: Concern about having two imports, checked and unchecked. (implementation complexity concern)
BM: The alternative is to not support AMD and provide only one imports
STH/RW: This is an option, but a worse option.
...Discussion re: static checking for non-ES6 modules
ARB: Every single construct, import, loading etc now has two different semantics to support.
BM: Forces users into thinking about which they need... optimizing for module authors, not module users. The wrong case... otherwise enforce static checking for all module code
AR/STH: Not possible for all existing code
STH: (whiteboard) Indirection via dynamic object makes static checking impossible.
For example, if you write the code:
1
2
|
|
where "some.js"
is an AMD library, then there's no static checking, but if you refactor "some.js"
to be an ES6 module, you automatically get static checking. But if you don't support this use case, then there's indirection:
1
2
|
|
And changing "some.js"
to use ES6 never results in new static semantics.
...Mixed discussion re: dynamic checks vs static checks.
BM: Was under the impression that the dynamic checks might be too late, but it has now become clear that they happen early enough
STH: Cannot create references across Module
instances to dynamic module code.
MM: the world of JS uses feature detection, on the AMD side... can AMD code feature test?
STH: (refers to an early slide, which shows example of importing module as single object, properties can then be tested for)
MM: (confirms that STH answers Q)
DH: Pause on the Question of dynamic import/export (Returns to the pipeline diagram) ...The "fetch" hook is the part where you go get the bits
DH: (Slide: 1. Load and Process Dependencies Diagram) (Slide: 2. Link)
AR/DH: Note that browsers can provide their own plugin points for the Fetch step
MM: All of the hooks have been executed and there is no user code? If this fails, there are no side effects?
DH: Correct
ARB/STH: During
DH: Modified the registry, but there is an inflight loading happening, when the inflight is finished, it will pave the changes to registry. (last op wins)
ARB: When you evaluate a script that imports module Foo, which runs hooks that in turn import Foo into the module registry, what happens?
AWB: Why are they operating in the same Realm?
DH: It sounds like an objection to modifying the list of modules in the registry by downloading code that modifies the list of modules in the registry...
STH: Imagine we didn't have loader hooks, all you could do was eval and had two XHRs that fetched and eval'ed. We'd still have the same issues that we'd have with loader hooks, it's a problem with mutation and concurrency.
ARB: Agree that the fundamental problem will always be there, but have a problem with shared global object for all modules.
DH: If the same module is attempted to be defined in two places, that's an error and is a bug.
ARB: Only when within the same compilation stage, silent overwriting otherwise.
WH: What if module A depends on both B and C and the initialization of B fails?
DH: C remains uninitialized but present in the registry
WH: This breaks the model. It's not C's fault that its initializer didn't run.
AWB: Mark C as never having its initializer attempt to run and run it the next time it's imported.
DH: Moving to next slide
(Slide: 3. Execute)
Produces "Result"
Note that each step in the 3 parts has an Error path:
- load/syntax error
- link error
- runtime exception
...Mixed discussion re: execution despite exceptions
...Mixed discussion clarifying fetch semantics (1. Load and Process) re: dynamically building URLs to batch load? re: browser knowledge of sources?
LH: What does the synchronous timeline of Slide 1 look like?
DH: All normalize hooks first (need names and locations), then all resolve hooks
link Use Case: Importing into Node
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
|
link Use Case: Single Export Modules
DH: Brought this up 2 meetings ago, had a proposal that wasn't ready, it was shot down. This is something that I'm being told is very important and I agree with them. We can accommodate single exports via design protocols, but the developer community may not like it.
DH/YK: (walk through the System.link
implementation)
DH: Can, should do better. Goal: Simple syntactic sugar. It's important, we will address it and we will do so with syntactic sugar. We will create a means by providing an "anonymous export". We will review the "sugar" at the next face-to-face meeting.
...Recognizes the community frustration regarding lack single/anonymous exports.
...No dissent.
LH: (Questions about how this works with the previously shown use cases)
...
YK: (Shares anecdotal experience from developing the ES6 transpiler that was adopted by Square. Positive experience.)
STH: Updated/removed junk from wiki
LH: Can imports be in scripts?
STH: Yes
DH: There was originally a use case that involved jQuery, we can't satisfy this without breaking everything (there is no way to be ES 3, 5, 6 at the same time)
But...
1
2
3
|
|
1
2
3
4
5
6
7
8
9
10
11
|
|
LH: What about concatenation cases?
DH: (whiteboards example of System.ondemand
)
1
2
3
|
|
AWB/STH: (whiteboard)
m.js:
1
2
3
|
|
n.js:
1
2
3
|
|
Needs:
1
2
3
4
|
|
If you concatenate?
m.js + n.js = concat.js...
Needs:
1
2
3
|
|
Arrays for files that contain multiple things
...
ARB: We're over-prioritizing for concatenation. The language shouldn't be hostile, but should stop at good enough. We shouldn't optimize the design of the language around a secondary concept
AWB: modules are a concrete concept in the language, we need to focus on these as a building block
LH:
STH: The claim that concatenation is going to become a not-important part of the web is ludicrous
ARB: I think that mid-term concatenation will harm performance
YK: Do you think that concatenation will go away?
ARB: In the long term, it might
YK/STH: This is what is ludicrous
...Mixed discussion re: library vs. language
AWB: There is a standard loader, defined by the language
...From Arv: AR: Joining files to optimize download and compilation
STH: YUI optimized for reality and found that concatting is important
YK: Should Ember ship 100 files?
AR: Any modern library has a lot of files. Apps/libraries are making trade-offs to get good performance.
DC: Caching is not working. Browser will get better.
AR: SPDY will make things better
YK: Even with SPDY, there is a lot of IO
ARB: It is perfectly fine to depend on a tool for concat
EA: We are designing based on concatenation. We should take that out of the picture. We can always write compilers that does the linking.
ARB/LH: With a compiler you can do linking/bundling and existing and future tools can do this.
STH/DH: There will be holes in these.
LH: module "a" { ... } is leading developers down the wrong path
STH: Recommmend doing modules the node style, where each file is a module
YK: AMD developers use a build system that adds the name to the define(). They don't name the modules in their source. The build system names the modules.
MM: AMD experience speaks in favor of a concatenator.
STH: You will get a compile time error if you import a file that contains a module. ...
ARB: How about adding a way to just register a module as a string containing the source of its body as if it was a file.
AR: Then you have to allocate the string ...
AWB: Wants to use module "abc" { ... }. It is a good way to structure code. And you don't want to tie this to your configuration management ...
STH: The strength of the system is that it supports both
ARB: The approach Allen wants is not well supported because it lacks lexical scoping
AR: If we use a string literal we cannot check the code to do prefetching etc
ARB: It is a string so the string only needs to be lexed, then the parsing etc can be paralellized, not so with embedded module declaration ...
ARB: There is no way to not modify the global registry when defining a module.
DH: The file system (in SML) is also a shared registry. The module registry is no different
ARB: Disagree. There is no way to create a local module here
STH: JS has a lot of ways to struccture code: functions, classes etc and modules do not need to fill this role
ARB: More interested in preventing accidents due to name clashes.
...Mixed discussion of module syntax related concerns
DH: Ability to prevent people from using module syntax?
MM: Yes
STH: For Andreas' concern, look for the names of module declaration strings, check the registry and if any already exist, error.
...Defining a loader with right hook, prevent the mutation of the registry by anyone that does not have access to the loader
MM: Satisfied from a security perspective.
ARB: Would prefer for the default behavior to error, need to be explicit if you want module to override in an imperative manner.
DH: Not opposed to moving towards scoped modules in the future. Just worried about complexities.
ARB: Only concerned about import scope semantics
STH: concern is that polyfills have to use eval
and then System.set
ARB: good to make it clear that polyfills are doing some special
DH: agree with ARB about polyfills
STH: This is something to be deferred without blocking progress, but ok with changing to error to achieve consensus.
YK: agree with STH about consensus, but potentially concerned.
link Conclusion/Resolution
- Default: declarative form of a module is an error if a module of the same name already exists in the module registry.
- Using
System.set
to overwrite an existing module is not an error. - Behavior of errors during module initialization (when some module initializers don't even get started) is still unresolved.
jQuery Core Team Meeting – Mar 12 2013
March 11, 2013
Minutes (Notes) of the meeting of jQuery
Location: #jquery-meeting on Freenode
Attending: DaveMethvin, timmywil, mikesherov, rwaldron, orkel
Time: Noon ET
Official Agenda:
jQuery 2.0 Final
Ship for jQuery Uk (April 19)?
Stuff to be ironed out
.data() implementation
Use in node.js
other?
Sizzle ticket https://github.com/jquery/sizzle/pull/193
- Timmy will land
jQuery 1.10
Hard to move quickly on this, we’ve given zero notice
Need to publicize changes (next bullet) and do a blog post
- Dave to do blog post ASAP
Ship a month or two after 2.0? — mid-June would be Portland
(Add these to Migrate Plugin and document NOW for 2.0/1.10 release)
No script execute by default, must use $.parseHTML
- Groundwork for XSS reduction, but not a complete fix atm
- This would make the no-leading-space restriction unnecessary?
http://bugs.jquery.com/ticket/13417 domManip and empty text nodes
http://bugs.jquery.com/ticket/12838 $.ajax hook point for domManip
change Event.isTrigger from boolean to bitmask
allow multiple args for .replaceWith (ref)
jQuery 1.9.2 — Do we need one? (Doesn’t seem so, none scheduled)
Documentation Day
Tuesday March 12 8pm Eastern time #jquery-dev
Can we get the team together virtually to knock down the docs issues?
- https://github.com/jquery/api.jquery.com/issues
- Move upgrade guide issues to api.jquery.com
Document treatment of various node types ‘n stuff wrapped by jQuery
- What can be put in a set?
- What methods work with it?
bugs.jquery.com
- New home page to improve people’s reporting — on Dave’s plate
- e.g., docs issues go to api.jquery.com
Open tickets triage
jQuery Core Team Meeting – Mar 11 2013
- Attending: DaveMethvin, timmywil, mikesherov, rwaldron, orkel
link jQuery 2.0 Final
- Ship for jQuery Uk (April 19)?
- Stuff to be ironed out
- .data() implementation
- Use in node.js
- other?
- Sizzle ticket https://github.com/jquery/sizzle/pull/193
- Timmy will land
link jQuery 1.10
- Hard to move quickly on this, we’ve given zero notice
- Need to publicize changes (next bullet) and do a blog post
- Dave to do blog post ASAP
- Ship a month or two after 2.0? — mid-June would be Portland
link (Add these to Migrate Plugin and document NOW for 2.0/1.10 release)
- No script execute by default, must use $.parseHTML
- Groundwork for XSS reduction, but not a complete fix atm
- This would make the no-leading-space restriction unnecessary?
- http://bugs.jquery.com/ticket/13417 domManip and empty text nodes
- http://bugs.jquery.com/ticket/12838 $.ajax hook point for domManip
- change Event.isTrigger from boolean to bitmask
- allow multiple args for .replaceWith (ref)
link jQuery 1.9.2
- Do we need one? (Doesn’t seem so, none scheduled)
link Documentation Day
- Tuesday March 12 8pm Eastern time #jquery-dev
- Can we get the team together virtually to knock down the docs issues?
- https://github.com/jquery/api.jquery.com/issues
- Move upgrade guide issues to api.jquery.com
- Document treatment of various node types ‘n stuff wrapped by jQuery
- What can be put in a set?
- What methods work with it?
link bugs.jquery.com
- New home page to improve people’s reporting — on Dave’s plate
- e.g., docs issues go to api.jquery.com