== Collaboration on Standards in JSC: A Cross-Organizational Update == ''by Ross Kirsling (Sony), Yusuke Suzuki (Apple), Caio Lima (Igalia), and Alexey Shvayka (Igalia)'' [https://docs.google.com/presentation/d/1FuL76wznv2rCP_mieE9__fJnFRNcRR4yc9VbDAoZzFo/edit?usp=sharingSlide Deck] This 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. ''Ross:'' I think we had a successful contributing with standards and trying to be as conformant as possible. ''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. ''Ross:'' The rest of the presentation is focused on standards-related work in the JSC team. ''Ross:'' But there are cases where we use our knowledge and work in JSC to help contribute to standards work. ''Alexey:'' Today we have an all time high on test262 (JS spec test suite) ''Alexey:'' Overall we have an 85% pass rate up from 80% in 2019 ''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 ''Alexey:'' ProxyObject has been improved such as trap failures, relection, in the prototype chain, etc. ''Alexey:'' Early errors for unicode RegExps ''Alexey:'' [[DefineOwnProperty]] no longer corrupts property name order (for-in) ''Alexey:'' Classes no longer rely on `_proto_ ops handle [[IsHTMLDDA]] correctly ''Alexey:'' Array.prototype.sort was aligned with the new tightened spec. ''Alexey:'' Ross aligned TypedArray internal and prototype methods with the spec (while at the same time fixing the spec) ''Caio:'' Public and private fields are currently a stage 3 proposal in TC-39 ''Caio:'' In the last year Safari shipped with public fields ''Caio:'' With fields the constructor of a class will install each of the fields in the class onto the object it creates ''Caio:'' Private fields are a bit different because the identifier is only accessible from inside the lexical scope of the class definition ''Caio:'' Igalia has been working on this and has also been working on other class features. ''Ross:'' Were you also gonig to tell us about BigInt? ''Caio:'' Robin and I have been working on BigInt over the last year ''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. ''Ross:'' New 262 features. ''Yusuke:'' WeakRef and FinalizationRegistry, implemented by Keith (me) ''Yususke:'' With WeakRef, it’s now possible to create a weak map where the values are held weakly ''Yusuke:'' In fact we are already using WeakRef in the WebInspector ''Ross:'' Short-circuiting assignment operators. ''Ross:'' This proposal was delayed until the nullish coalesing feature has been shipped. ''Ross:'' short ciruiting assignment was implemented by Devin ''Ross:'' String.prototype.replaceAll does what you would have expected replace all along. ''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 ''Ross:'' Array.prototype.at (originally, proposed as Array.prototype.item) ''Ross:'' has an advantage for access because it works with negative indicies ''Yusuke:'' Intl ''Yusuke:'' We went from 37% conformance to 98% conformance ''Yusuke:'' Ross and I worked closely on getting everything working. Included work with ICU, perf, and new feature work. ''Yusuke:'' * describes all the new Intl features we have shipped * ''Yusuke:'' New Webassembly features this year are mutable Globals ''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 ''Caio:'' We also want to continue our class properties work to implement private methods ''Caio:'' Not limited to just functions but also can include private getters and setters ''Caio:'' Last but not least we also want to add static class fields and static private methods ''Yusuke:'' We have also re-enabled SharedArrayBuffer and Atomics in the build and in testers ''Yusuke:'' We also want to add Top-level await. This lets us put the await expression at the top level of module code. ''Yusuke:'' Another module feature we want is to have modules in workers ''Yusuke:'' And many more features all coming soon! ''Yusuke:'' We also hope to have more collaboration and build on the progress we have made this year == Questions & Comments == ''Saam:'' Where are we at in test262 conformance again? ''Ross:'' Roughly we are at 85% ''Ryosuke:'' Is private class fields enabled in safari 14 ''Yusuke:'' Private fields just landed a few minutes ago so no ''Ryosuke:'' I’m excited for this feature so I hope we can get it done soon ''Caio:'' We still needed to add some JIT work for private fields and hopefully we can get that done soon ''Saam:'' We should just turn it on ''Yusuke:'' This is a good time to enable it because it gives us a chance to get feedback ''Caio:'' We need to do some work on field initialization but it shouldn’t block private fields because it didn’t block public fields ''Ryosuke:'' In order for the fuzzer to run with it we need to enable it somewhere e.g. WebKitTestRunner ''Yusuke:'' We need to add support private fields syntax in the fuzzer but shouldn’t be too hard ''Ryosuke:'' For each JSC feature we now want to have significant fuzzing for each new feature before shipping ''Yusuke:'' We can also enable the feature in our fuzzers without enabling by default ''Ryosuke:'' To clarify on what we want to fuzz we want to fuzz everything that could be used to exploit JSC ''Saam:'' Fortunately, for most features outside syntax, fuzzer will just test it ''Yusuke:'' Yeah, for things like changes to DFG the fuzzer will find it because it will build off all the JSC tests