Changes between Initial Version and Version 1 of CollaborationonStandardsinJSCACross-OrganizationalUpdate

Jan 5, 2021 3:04:27 PM (18 months ago)
Jon Davis



  • CollaborationonStandardsinJSCACross-OrganizationalUpdate

    v1 v1  
     1== Collaboration on Standards in JSC: A Cross-Organizational Update ==
     2''by Ross Kirsling (Sony), Yusuke Suzuki (Apple), Caio Lima (Igalia), and Alexey Shvayka (Igalia)'' [ Deck]
     4This has been a very fruitful year of community-wide collaboration within JSC. We’ll give you the latest on how we’ve been working together, the features and improvements we’ve implemented in 2020, and what we hope to accomplish in the year to come.
     6''Ross:'' I think we had a successful contributing with standards and trying to be as conformant as possible.
     8''Ross:'' We have had a more balanced participation in Source/JavaScriptCore in 2019-2020 in the last year. In the last year more contributions have been done by non-apple contributors. Slack has been great for our communication on the JSC part of the project. There’s also a biweekly OSS staff meeting.
     10''Ross:'' The rest of the presentation is focused on standards-related work in the JSC team.
     12''Ross:'' But there are cases where we use our knowledge and work in JSC to help contribute to standards work.
     14''Alexey:'' Today we have an all time high on test262 (JS spec test suite)
     16''Alexey:'' Overall we have an 85% pass rate up from 80% in 2019
     18''Alexey:'' There have been a number of notable fixes in the last year. Keith (me) fixei unescaped astral literals in indentifiers. Saam fixed Array.prototype to work with indicies beyond 2^32
     20''Alexey:'' ProxyObject has been improved such as trap failures, relection, in the prototype chain, etc.
     22''Alexey:'' Early errors for unicode RegExps
     24''Alexey:'' [[DefineOwnProperty]] no longer corrupts property name order (for-in)
     26''Alexey:'' Classes no longer rely on `_proto_ ops handle [[IsHTMLDDA]] correctly
     28''Alexey:'' Array.prototype.sort was aligned with the new tightened spec.
     30''Alexey:'' Ross aligned TypedArray internal and prototype methods with the spec (while at the same time fixing the spec)
     32''Caio:'' Public and private fields are currently a stage 3 proposal in TC-39
     34''Caio:'' In the last year Safari shipped with public fields
     36''Caio:'' With fields the constructor of a class will install each of the fields in the class onto the object it creates
     38''Caio:'' Private fields are a bit different because the identifier is only accessible from inside the lexical scope of the class definition
     40''Caio:'' Igalia has been working on this and has also been working on other class features.
     42''Ross:'' Were you also gonig to tell us about BigInt?
     44''Caio:'' Robin and I have been working on BigInt over the last year
     46''Caio:'' BigInts are similar to numbers in JS but they have infinite precision. i.e. when you go over 2^53 with BigInt you will not lose precision.
     48''Ross:'' New 262 features.
     50''Yusuke:'' WeakRef and FinalizationRegistry, implemented by Keith (me)
     52''Yususke:'' With WeakRef, it’s now possible to create a weak map where the values are held weakly
     54''Yusuke:'' In fact we are already using WeakRef in the WebInspector
     56''Ross:'' Short-circuiting assignment operators.
     58''Ross:'' This proposal was delayed until the nullish coalesing feature has been shipped.
     60''Ross:'' short ciruiting assignment was implemented by Devin
     62''Ross:'' String.prototype.replaceAll does what you would have expected replace all along.
     64''Ross:'' Previously if you didn’t use the global flag on a regexp or used a string regexp replace would only replace the first occurrance
     66''Ross:'' (originally, proposed as Array.prototype.item)
     68''Ross:'' has an advantage for access because it works with negative indicies
     70''Yusuke:'' Intl
     72''Yusuke:'' We went from 37% conformance to 98% conformance
     74''Yusuke:'' Ross and I worked closely on getting everything working. Included work with ICU, perf, and new feature work.
     76''Yusuke:'' * describes all the new Intl features we have shipped *
     78''Yusuke:'' New Webassembly features this year are mutable Globals
     80''Ross:'' Looking ahead to 2021 we want to get to 90% pass rate on test262. The important part here isn’t just to get 90% but rather that we want to establish 90% as our new baseline and continually improve on that
     82''Caio:'' We also want to continue our class properties work to implement private methods
     84''Caio:'' Not limited to just functions but also can include private getters and setters
     86''Caio:'' Last but not least we also want to add static class fields and static private methods
     88''Yusuke:'' We have also re-enabled SharedArrayBuffer and Atomics in the build and in testers
     90''Yusuke:'' We also want to add Top-level await. This lets us put the await expression at the top level of module code.
     92''Yusuke:'' Another module feature we want is to have modules in workers
     94''Yusuke:'' And many more features all coming soon!
     96''Yusuke:'' We also hope to have more collaboration and build on the progress we have made this year
     98== Questions & Comments ==
     100''Saam:'' Where are we at in test262 conformance again?
     102''Ross:'' Roughly we are at 85%
     104''Ryosuke:'' Is private class fields enabled in safari 14
     106''Yusuke:'' Private fields just landed a few minutes ago so no
     108''Ryosuke:'' I’m excited for this feature so I hope we can get it done soon
     110''Caio:'' We still needed to add some JIT work for private fields and hopefully we can get that done soon
     112''Saam:'' We should just turn it on
     114''Yusuke:'' This is a good time to enable it because it gives us a chance to get feedback
     116''Caio:'' We need to do some work on field initialization but it shouldn’t block private fields because it didn’t block public fields
     118''Ryosuke:'' In order for the fuzzer to run with it we need to enable it somewhere e.g. WebKitTestRunner
     120''Yusuke:'' We need to add support private fields syntax in the fuzzer but shouldn’t be too hard
     122''Ryosuke:'' For each JSC feature we now want to have significant fuzzing for each new feature before shipping
     124''Yusuke:'' We can also enable the feature in our fuzzers without enabling by default
     126''Ryosuke:'' To clarify on what we want to fuzz we want to fuzz everything that could be used to exploit JSC
     128''Saam:'' Fortunately, for most features outside syntax, fuzzer will just test it
     130''Yusuke:'' Yeah, for things like changes to DFG the fuzzer will find it because it will build off all the JSC tests