- Released 1.9.0.
- New site: http://jqueryui.com/
- New site: http://api.jqueryui.com/
- New site: http://api.jqueryui.com/1.8/
- New download builder + ThemeRoller.
Author Archives: builder
jQuery Core Team Meeting – Oct 08 2012
October 8, 2012
Minutes (Notes) of the meeting of jQuery
Location: #jquery-meeting on Freenode
Attending:
Time: Noon ET
Official Agenda:
jQuery 1.8.3 this week
essential bug fixes before the 1.9 branching
Candidate tickets, if fixable without high risk of other regressions:
- http://bugs.jquery.com/ticket/12626 (didn’t we wontfix this?)
- http://bugs.jquery.com/ticket/12648
- http://bugs.jquery.com/ticket/12671
- http://bugs.jquery.com/ticket/12672
- http://bugs.jquery.com/ticket/12673
Aiming for Thursday
jQuery Developer Summit
Need to contact attendees at your table this week
- introduction and assessment (determine skill level)
- make sure they have prerequisites set up
- tee up some ideas from below based on their skills
Code ideas
- move the 1.9 deprecated functions to the compat plugin
- Ditch the makefile
- Dave to review open tix for other candidates and add to Summit wiki
- Team can also handle assigned tickets
- Add infra todo to fix trac and new-ticket page?
Ticket votes for 1.9 (and 2.0, really)
- Still need VOTEs!
- Need to get gibson042 on the official list, gnarf?
- http://bugs.jquery.com/query?keywords=~1.9-discuss&col=id&col=summary&col=milestone&col=component&order=priority
Assigned tickets
jQuery Mobile Team Meeting – Oct 04 2012
- Attending: Todd Parker, John Bender, Jasper de Groot, Jason D Scott, Anne-Gaelle Colom, Gabriel Schulhof
link Todd
- Preparing for the DC session this week
- Team is working on 1.3 features and issues for 1.2.1 and 1.1.2
- There will be another maintenance release for 1.1 (1.1.2) in the coming weeks. Timing TBD
- Roadmap draft for the next year close to complete. We'll be refining this a lot as we go, but it maps out the general direction - https://github.com/jquery/jquery-mobile/wiki/Roadmap
- Plans for UI integration/harmonization are in full swing for the next few months - 1.3 will tackle basic conflicts, 1.4 will include a harmonized tab widget from UI
link John Bender
- Branches to merge next week
- slider events to _on
- disable base tag management https://github.com/jquery/jquery-mobile/issues/4456
- First pass at query param support in the hash
- Nav refactor
- two event based approaches so far simple/full hash management
- will require discussion
- normalizing hashchange/popstate as navigate event
- attempting to do forward/back events with history tracking
- lots of considerations
- difficult without conventions/expectations
- two event based approaches so far simple/full hash management
link Jasper de Groot
- triage: issues for roadmap / Dev Summit / 1.1.2
- working on “dynamic popup with images” demo (with robsmuecker)
- https://github.com/jquery/jquery-mobile/issues/5101
- started with the 1.3 tickets assigned to me
- first:
- https://github.com/jquery/jquery-mobile/issues/5045 (slider full width)
- https://github.com/jquery/jquery-mobile/issues/4875 (IE10 transitions)
- etc.
- wait with RWD features until after Dev Summit so we can discuss them first
- first:
link Anne-Gaelle Colom
- nearly completed listview widget in api docs (needs a few more examples and the final code example) (reached the 10k lines mark on the api docs!)
- next week:
- complete listview widget (api docs)
- update resources page (at least add BB10 theme!)
- prepare for summit (checklist of what needs doing)
- if you have items that need to be documented, please let me know
link Gabriel Schulhof
- Fixed popup issue #5118 (page1 -> dialog -> popup -> page2 <- back)
- Added navigation sequence tests
- Fixed #4984 (re-introduce $.mobile._registerInternalEvents)
- Fixed #5104 (making sure loader event handlers are always called with the loader as “this”)
- Cleaned up popup
- Moved some of the inline functions to widget level
- Got rid of “self” wherever possible
- Fixed #5123 (when destroying a popup, do not emit “popupafterclose” if the popup is closed)
- Need to talk about buttonMarkup
link Ghislain Seguin
- Fixed a couple issues in the builder
- Added semver tag handling so the builder automagically checks out a workspace when a semver tag is created
- Prepare for the DC summit
- Start looking into 1.3
link Jason Scott
- Released the BlackBerry 10 theme
- Widgets that could be brought from the theme into JQM core. All of the following can be view here https://github.com/blackberry/jQueryMobile-BB10-Theme/tree/master/docs.
- Progress bars - http://blackberry.github.com/jQueryMobile-BB10-Theme/kitchenSink/progress.html
- Gridview - re-work to use listview for 1.3 prototype- http://blackberry.github.com/jQueryMobile-BB10-Theme/kitchenSink/gridview.html
- Dividers - http://blackberry.github.com/jQueryMobile-BB10-Theme/kitchenSink/building_blocks.html
- Dropdown (Not in the above doc. Check http://blackberry.github.com/jQueryMobile-BB10-Theme/kitchenSink/form.html)
- Transition: cover
- Possibly Overflow menus from the action bar (slide panel widget from stretch goals 1.3) http://blackberry.github.com/jQueryMobile-BB10-Theme/kitchenSink/actionbar.html
jQuery UI Team Meeting – Oct 03 2012
- Working on new API documentation site.
- Created single file XML dump.
- Updated 1.8 docs.
- Setting up 1.8 site.
- Working on new download builder.
- Integrated ThemeRoller.
- Working through open issues.
- Working on new jqueryui.com.
- Added home page, support, development.
- Added lots of old change logs, still more to do.
- Need to update links for downloads and CDNs.
- Implemented new design for blog.jqueryui.com.
- Finished cross-browser testing for all demos and visual tests.
- Updated release script to generate themes zip.
Testing Team Meeting – Sep 28 2012
September 27, 2012
Location: #jquery-meeting on Freenode
Attending: Jörn, Richard, Timo
Time: Noon ET
QUnit
- #317 is looking for an assertion method to compare objects with different constructors
- #320 has an example of loading tests asynchronously. Recommendation is to use autostart=false, then start(), to make that work. Other ideas?
- Will land pull #323 unless anyone has concerns – just quotes “throws” to make old interpreters not throw up
- #326 asks for in “inconclusive” assertion, aka “needs a test”. Opinions?
- #314 – throw up or log a failed assertion when calling start() while already running?
- Related to #320 and #314 is #309
TestSwarm
- Blog post about TestSwarm
- 1.0 Roadmap
- web site in November? Also needs new logo: https://github.com/jquery/testswarm/issues/128
- Timo is working on testswarm-browserstack rewrite, will land update soon, makes it a lot more reliable
- Up next: Improve keep-alive to get rid of timed-out clients faster; should make proper use of the ping-system implemented in TestSwarm recently
- Richard still working on ua-parser ticket: https://github.com/jquery/testswarm/issues/187
botio/mergatron
- What’s the next step to start using that?
- We should integrate that with the Commit Status API: https://github.com/blog/1227-commit-status-api
jQuery Mobile Team Meeting – Sep 27 2012
- Attending: Todd Parker, John Bender, Jasper de Groot, Anne-Gaelle Colom, Jason D Scott, Gabriel Schulhof
link Todd
- 1.2 Final ready for release - working on updating ThemeRoller, Download builder, website, etc. in preparation for launch in the next few days
- There will be another maintenance release for 1.1 (1.1.2) in the coming weeks. Timing TBD
- Roadmap for the next year close to complete, team to review after this meeting
- BB10 theme for jQuery Mobile was released, looks awesome: https://github.com/blackberry/jQueryMobile-BB10-Theme
link John Bender
- Preso
link Jasper de Groot
- have been working on triage, docs and roadmap
- Q for 1.2 final release:
- 2 old pages in docs (not linked anywhere) - delete?
- 2 outdated folders - exclude from zip if possible or delete?
- css/themes/valencia
- experiments/scrollview
link Anne-Gaelle Colom
- This week I have completed button and popup widgets (api docs), including examples. Popups may need a bit of polishing, so will give this another look tomorrow or this weekend.
- I will revisit all currently completed widgets and add code examples to methods and events.
- Then I aim to do listview.
link Gabriel Schulhof
- Building nav sequence tests for various funky initial conditions:
- with and without pushState. Test cases so far:
- Open dialog, close dialog
- Open popup, close popup
- Found #5100 in the process of testing c. with pushState disabled.
link Ghislain Seguin
- 1
Will start working on https://github.com/gseguin/node-amd-builder/issues/4 to remove much of the manual steps involved with adding a new release to the builder.
jQuery Core Team Meeting – Sep 24 2012
September 24, 2012
Minutes (Notes) of the meeting of jQuery
Location: #jquery-meeting on Freenode
Attending: DaveMethvin, timmywil, gibson042, rwaldron, jaubourg (10
minutes)
Time: Noon ET
Official Agenda:
jQuery 1.8.2 shipped — bugs?
Landing common fixes before 1.9/2.0 split
- Should we tag those 1.8.3? (leave it as pre for now)
- Please ID those by next Monday (Oct 1)
- Let’s complete bug fixes before summit (Oct 15)
The split(s) schedule
1.9 split to occur post-Summit (Oct 22)
- master branch will be 1.9
Remove deprecated features and stabilize
Complete the compat plugin
naming? I don’t like jquery-compat-1.9
- jquery-compat.js
warns about using the features, patches support back in
1.9 alpha/beta first, incorporate feedback
2.0 split early December?
- master will stay 1.9 … branch will be 2.0
Ticket votes for 1.9 (and 2.0, really)
- Let’s start voting/discussion this week
- http://bugs.jquery.com/query?keywords=~1.9-discuss&col=id&col=summary&col=milestone&col=component&order=priority
SVG support
- Would like a deeper analysis before official support
- Okay with landing simple SVG fixes
- yet another one: http://jsfiddle.net/qqvzM/3/ (via peol)
- http://bugs.jquery.com/query?status=assigned&col=id&col=summary&col=owner&col=milestone&col=changetime&report=506&order=priority
jQuery Mobile Team Meeting – Sep 20 2012
- Attending: John Bender, Todd Parker, Jasper de Groot, Anne-Gaelle Colom, Mat Marquis, Jason D Scott, Gabriel Schulhof
link Todd
- 1.2 RC2 - Slated for week of 23rd - We’ve fixed a few issues since RC that trigger a new RC cycle.
- Current 1.2.0 blocker issues we’re tracking: https://github.com/jquery/jquery-mobile/issues?milestone=13&state=open
- Popups not displaying on Opera Mini https://github.com/jquery/jquery-mobile/issues/5040
- Select zoom fix not working in iOS6 final - Fixed by Mat Marquis https://github.com/jquery/jquery-mobile/issues/5041
- New jQuery Mobile project logo released. Updated site, docs, Twitter so far: http://jquerymobile.com/blog/2012/09/19/new-jquery-mobile-logo/
- Issues: Jasper and Maurice are doing great on triage, closing bugs w/o specific test pages. Were over 380+ issues two weeks ago, now at 338 overall
- New contributor guidelines added by Jasper, now linked on every new issue form: https://github.com/jquery/jquery-mobile/blob/master/CONTRIBUTING.md
- There will be another maintenance release for 1.1 (1.1.2) in the coming weeks. Timing TBD
- Work on the re-design of the demos and docs is now underway.
link John Bender
- Testswarm - window.history.back
- Need to discuss - https://github.com/jquery/jquery-mobile/commit/6ef910d929edaa4c479eef61a814beb82b685c0f
- Fix for mobile router - https://github.com/jquery/jquery-mobile/issues/4986
link Jasper de Groot
- fixed 2 related CSS issues for 1.2 (issue with float after we removed overflow hidden for the navbar)
- triage: from 380+ back to 330+ open issues (please do a quick scan of the issues assigned to / opened by you)
- created CONTRIBUTING.md
link Mat Marquis
- Fixed select zoom fix not working in iOS6 https://github.com/jquery/jquery-mobile/issues/5041
link Anne-Gaelle Colom
- completed textinput in api docs (doc + inline examples) and added inline examples to search inputs.
- This week, I want to get buttons done.
- Then, I am thinking to complete in the following order:
- Toolbars (header bars, footer bars, navbars)
- Popups
- Listview
- Page Loading Widget
link Gabriel Schulhof
- Fixed #4994 and #5021
- Idea for future navigation: make the URL generation a plugin that is, separate URL generation from history tracking/manipulation
link Jason D Scott
- Added listview option to set the link icon (for 1.2.1)
- More work on BlackBerry 10 theme (should be released next week at BBJam America)
Ecma/TC39 Meeting – Sep 20 2012
link September 20 2012 Meeting Notes
John Neumann (JN), Mark Miller (MM), Norbert Lindenberg (NL), Nebojsa Ciric (NC), Allen Wirfs-Brock (AWB), Luke Hoban (LH), Paul Leathers (PB), Sam Tobin-Hochstadt (STH), Andreas Rossberg (ARB), Brendan Eich (BE), Erik Arvidsson (EA), Dave Herman (DH), Yehuda Katz (YK), Rick Waldron (RW), Eric Ferraiuolo (EF), Matt Sweeney (MS), Doug Crockford (DC), Alex Russell (AR), Rafael Weinstein (RWS), Waldemar Horwat (WH), Rick Hudson (RH)
link Object.observe Update
(Presented by Rafael Weinstein, Google)
REQUEST SLIDES!
Aug 18th, Released an experimental implementation, spec complete, via special Chromium Build. https://github.com/rafaelw/v8
Updates to strawman:
- Updating [[Prototype]] qnqueues a "prototype" changeRecord
ChangeSummary.js (experimental library) https://github.com/rafaelw/ChangeSummary
- Prototypes "diff" view of changes
- Correct observation of "paths" (eg. o.foo.bar.baz)
- Array splice projection (minimal ops to syn)
- Basis for framework usage
YK: Question about splice projections being built in. When splice happens, many records change... is pathologically slow. Fine for v1 to leave it to library code.
RWS: Opted to leave this out... ...explains n^2 issues that arise when changes to an array occur. ...explains rationale for leaving out for the foreseeable future and allow library authors to handle as they see fit for the time being.
DH: How to make a policy decision about "what" to look at in the change of an object. Agrees with this v1 decision, in favor of allowing library optimization patterns to emerge. [We can't determine the "policies" before the needs are fully understood]
AWB: Not just large scale libs, but everyday data type abstractions.
RWS: Sounds like there are specific issues?
AWB: Yes, but not to be addressed in this timeline
MM: Is the synthetic changeRecord adequate for the level of abstraction you may require
AWB: Yes, sufficient.
RW: (shared anecdotal experience writing "Fact" with Object.observe: https://github.com/rwldrn/fact )
RWS: (presenting demo)
ADD LINK
Discussion about "read" notifications and performance concerns.
YK: Willing to move Ember, despite the scale
EF: Did Angular replace all dirty checking?
YK/RWS: Not really possible to remove all dirty checking.
link Observing Computed Properties and Dependencies
RWS: Believe that it is not in scope now or ever.
link Tuning Spec, Implementation Complexity
RWS: ...Is hoping to progress the strawman to harmony. A few slides that discuss remaining issues.
LH: These represent concerns and agreements of several committee members who have been involved.
link Synchronous Delivery?
NO.
link Security Mitigations
Object.getNotifier( frozenObject ) returns null (Out of 3 options: return null, throw, or do nothing notifier)
WH: What happens when the argument is a Proxy?
RWS: Returns the Proxy's notifier
STH: An invariant maintained internally, that if the proxy is frozen it ensures the target is frozen.
ARB: Not sure if this is true.
MM/STH: The proxy cannot say it is frozen if the target is not. Can the proxy say its NOT frozen if the target IS?
WK/MM/STH: Proxy can say it's frozen if AND ONLY IF, the target is frozen.
MM: If the notifier is derived, then the object is frozen, the notifier will continue to work as expected.
Creator of an object:
- creates an object
- gets the notifier
- freezes the object
- releases the object
This is an intended mechanism of the Proxy proposal
WH/AWB/MM: Discussion about notifications from frozen objects. The use of the notifier should ONLY be from the provider of the abstraction.
link oldValue
Most use cases would create copy of all observed data
WH: What about accessors?
RWS: accessors don't notify
WH: That's bad.
MM/EA/RWS/AWB: No, this is intended.
RWS: (Explains that getNotifier can be used to build synthetic events for accessors)
RW: Yes, accomplished this while experimenting with "Fact"
RWS: (Revisits demo to show example of what an abstraction over this looks like)
YK: (Supported use story in Ember)
...Mixed discussion about far future notifier patterns:
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
27
28
29
30
31
32
33
34
35
36
37
|
|
Discussion regarding the feasibility of adding to ES6.
DH: Doesn't need to be in spec to prototype
BE: Worried about sheer weight of work involved in Allen's spec writing.
RH: Moving from strawman to proposal/spec is meaningful to implementor teams.
[some discussion about whether the above construction pattern has efficiency problems; needs implementation experience]
link Conclusion/Resolution
Push for prototype implementations (Chrome already in progress). Encourage others to do the same
Officially Promoted to proposal for ES7.
link Grammar Validation
(Presented by Brendan Eich, Mozilla, Waldemar Horwat, Google, Rick Waldron, jQuery/Bocoup)
Overdue for grammar validation, would be ideal to re-validate.
WH: The following is ambiguous because yield is not a reserved word. It can't even be lexed: boom = yield/area/ height; Note that the current semantic restrictions on where yield expressions can go don't help because they apply after the program has been parsed; with this example you can't even get to the lexing and parsing stages.
Resolution on the yield issue?
link Conclusion/Resolution
AWB will refactor grammar so that yield can only be used within the context of a generator function and yield will not be usable as an identifier there. This will require essentially doubling the number of grammar rules in an analogous way to how the no-in rules are handled today, but on a much larger scale.
BE: Need wider, complete validation that takes into account ASI and noIn.
BE/AWB: Who is going to own this?
link Conclusion/Resolution
Waldemar is going to try to work on this
link Formal Parameter Scope
(Presented by Brendan Eich, Mozilla)
With regard to default formal parameters...
Previously, all to the LEFT are in scope,
let *
:
1
2
3
4
5
6
7
8
9
|
|
Realistically, it should desugar, scope rules included:
1
2
3
4
5
6
7
8
|
|
AWB: functions will hoist, let and const will be in the dead zone and will fail, var will hoist and initialize undefined
BE: Can we agree to get rid of let *
?
With let x
this is an error:
1
2
3
4
|
|
Not let
bindings
1
|
|
let scope would break var scope: bad let scope with magic to break var scope: bad
ARB: (whiteboard)
1
2
3
4
5
|
|
DH: My understanding was that temporal dead zone should error all the way to actual "blessed source code" where the binding is initialized.
Remind why only "no read before write"?
BE: 2 years ago in redmond agreement.
AWB: (explains the rationale and current semantics)
DH: is this a distinction worth making, for let
, when we're trying to say that let
is a better var
MM: let
guards were the original reasoning.
DH: let
guards should be different from just let
MM/WH: No, they shouldn't be different.
STH: Need to provide an argument beyond that
WH: guarded let
should be not be different from a let
. One common option for a guard must be a bottom type that lets through anything, but that's impossible with the same behavior if a guarded 'let' differs from a plain 'let'.
DH: This is far future, hypothetical
MM/DH: related to temporal dead zone discussion.
LH: The temporal dead zone opposition is perf
WH/DH: (discussion of complexity for let
and const
)
DH: I dont want to alienate developers for no good reason (gives supporting argument)
MM: Better to return undefined or immediately error to show where the mistake is made
DH: Want to simplify to "no read before write". The model of let
creates a binding and = assigns a value to it. There is no way to explain that this =
is different from that =
. Refers to Alex's JS is top-to-bottom.
MM: But it's not because you can forward-call functions, because JavaScript allows you to interleave function and var initializations and assignments throughout your program.
DH: (missed not about read barrier)
WH:
ARB: Trying to simulate C semantics within the constraints of a dynamic system.
AWB: Yes, this was the agreement before temporal dead zone. throw if used before init.
MM, WH: Halting further discussion. We frequently eat up time on subjects like this that have already reached consensus. Let's postpone unnec revisitings.
AWB: Ok to revisit for valid reasons...
YK: worried that if no performance issues are found then it wont be revisited.
AR: Points out that there might be real issues with developer understanding. (cites some example, ask to share?)
[[[[[[[[[[[[[[[[[[[[[[[ Temporarily, this happened: Conclusion/Resolution
var
bindings and are in scope within the function- cannot use
let
to shadow a parameter - defaults can refer to any top level binding ]]]]]]]]]]]]]]]]]]]]]]]
link Conclusion/Resolution
Revisit when data is gathered, re: perf or unexpected behaviours
link Array.of Rename?
Recent post on es-discuss from user that doesn't like Array.of
Array.of has been implemented in all of the es6 shim libs (Paul Miller, Axel Rauschmayer, Andrea Giammarchi and others...)
link Array.of()
Makes sense, nice to say and explain. When I reason about a program:
"Here we have an array of elements" (elements, items, numbers, strings)
link Conclusion/Resolution
No change, no revisit.
If we do Foo.new()
, it must be identical to new Foo()
.
link Thin Arrow?
(Presented by Brendan Eich, Mozilla)
We have the fat-arrow, supported by Kevin Smith's research, it's a win. Some voices in the community don't want the unexpected behaviour of the bound lexical this
class, concise methods and fat-arrow are all new, powerful and composable function binding forms.
WH: Don't want two slightly different concepts with a confusingly similar syntax. It would be too difficult for casual users to remember which arrow is which [in the same way as I can never remember in C++ which variant of the ++ operator overload takes an extra dummy argument].
?: Then let's use fat-arrow with an extra 'this' parameter to stand for thin arrow.
WH: That would address the confusion, but is still unnecessary featuritis and doesn't even save much in terms of text, which was its original reason for existence. Saving a couple characters here is not worth complicating the language.
link Conclusion/Resolution
Consensus holds on fat-arrow
link Existential Operator (strawman discussion)
(Presented by Brendan Eich, Mozilla)
Significant desire include a null and undefined check in syntax/operator form (a la coffeescipt)
1
2
3
|
|
Mixed discussion about the needs and use cases as they apply to coffeescript code.
ARB: This is non-compositional
1
2
3
4
|
|
Results in...
1
2
3
4
5
|
|
Non-starter.
DH: Why not an operator that needs to be explicit?
1
|
|
LH: Why would you ever even use it on the first?
BE: Forget all of the problems with coffeescript's impl, the need exists.
YK: In the common cases, where it works, it works well. Where it doesn't, it falls apart unexpectedly.
WH: What about other contexts such as p?[x], p?.q[x], and p?(x) ? [Note that grammar problems arise for some of those.]
General agreement.
link Conclusion/Resolution
Seems useful, but not now. Semantics are unclear
link Generators
link thisBinding
Generator thisBinding is the thisBinding of the original generator call.
1
2
3
4
5
6
7
|
|
link Generator object API?
1
2
3
4
5
6
7
8
9
|
|
...returns a generator instance that will have generator methods
MM: Take a care to expose the APIs that you expect to expose.
DH: Agrees
LH: Specify the generator?
BE: Allen is worried that normative spec will require generators when it's unnec.
DH: spec a simplified generator interface, without semantics, just to define the method interface.
MM: what is the minimal method interface?
DH: send, throw, close
Discussion around specifying a generator contract.
DH: Don't specify what can't be put on generator objects.
AWB: Need something for spec
YK: If everyone implemented iterators with generators
DH: Not super worried about this...
link Conclusion/Resolution
The spec should not specify built in iterators to have 3 extra generator methods (ie send, throw, close) (Currently in draft, needs to be refactored)
Notably: Significant dissent on throwing exceptions for control flow.
Continued discussion of note...
LH: Using a debugger, break on throw, exceptions. Want to catch at the point where they are thrown... on a StopIteration, do I see internals?
DH: Up to the debugger to determine whether or not it should expose
LH: (whiteboard, example misuse of iterator)
BE: Historically, not an issue.
YK: (Question about use of in-band return?)
LH: if this is not an issue, then why not specify
Discussion about protocol specifications, where precedent exists.
link Supplemental tests for Tests 262
SpiderMonkey and v8 are writing tests, can contribute back.
Need parity, it's hard.
link Goals
AWB: January, spec: feature complete.
LH: Multiple implementations?
Concerns about removal of new additions when there isn't enough evidence to support the removal.
Too soon to make cuts when we don't know what to cut.
Ecma/TC39 Meeting – Sep 19 2012
link September 19 2012 Meeting Notes
John Neumann (JN), Mark Miller (MM), Norbert Lindenberg (NL), Nebojsa Ciric (NC), Allen Wirfs-Brock (AWB), Istvan Sebastian (IS), Luke Hoban (LH), Paul Leathers (PB), Sam Tobin-Hochstadt (STH), Andreas Rossberg (ARB), Brendan Eich (BE), Erik Arvidsson (EA), Dave Herman (DH), Yehuda Katz (YK), Rick Waldron (RW), Eric Ferraiuolo (EF), Matt Sweeney (MS), Doug Crockford (DC), Alex Russell (AR), Rafael Weinstein (RWS), Waldemar Horwat (WH), Tom Van Cutsem (TVC, phone)
Recap of Sept 18th notes.
link Proxy
(Presented by Tom Van Cutsem, Free University of Brussels)
link Enumerate Traps Return Types
TVC: change return type of enumerate() trap from array-of-string to iterator. Requires waiving the check for duplicate property names
link Conclusion/Resolution
Drop the duplicate property check. enumerate() trap returns iterator.
link Revokable Proxies
TVC: The Problem
In a nutshell: with direct proxies, one can no longer write a caretaker proxy that nulls out a pointer to its target once revoked. This means that the target can no longer be garbage-collected separately from its proxy.
As pointed out by David Bruant, caretakers are often useful precisely for memory management, where one uses revocation of the caretaker to release the underlying resources, as described here.
Such caretakers were easy to define in the old Proxy design, since the link between a proxy and its target was fully under the control of the handler (i.e. fully virtual). However, with direct proxies, the proxy has a built-in, immutable reference directly to its target. This reference can’t be modified or nulled out.
Proposed Solution
Provide an extension to the Proxy API that allows scripts to null out the proxy-target reference. Of course, the API must be designed with care so that this link can’t be nulled out by any old client of the proxy. Only the creator of the proxy should have the right to revoke it.
Because revokable proxies appear to be a niche abstraction, we propose to introduce a separate Proxy constructor dedicated to creating revokable proxies. Proxies created with the regular Proxy constructor would remain unrevokable.
Proposal:
- Introduce a new constructor function RevokableProxy, next to Proxy.
- RevokableProxy(target, handler) returns an object {proxy: proxy, revoke: revoke}.
- revoke is a zero-argument function that, when called, revokes its associated proxy.
- A revoked proxy becomes unusable in the sense that any operation that would trap to the handler instead throws a TypeError.
- Revoking an already revoked proxy has no effect.
- Once a proxy is revoked, it remains forever revoked.
- A revoked proxy drops its target and handler, making both available for garbage collection.
MM: We missed this in the change to Direct Proxies, thanks to David Bruant for identifying
...Bikeshedding the spelling of "Revokable"
MM, WH: Should be "revocable" ?: "Revokable" would seem like a typo to many folks, as it's an unusual spelling of the word.
LH: This is bringing another constructor...? Do we want to duplicate all of the functionality?
RW/DH: Agree this is an issue.
MM: static on the Proxy object?
Yes.
... Discussion about the naming.
Proposal: Proxy.revocable
DH: perhaps too academic? Consider alternative names: nullable, ...? MM: We can decide later.
Should Proxy.revokable return the tuple as an array or an object? MM: object: non-positional + Javascript has sufficiently lightweight notation for objects. STH: then the name "revoke" is part of the API
Question as to whether we really need two kinds of proxies. BE: yes, non-revokable proxies have less trap overhead (no null-check)
Discussion about whether revokable proxies introduce new ways for interceptable operations to behave.
WH: Not sure about this as a feature, w/r to future hostility...
- eg. if "===" would trap to the handler how does this work with that?
MM: trapping "===" would be a significant change on its own, independent of revokable proxies
TVC: The only type test that is affected is typeof: once the proxy is revoked, it drops references to its target and its handler, so it can no longer forward the typeof test to its target
BE: It remembers "function" or "object" TVC: right
DH:
RWS: Does this problem exist...
STH: revokable proxies don't add any new semantics b/c you can already write a direct proxy that throws the same error on every operation (it just uses more memory)
WH: Direct proxy, not allowed to muck with
MM: Are
TVC: Equivalent to a handler that implements all its traps to unconditionally throw
STH: RevocableProxy adds no new semantics to the language. except for allowing the proxy to be nullable
WH: I'm not sure about it
DH: He jsut gave proof.
MM: The semantics change to the handlers always throwing on all traps.
WH: Are there other traps affected by this?
TVC: New traps added last meeting will not be affected.
WH: So, a frozen object can "unfreeze" itself?
MM: No
WH: An object that is frozen can later refuse that its frozen Concern about trapping isFrozen etc.: these tests are no longer stable. MM: but are still fail-stop. The integrity guarantee (i.e. that it always returns a correct answer) is more important than the availability guarantee (i.e. that it always returns an answer)
Alternative to trapping isFrozen etc.: cache stable outcome of certain operations in the proxy, and afterwards no longer trap.
STH: After the first time isfrozen is true, mark to no longer call.
AWB: would preclude valid use cases that e.g. want to log all requested isFrozen operations.
Is there a situation where revoking allows an operation to throw where it previously couldn't with non-revocable proxies? TVC: should not be the case
MM: Specify that...
The revoke action is observably equivalent to changing the state of the handler to always throw on all traps.
WH: An uneasy feeling about what else is hiding
BE: Mark and Tom have significant work on this issue.
MM: The ability to evict a subgraph is important once frozen, stop trapping. once non-configurable, non-writable data, the value continues to be accessible. this loses the garbage collectability of membranes
...
DH: Question of clarification re: two constructors, are they necessary because there is no way to return two things from a constructor.
BE/MM: They create things that are just too different
BE: There is no mutable state within the proxy that is actually "mutated"?
TVC: not currently. If we want to pursue the above idea where a trap is disabled once its stable outcome is observed, then the proxy would need to be mutated.
MM: If you could falsly claim to be not-frozen after being frozen, then there would be issues with reliability, but doesn't exist. ...
MM/AR: (discussion about execution points in ES5)
AR: If you have a file name object, hand it into some API, it might throw, it might not throw... how is this different that what happened before?
WH: Again, still not sure about effects throughout proxy
MM/AR: (discussion about frozen object stability)
AR: Why do we care about the stability of frozen object w/r to revocability?
WH: (summary) Not clear what the security consequences of revoking a frozen object, either via a revocable proxy or via traps, are; this hasn't been thought about.
MM: This has been thought about and discussed off-line.
link Conclusion/Resolution
- we want revocable proxies
- further discussion is needed on revoking frozen objects, either via revocable proxies or via traps
link Proxy and Private Names
TVC: We don't want Proxy to inadvertently leak private name properties.
In Redmond, we discussed that we would seperate string properties and private name properties into separate traps.
Later determined that this would become cumbersome.
Proposing to add a third argument to the Proxy constructor: a "whitelist" of private name properties that are allowed to be trapped.
WH: unique vs private names? STH: The primary purpose of Names is to avoid name clash and non-forgeable. Uniques should be reflected, private: not.
WH: What makes them non-forgeable
STH: They are objects
DH: And are as non-forgeable as objects,
WH: Why do we need both? Unique, Private?
AWB: They are both useful
STH: Unique names give you actual unforgeability
MM: as opposed to the "unguessability" of randomly chosen strings
DH: About the whitelist, instead of requiring a WeakSet, can it be anything that can be passed to a WeakSet, like an Array?
MM: Should probably use a WeakMap...
EA: An object that has a method that takes the public name string and returns the private name object, if you have access to that, you can extract the private data.
STH: Erik is right, but it a
MM: if we don't drop the .public property, don't need the whitelist but instead just the resolvePrivateName trap. If we stick with the whitelist, don't pass the .public property to the resolvePrivateName trap
TVC: Why is it a WeakSet? Because we dont want someone to provide their own collection that can extract the private data.
TVC: Why is there a resolvePrivateName trap? Say an operation is performed on a proxy involving a private name, and the proxy doesn't know this private name. Two reasonable options: 1) forward to target, i dont see results, I dont care. OR 2) throw exception. A policy decision to be made by the handler: when working on a private name that we dont know about, forward or throw?
DH: Should champions take this offline?
STH: It's pretty important and could mean a significant simplification.
WH: Would like to get rid of the public/private property flags
DH: for notational convenience, would be great if one could pass an array literal as 3rd arg TVC: could specify that if 3rd arg is an array-like, we copy its elements into a built-in WeakSet WH: that would be confusing: names later added to the array-like won't get added to the internal WeakSet
AWB: Not clear how using a built-in WeakSet will protect, what if it's been redefined? Are WeakSet methods non-writable? TVC: we need to specify that the proxy calls the original/intrinsic WeakSet.prototype.get method.
STH/LH/RW: Will need to spec WeakSet
link Conclusion/Resolution
Yes to third arg for whitelist, pending details to be worked out by Proxy champions.
Expect to remove the "public" part of private names.
link WeakSet
DH: Clear that we need WeakSet to match WeakMap (Set and Map)
AWB: Need to assure that WeakMap and WeakSet are not redefined?
RW: Use cases in node programs where I'm using WeakMap made it apparent that it is possible to leak via redefinition.
link Conclusion/Resolution
Needs to be designed, as part of the whitelist feature's needs.
SpiderMonkey tracking bug: https://bugzilla.mozilla.org/show_bug.cgi?id=792439
link Syntactic Support for Private Names
(Presented by Allen Wirfs-Brock, Mozilla)
Slides: https://members.ecma-international.org/get.php?group=TC39&file=2012_sub_tc39-2012-066.pdf
link Private Names & @Names
link Unique/Private Names
Unique and private names (aka symbols) are ES6's solution for objects that need to expose props that have limited or controlled acccessibility.
Currently no syntactic support for definition of use
Imperative code patterns for using names dont mesh well with declaratinve object/class definitional forms.
eg.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
|
link Computed Property Names for Object Literals Were Abandoned...
1
2
3
4
5
6
7
8
9
|
|
Issues:
- Allowed arbitrary expr in prop name def position
- Allowed aliasing of string valued prop keys
- Permitted same key to duplicate
- Future hostile: ties prop def to indexing (See: object model reformation)
link Proposal At-Names
- An At-Names is an IdentifierName that is lexically prefixed with @
- At-Names are const bound to Name values by new declaration forms
1
2
|
|
- Such declarations implicitly create Name Objects
- ... Missed slides
link At-Name References
- At-Name can appear in any context where an IdentifierName would be interpreted as a literal property name.
- As a prop name in object literals/class defs
- After . in MemberExpressions
- Lexical scoping rules resolve such At-Name references to a Name object value.
1
2
3
4
5
6
7
8
|
|
link At-Names in Primary Expressions
- When used as Primary expression, an At-Name... (see slides)
1
2
3
|
|
link Name Declarations with Initializers
- In a name/private declaration, each At-Name may have an initialization expression.
1
|
|
- The initializer must evaluate to a name object
- Primary use case is initializing an At-Name to a name provided via a function call or other computed value (the provided name or computed value is "secretcode").
DH: Concern about keyword naming, "private" (worried about contextual keywords)
AWB: naming can be bikeshedded, but whatever it is, there is no ambiguity because:
1
|
|
Is always: "keyword [space] '@'"
DH: You've won me over
LH: Not sure this goes "far enough" to warrant the addition.
MM/AWB/YK: (discussion about simplification)
DH: (whiteboard)
1
2
3
4
5
6
7
8
9
10
11
|
|
...Discussion about varying semantics lacking in previous proposals.
MM: Cannot avoid runtime collision?
DH: We can
MM: Should throw?
DH: Not strictly, but a possibility.
AWB: function vs. cost
ARB: strongly recommend making runtime duplicate check and throwing. (LH seems to agree? Or just acknowledge?)
link Optional Feature: Class-scoped name declarations
- Allow name/private declarations to occur as a class body element
- Any such declared At-Name are scoped to the class body.
1
2
3
4
5
6
7
8
9
|
|
DH/RW: Makes sense for declaration to see it at once.
LH: Want to be cautious about what we commit to forever.
RW: Fully support this.
LH: Let's work towards understanding the entire commitment
...Discussion about path forward and whether it's too late.
DH: This does resolve an issue that stands out about max min classes: private name props cannot be added declaratively
WH: classes are not worth it without this
BE/LH/RW: Disagree. Classes already support themselves.
YK: Saying that it's too late is not a valuable argument.
DH: Just the API won't be worse. Allen's biggest point is that you cannot use Symbol in declarative forms with super().
DH: (rebuked)
AWB: There is a big hole in classes where super() is allowed only within class, means that name/symbol cannot be used with super()
DH: imperative API is safe to start, At-Names are good, but we don't need them now.
WH: You could say the same about super() in class
DH: No. We have solid, reasonable semantics for where to allow super() and where to error.
LH: I don't think we're ready to design this syntax.
AR: Are we converging on this as an idea that needs solving? Just not now?
MM: If we decided that we had consensus today, we could improve it over the next year.
RW: (agrees)
MM: However, it is late and the agreement of max min was to commit to something light weight that can be built on.
BE: I agree, but I dont think we should disallow exceptions to that cut off date.
LH: syntax was not on the table at the cut off
BE: Firm disagreement.
RW: This is actually a good example of why max min classes is a good idea. It's already an identified addition that creates a massive improvement.
WH: This actually adds the missing piece for me to support classes.
LH: I want something more minimal.
BE: Can we accept it for work, bet on it until at least the next meaning?
EA: Nice that it allows class private as well as instance private
LH: Agrees. If we're going to do this, we have to do all of it. The part that is listed as "optional" actually needs to be included.
AWB: Essential functionality is base declarations at the block level.
I have an ES.next (not 6) solution for "protected".
LH/DH: The baseline is private declaration in statement, classes, object literals. Build from there. As well as whatever the "public" version. BOTH are part of the baseline. NO PROTECTED.
AWB/WH/BE: Yes, I agree.
DH/BE: Move protected to a new strawman.
link Conclusion/Resolution
Consensus on:
- Need private binding, including: statement form, import and export.
- Need private prefix form on class methods on object literal props and methods
- "public" in addition to private, but need to choose keyword
- dot notation, expression form
Deferred to separate proposal:
- "Protected"
link Renaming Name to Symbol
(Presented by Dave Herman, Mozilla)
YK: A little nervous that not identical to Lisp
DH: Gave blessing ;) the only diff is that you can't go from string -> symbol, whereas in lisp you can
YK: ok with that.
link Conclusion/Resolution
- we agree that names are now called symbols (Name => Symbol)
- new alternatives for syntax to bind a "Unique Symbol" will be a keyword, one of: public, unique, or symbol
ie.
public @foo;
vssymbol @foo;
vsunique @foo;
link Early Errors That Possibly Should Not Be
(Presented by Luke Hoban, Microsoft)
LH: Concerns about detecting assignment to constants. Want to just parse, not build name environments, parse trees, etc.
WH: What about detecting a continue to a nonexistent label? That requires name environments.
LH: It's rare enough that it doesn't matter.
WH: Just what are we talking about? Should the assignment 3 = 1 no longer be an early error?
[Debate, without resolution]
[Discussion about whether the ES5.1 early errors should no longer be early errors.] Consensus: No.
[Discussion about when these kinds of errors should be detected. One option mentioned was at function call time at the granularity of a function.]
WH: That's not useful. With arrow functions we'll have many lightweight functions, so the hybrid of early and late checking at function granularity does not do a good job of either early error detection or fully dynamic binding (late error detection).
DH: Not detecting typo'd free variables would be a big loss for one of the motivations for modules.
[Discussions about alternative of having early error detection of things like typo'd variables only in development tools]
WH: Concerned that these will diverge into a mess of incompatible "even-stricter" modes.
DH: macros need to expand at compile-time; we'd essentially be making static features like macros impossible
[Macros require compile time expansion]
BE: we can do the delayed errors now, and modules that use macros could be eagerly compiled; IOW we can make this decision now without necessarily closing that door
LH: need for delaying compilation of cold code is huge; large portions of web workloads consist of cold code
BE: (explains that interns and researchers at Mozilla are working on parsers that can support macros)
DH: Explains sweet.js (similar to coffeescript transcompilation)
DH/BE: Continue research of macros, offline.
MM: List all early errors and discuss the merits
AWB: Are we ok with a class of errors that are reported on each function entry? Static function analysis will simplify certain runtime semantics.
...Will allay performance issues discovered through Chakra and v8 prototyping.
Discussion of label analysis
Strict mode implementation
link Conclusion/Resolution
- es-discuss will get a list of all early errors that should not be
link Performance Costs of Temporal Dead Zone
(Presented by Luke Hoban, Microsoft)
https://mail.mozilla.org/pipermail/es-discuss/2012-September/024993.html
LH: (introduces discussion)
ARB: Have you tested with let and no temporal dead zone
BE: early-boyer is likely not an accurate test for let. There are closures that capture deep chains of activations. If let is top level, why would it have changed?
LH: We suspect that a majority of the overhead was caused by the read barrier created by temporal dead zones.
...Will continue with testing and gather evidence.
MM/STH/BE: early-boyer is probably innappropriate.
LH: Believe that the motivation of temporal dead zones is not actually a common enough issue in real world code
BE: (proxy for Oliver Hunt) says the whole JSC team is against temporal dead zones on let, support it on const
LH: meta concern is that cases are adding up against let. If the perceived cost is real, measurable performance cost, there will be less buy in from developers.
WH: [as previously mentioned by Brendan], having a lot more scopes to close over (i.e. creating a new one for each loop iteration, etc.) is likely to be the main performance cost of let. What if let is slower merely due to having many more scopes?
BE: (history of let in SpiderMonkey...) No outcry that performance is an issue
MM: (countering the "not common enough" argument) Presented personal experiences where dead zones were essential in detecting problems.
link Conclusion/Resolution
- No change to temporal dead zone (yet)
- Get more data, report back
link Global Scope Revisit
YK: Still not in agreement with discussion yesterday, but not blocking the
BE: Recap the problem that revealed the issue.
LH: Can we talk about let/var at the top level?
Current proposal... let would shadow var
ARB: Why?
BE: Global contour in which let binds
AWB: The rule in functions is that you cannot have a var and function of the same name.
MM: is the interaction with the global the same as a "with" scope object.
LH:
YK: class followed by class with the same name: error var followed by let with same identifier name: error
BE: It happens all the time...
1
2
3
|
|
...Not the issue, but this:
1
2
3
4
5
|
|
...is a problem if let
throws when name collision occurs.
DH: A serious issue exists... the single global object. It's beginning to feel like we're adding to the issue.
WH: The complexity is not on the number of scopes, but what they do. I'm concerned about the complexity of reflecting let, const, @names, etc. onto a global object.
WH: Also don't want random HTML attributes elsewhere on the page to knock out global let/const/etc. bindings.
AWB: No one has discussed... Any script tag, whose order can be determined... bring deferred scripts to the last script
BE:
1
2
3
4
5
6
7
8
9
10
11
|
|
Hell.
DH: Note that multiple globals is not the problem. The problem is that the one global scope is the "window"
ARB: Implemented global lexical scope, give the impression of one, but is a scope chain.
DH: Why is it any different then having a global that isn't the window?
LH: It has to be.
BE: Points out in chart above that a function in A that refers to a let x = 1;
in C, will create an error.
DH: Users make recursive dependencies that they don't realize.
ARB: The way I understood let
... we resolve every variable at compile time, (I missed the next part, ARB: Can you fill this in?)
YK: (whiteboard)
1
2
3
4
5
6
7
8
9
10
11
12
|
|
BE: Recapping the Window.prototype issue
RW: There is no reason to put everything on the Window.prototype. Object APIs should be own properties of the Global object ("window" in the browser case). This doesn't mean that the needs of EventTarget specification cannot be met by using the Window.prototype. The WebIDL change to move all APIs to a different semantic "space" without understanding the consequences is the worst negligence.
...More discussion...
BE: If we make let, const, class, module, function, var (all binding forms, now and in the future) are global—will this be blocked?
...Discussion...
DH: Hard to decide if a dead zone exists for let
on the global object.
ARB:
LH: What are the mechanics of let
accessors on the global?
...Discussion about the
Two models to consider:
Andreas:
When you have a let
binding, it reflected observably as a getter/setter pair with some form of identification as a let
binding.
Luke: I can't figure out what the semantics you're describing is
DH: I think it's simple: every let binding is simply stored in a getter/setter pair
ARB: better to think of as a separate scope contour, where the getter/setter accesses it
DH: no difference
ARB: No, it is the difference between being stored inside the object vs inside the separate scope contour
DH: I still don't see the difference
WH: How are the proposed hidden attributes (such as the aforementioned identification of a binding as a 'let' binding) reflected if the global object is a Proxy?
DH: Tom has spec'ed these to "pass through"
BE: Object to the idea that there is an observable getter/setter on let
bindings.
ARB: If you don't do it this way, you can't have a temporal dead zone in the global scope.
DH: (to BE) Can you recap your objection to getter/setter pairs on let
bindings? Optimization doesn't seem like a long term motivation if we're moving to module
BE/DH/ARB...
Like modules, need to have global getter/setter pairs on let/const bindings
Unless there is a lexical scope or hidden data store...
LH: Observability?
ARB: It would be actually observable if the global object was a Proxy. Think of this in terms of a lexical contour
LH (recapping one of the alternative models)
There are two scopes:
Global Object and Global Lexical Scope... when a let
binding occurs, there are two things created, one on the Global Object and Global Lexical Scope.
[people generally felt it was easier to comprehend the data living in the scope contour]
link Conclusion/Resolution
Agreed on the AWB/MM/WH alternative model (new binding forms)
- Allen's 1 extra global scope contourc
- Redeclaration is an error
- Shadows all properties on the Global object
- Does not create a Global property
link Test 262
(Presented by Istvan Sebastian, ECMA)
IS: Someone needs to update the site with the latest version of the test suite in zip file format.
LH/RW/AWB: Needs to be an automated process, if that's possible within the scope of ECMA's policies.
IS: Needs archival snapshots. The standards body is still a classic style standards organization that needs to abide its rules and policies.
link Conclusion/Resolution
Bill Ticehurst to produce recommendation for the automated archival of test 262 at arbitrary states, as needed. Rick Waldron volunteers to assist as necessary.
link Create Archival Utility for ECMA Wiki
2012-10-31: wget -r -l 0 http://wiki.ecmascript.org/
link Conclusion/Resolution
Rick Waldron will champion this