zaki-yama

zaki-yama's reading list

2021-03-16

ひとこと

読んだ

📝 : 下の方に内容メモあり

☁︎ Salesforce

なし

Web, Frontend

その他

読みたい

Stale

読んだ記事のメモ

Serving our customers more effectively with new release cycles for Microsoft Edge - Microsoft Edge Blog

先日のChromeのアナウンス(https://blog.chromium.org/2021/03/speeding-up-release-cycle.html)に続き、Edgeもリリースサイクルが6週おき→4週おきになりますよ、という話。 開始時期は 9/23週リリース予定のEdge 94から。 参考:リリーススケジュール https://docs.microsoft.com/en-us/deployedge/microsoft-edge-release-schedule#microsoft-edge-releases

また、企業ユーザー(enterprise customers。この定義が不明)向けにリリースサイクルを8週おきに延長できるExtended Stable optiontというオプションも提供。 これもChrome同様。 その場合は隔週で重要なセキュリティアップデートのみ適用されるそう。

Test262, Inside-out - Bocoup

ECMAScriptの仕様に準拠しているかをテストするためのtest262を約6年間メンテしてきて、これまでにどんなテストのバグあるいはJSエンジン側の不具合を見つけたかの話。

  • (ブログを書いた)Bocoupという会社はtest262を6年ぐらいメンテしてる
  • テストは strict mode のときとそうでないときで2回ずつ実行してる
  • 一方の mode でのみ成立するテストについては、テストコード内に noStrict / onlyStrict というメタデータをつけて制御している
  • 記事中では過去に遭遇したテストのバグやテストのおかげで気づけたJSエンジンの不具合が中心

Test bug: unnecessary flags

  • 一番多かったテストのバグは不要なフラグの使用だった。 noStrictonlyStrict をつけたテストが実際にはどちらのmodeでも動くことが期待されるものだった
  • たとえば、これはstrict modeを期待しているが、実際にはstrict modeでなくてもテストはパスする
// Copyright (c) 2012 Ecma International.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
es5id: 10.2.1.1.3-4-22-s
description: >
    Strict Mode - TypeError is not thrown when changing the value of
    the Constructor Properties of the Global Object under strict mode
    (Object)
flags: [onlyStrict]
---*/
var objBak = Object;

try {
  Object = 12;
} finally {
  Object = objBak;
}

Test bug: unintended syntax errors

  • 意図しないシンタックスエラーが発生していたテスト
  • トリッキーだったのは、それらはinvalidなシンタックスを含むことが想定されていたこと
    • 期待しているのと別の理由でシンタックスエラーになっていた
/*---
description: >
  It is a Syntax Error if LeftHandSideExpression is neither an ObjectLiteral
  nor an ArrayLiteral and IsValidSimpleAssignmentTarget(LeftHandSideExpression)
  is false. (for-await-of statement in an async function declaration)
esid: sec-for-in-and-for-of-statements-runtime-semantics-labelledevaluation
features: [destructuring-binding, async-iteration]
flags: [generated, onlyStrict, async]
negative:
  phase: parse
  type: SyntaxError
---*/$DONOTEVALUATE();

async function fn() {
  for await ([arguments] of [[]])
}
  • 上の例は、strict mode では arguments がないのでエラーになることを期待していた
  • が、実際には for の後ろに {} がないので別のシンタックスエラーになっていた
  • これがどういう結論をもたらしたか?
    • JavaScriptCore だけがunintentional syntax errorという理由でこのテストをパスした
    • また、この実行エンジンは修正後のテストもエラーを出さずにパースした→テストを修正したことで実行エンジンの不具合に気づけた!
  • 実際には、より一般的なテスト(async関係ないやつ)がすでに存在したので、JavaScritpCoreのメンテナに新たに報告することはなかった

...みたいな話があと2,3続く