Twitter hashtag: #esspec
便利ツール
自己紹介 (近況報告)
syumai
明日久々にオフラインイベントで喋ります
4年ぶりくらいに名刺を作った
tars0x9752.icon名刺はいいぞ
tars0x9752.icon(オフイベで話すきっかけとかになるので)
「オンライン(Zoom)参加」の枠もあってよさそうyebis0942.icon
tars0x9752 (たーず / naoki aoyama) tars0x9752.icon
夏ばりに暑くなったかと思ったらまた寒くなってあれ
ここ1ヶ月くらいいろいろオフラインイベント(プログラミング系ではない)参加したりで疲れ気味
ご自愛くださいyebis0942.icon
yebis0942yebis0942.icon
参加者の方がだんだん増えてきた感
次回はembeddings(埋め込みベクトル表現)
harupiyo / Jun Yasumura
ほたる出た
前回のあらすじ
Execution Context:
JSの実行状況を持っているもの
スタックっぽい動きをする(そうじゃないこともある)
今回の範囲
JobCallback Records
the incumbent settings object
「現行の設定オブジェクトの追跡」のサンプルコードはよく分からず
あとで読む
JavaScript処理系はみんなイベントループを自前実装しているのか?
V8はデフォルトのイベントループを持っている
nodeはそれを上書きして独自のイベントループを持っているかも
code:js
new Promise(() => {
// task queueに積まれずに即座に実行される
}).then(() => {
// HostEnqueuePromiseJobでtask queueに積まれる
})
ESMetaでpromiseの実行を追いかけてみる
RunJob is 何
ESMetaが持っているabstract operationっぽい
step-overしていくと途中で追跡が打ち切られる問題
promise.thenの中に入ると打ち切られるっぽい
ESMetaが500 Errorを出しまくる問題
new Date()するとやばいっぽい
コントリビューションチャンス
new Object() & Constructをbreakpointにして観察してみる
うまく止まらない
host-defined hookはまだうまくサポートされてないのかも
HostMakeJobCallbackをbreakpointにすると止まった
promise.thenで呼ばれることがわかった
setTimeout()
止まらなかった。ECMAScriptの仕様外だから実装されてないのかも。
ECMAScriptの仕様ではjobを作ることができるのは?
Promise
FinalizationRegistry
新しい仕様。ES2021でWeakRefsと一緒に入ったらしい
HostMakeJobCallback
HostCallJobCallback
HostEnqueuePromiseJob
promise(またはそれと同じ優先度を持つもの)を扱うときに使う
ECMAScriptやWHATWGの現状の記述ではpromiseのみに使われていそう
host-definedな情報は保存していないように見える
Jobs must run in the same order as the HostEnqueuePromiseJob invocations that scheduled them.
これはHostEnqueuePromiseJobの動作とは直接は関係がないように思える
他に書ける場所がなかった?
NOTE
突然登場したNewPromiseResolveThenableJob
Promise contructorで作られた何か
CreateResolvingFunctions
Let stepsResolve be the algorithm steps defined in Promise Resolve Functions.
abstract operation closureではない何か
NewPromiseReactionJob
Promise.prototype.then などで作られた何か
handlerとは?
Promise.resolve().then(handler)?
WHATWGのentryとは
使い道は不明
code:js
Promise.resolve().then(
// Jobが作られるが、handlerがundefinedなので、Realmはnull
);
ロスタイム: WHATWG側の仕様を読む
HostMakeJobCallback
JAVASCRIPT = ECMAScript
taskの定義など
HTML仕様を読まないとJavaScriptの全容は分からなそう
Scrpitingあたり
キューのレーンを分けることで優先度の違いを実現している