75 | | |
76 | | ''Ross:'' I think we had a successful contributing with standards and trying to be as conformant as possible. |
77 | | |
78 | | ''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. |
79 | | |
80 | | ''Ross:'' The rest of the presentation is focused on standards-related work in the JSC team. |
81 | | |
82 | | ''Ross:'' But there are cases where we use our knowledge and work in JSC to help contribute to standards work. |
83 | | |
84 | | ''Alexey:'' Today we have an all time high on test262 (JS spec test suite) |
85 | | |
86 | | ''Alexey:'' Overall we have an 85% pass rate up from 80% in 2019 |
87 | | |
88 | | ''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 |
89 | | |
90 | | ''Alexey:'' ProxyObject has been improved such as trap failures, relection, in the prototype chain, etc. |
91 | | |
92 | | ''Alexey:'' Early errors for unicode RegExps |
93 | | |
94 | | ''Alexey:'' [[DefineOwnProperty]] no longer corrupts property name order (for-in) |
95 | | |
96 | | ''Alexey:'' Classes no longer rely on `_proto_ ops handle [[IsHTMLDDA]] correctly |
97 | | |
98 | | ''Alexey:'' Array.prototype.sort was aligned with the new tightened spec. |
99 | | |
100 | | ''Alexey:'' Ross aligned TypedArray internal and prototype methods with the spec (while at the same time fixing the spec) |
101 | | |
102 | | ''Caio:'' Public and private fields are currently a stage 3 proposal in TC-39 |
103 | | |
104 | | ''Caio:'' In the last year Safari shipped with public fields |
105 | | |
106 | | ''Caio:'' With fields the constructor of a class will install each of the fields in the class onto the object it creates |
107 | | |
108 | | ''Caio:'' Private fields are a bit different because the identifier is only accessible from inside the lexical scope of the class definition |
109 | | |
110 | | ''Caio:'' Igalia has been working on this and has also been working on other class features. |
111 | | |
112 | | ''Ross:'' Were you also gonig to tell us about BigInt? |
113 | | |
114 | | ''Caio:'' Robin and I have been working on BigInt over the last year |
115 | | |
116 | | ''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. |
117 | | |
118 | | ''Ross:'' New 262 features. |
119 | | |
120 | | ''Yusuke:'' WeakRef and FinalizationRegistry, implemented by Keith (me) |
121 | | |
122 | | ''Yususke:'' With WeakRef, it’s now possible to create a weak map where the values are held weakly |
123 | | |
124 | | ''Yusuke:'' In fact we are already using WeakRef in the WebInspector |
125 | | |
126 | | ''Ross:'' Short-circuiting assignment operators. |
127 | | |
128 | | ''Ross:'' This proposal was delayed until the nullish coalesing feature has been shipped. |
129 | | |
130 | | ''Ross:'' short ciruiting assignment was implemented by Devin |
131 | | |
132 | | ''Ross:'' String.prototype.replaceAll does what you would have expected replace all along. |
133 | | |
134 | | ''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 |
135 | | |
136 | | ''Ross:'' Array.prototype.at (originally, proposed as Array.prototype.item) |
137 | | |
138 | | ''Ross:'' has an advantage for access because it works with negative indicies |
139 | | |
140 | | ''Yusuke:'' Intl |
141 | | |
142 | | ''Yusuke:'' We went from 37% conformance to 98% conformance |
143 | | |
144 | | ''Yusuke:'' Ross and I worked closely on getting everything working |
145 | | |
146 | | Included work with ICU, perf, and new feature work. |
147 | | |
148 | | ''Yusuke:'' * describes all the new Intl features we have shipped * |
149 | | |
150 | | ''Yusuke:'' New Webassembly features this year are mutable Globals |
151 | | |
152 | | ''Ross:'' Looking ahead to 2021 we want to get to 90% pass rate on test262 |
153 | | |
154 | | 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 |
155 | | |
156 | | ''Caio:'' We also want to continue our class properties work to implement private methods |
157 | | |
158 | | ''Caio:'' Not limited to just functions but also can include private getters and setters |
159 | | |
160 | | ''Caio:'' Last but not least we also want to add static class fields and static private methods |
161 | | |
162 | | ''Yusuke:'' We have also re-enabled SharedArrayBuffer and Atomics in the build and in testers\ |
163 | | |
164 | | ''Yusuke:'' We also want to add Top-level await. This lets us put the await expression at the top level of module code. |
165 | | |
166 | | ''Yusuke:'' Another module feature we want is to have modules in workers |
167 | | |
168 | | ''Yusuke:'' And many more features all coming soon! |
169 | | |
170 | | ''Yusuke:'' We also hope to have more collaboration and build on the progress we have made this year |
171 | | |
172 | | ''Jen:'' Questions? |
173 | | |
174 | | ''Saam:'' Where are we at in test262 conformance again? |
175 | | |
176 | | ''Ross:'' Roughly we are at 85% |
177 | | |
178 | | ''Ryosuke:'' Is private class fields enabled in safari 14 |
179 | | |
180 | | ''Yusuke:'' Private fields just landed a few minutes ago so no |
181 | | |
182 | | ''Ryosuke:'' I’m excited for this feature so I hope we can get it done soon |
183 | | |
184 | | ''Caio:'' We still needed to add some JIT work for private fields and hopefully we can get that done soon |
185 | | |
186 | | ''Saam:'' We should just turn it on |
187 | | |
188 | | ''Yusuke:'' This is a good time to enable it because it gives us a chance to get feedback |
189 | | |
190 | | ''Caio:'' We need to do some work on field initialization but it shouldn’t block private fields because it didn’t block public fields |
191 | | |
192 | | ''Ryosuke:'' In order for the fuzzer to run with it we need to enable it somewhere e.g. WebKitTestRunner |
193 | | |
194 | | ''Yusuke:'' We need to add support private fields syntax in the fuzzer but shouldn’t be too hard |
195 | | |
196 | | ''Ryosuke:'' For each JSC feature we now want to have significant fuzzing for each new feature before shipping |
197 | | |
198 | | ''Yusuke:'' We can also enable the feature in our fuzzers without enabling by default |
199 | | |
200 | | ''Ryosuke:'' To clarify on what we want to fuzz we want to fuzz everything that could be used to exploit JSC |
201 | | |
202 | | ''Saam:'' Fortunately, for most features outside syntax, fuzzer will just test it |
203 | | |
204 | | ''Yusuke:'' Yeah, for things like changes to DFG the fuzzer will find it because it will build off all the JSC tests |