Twitter hashtag: #esspec
便利ツール
時事ネタ
自己紹介 (近況報告)
syumai syumai.icon
Go / TSを書いて暮らしてます
TSKaigi Kansai 2024のCfP通ったので話してきます
資料まだ1枚もできてない
スポンサーの件のブログが出ました
macOS Sequoiaにしました
iPhoneミラーリングが便利
iwatsurut
とくに、イベントもなく過ごしています。
YAMAMOTO Yuji
2024/10/01 初参加
iPad Proのディスプレイが壊れたので直したら、純正パーツじゃなかったためか音ゲーがめっちゃプレイしづらくなってしまって辛い
yebis0942
冬服を出しました
TSKaigi Kansaiに行きます
地域のコミュニティで前夜イベントあるらしい
前回のあらすじ
今回の範囲
Abstract Module Records
code:mermaid
classDiagram
AbstractModuleRecord <|-- CyclicModuleRecord
CyclicModuleRecord <|-- SourceTextModuleRecord
class AbstractModuleRecord {
<<Abstract>>
}
class CyclicModuleRecord {
<<Abstract>>
}
class SourceTextModuleRecord {
<<Concrete>>
}
Module Record Fields
[[Realm]]
[[Environment]]
9.1.5 Environment Records
CreateImportBinding(N, M, N2)
immutable indirect bindingを作る
GetThisBinding()
常にundefinedを返す
code:a.mjs
console.log(this); // undefined
[[NameSpace]]
存在しないこともある
[[HostDefined]]
ホスト環境が使うための予約済みのスロット
Abstract Methods of Module Records
LoadRequestedModules( [ hostDefined ] )
依存しているモジュールをロードしてリンクするという作業を再帰的に実行する
promiseが返ってくる
Q. その中身は…?
GetExportedNames([exportStarSet])
このモジュールから直接・間接にexportされる名前をすべて返す
Q. LoadRequestedModules must have completed successfullyの完了の定義は?
ResolveExport(exportName [, resolveSet])
Link()
transitively: recursivelyとほぼ同義?
"transitively resolving all module dependencies and creating a Module Environment Record"を行うことで、モジュールを評価するための準備をする
yebis0942.icon後続のEvaluate()はこの関数がsuccessfully completeしたあとに呼ぶことになっているけど、この関数はPromiseを返さないのが気になる
Evaluate()
Returns a promise for the evaluation of this module and its dependencies,
↓ここからはPromiseの一般的な挙動。Evaluateの結果はメモ化されていそう。
resolving on successful evaluation or if it has already been evaluated successfully,
and rejecting for an evaluation error or if it has already been evaluated unsuccessfully.
yebis0942.icon "its dependencies"の解釈に悩んでましたが、(the evaluation of (this module and its dependencies))でよさそう
16.2.1.5 Cyclic Module Records
Tableの手前まで読んでみたが意味がわからない
16.2.1.5.4 Example Cyclic Module Record Graphs
先にこちらの実例を読むことにする。
"Figure 2"とは?
文書全体で連番を振っていそう
[[Status]]が取れる値
[[HasTLA]]: top-level awaitのための特別対応
例1
A -> B -> Cという依存関係のモジュールがあり、エラーがない場合の例
"any possible side effects": ECMAScriptがDOMなどと相互作用する場合などが想定されていそう
例2
A -> B -> Cという依存関係のモジュールがあり、linking errorがある場合の例
Bが提供されていないものをimportしようとしてInnerModuleLinkingが失敗した場合
例3
A -> B -> Cという依存関係のモジュールがあり、evaluation errorがある場合の例
Bが例外を出してInnerModuleEvaluationが失敗した場合
処理系は最初の評価の結果を使いまわしてもよいし、毎回評価してもよい
例: 評価時にランダムに例外を出すことがあるモジュール
例4
A -> ???という解決不要なモジュールへの依存がある場合
例5
C <- A <-> B
次回はこのあたりから。
操作的意味論の話