Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ECMAScript仕様を読むのに必要な知識 - ダイジェスト版

syumai
August 23, 2024

ECMAScript仕様を読むのに必要な知識 - ダイジェスト版

syumai

August 23, 2024
Tweet

More Decks by syumai

Other Decks in Programming

Transcript

  1. 自己紹介 syumai ECMAScript 仕様輪読会 主催 株式会社ベースマキナで管理画面のSaaSを開発中 GoでGraphQLサーバー (gqlgen) や TypeScriptでフロント

    エンドを書いています Software Design 12月号からCloudflare Workersの連載をして ます Twitter: @__syumai Website: https://syum.ai
  2. 文法の表記法 文法は、文脈自由文法で表現される Syntax に記載される 斜体文字 は非終端記号 下記スクショでは RelationalExpression など :

    や :: などは非終端記号の定義 (文法生成規則とも言う) 左辺の非終端記号を構成するトークン列が : などの右辺に示される 右辺のトークン列には、非終端記号および終端記号が並ぶ 構文的文法 (Syntactic Grammar) を示す : が最も頻出する
  3. 文法生成規則の省略記法3: 文法的パラメータ 文法的パラメータを持つ右辺側の非終端記号に対して、引数を明示することが出来る [Yield, Await] で超頻出 (awaitが利用可能な文脈のみで有効な識別子など) 例 下記の [In]

    パラメータを持つ生成規則があると仮定して、引数の渡し方の例を示します 生成規則は2つ ExpresssionStatement : (右辺は省略) ExpresssionStatement_In : (右辺は省略)
  4. セマンティクス ECMAScriptでは、以下の2種類で定義されている Runtime Semantics 文法生成規則に対応する形で、実行時 (runtime) のセマンティクスを示すアルゴリ ズム列 Static Semantics

    文脈自由文法だけでは入力列が有効か判断できないようなケースなどで使う (※補足: 5.2.4 Static Semantics で明確に説明されていないように思われま すが、文脈自由文法で表現できるようなケースについても、静的にセマンテ ィクスが決まるものはStatic Semanticsに分類されているように見えます) アルゴリズム列か、散文的な記法で示される
  5. Static Semanticsの例 (散文的な記法) Early Errorsと言う特殊な種類のStatic Semanticsは、散文的な記法 (ここでは箇条書 き) でセマンティクスが定義されている ここでは

    "let" と言う名前の識別子をlet / constの宣言に含められない、など Runtime Semanticsに進む前のバリデーション的に使われる
  6. Completion Record Completion Recordは、プログラム上の制御フローおよび、それに伴う値を伝播する役 割を持っているECMAScript仕様上のみの型 制御フローの例: break, continue, return, throw

    多くのAbstract OperationやSyntax-Directed Operationがこれを返す Completion Recordは大きく2種類に分けられる normal completion Completion Recordの [[Type]] が NORMAL のもの 正常終了を表す abrupt completion Completion Recordの [[Type]] が NORMAL 以外のもの BREAK, CONTINUE, RETURN, THROW 実際にabrupt completionを使うアルゴリズムが登場する時、その内容はほと んどが THROW のパターン (TypeErrorのthrowなど)