Twitter hashtag: #esspec
便利ツール
自己紹介 (近況報告)
syumai
久々にオフラインイベントで喋りました
Goのメモリモデルに関するおすすめ資料
tars0x9752 (たーず / naoki aoyama) tars0x9752.icon
ここ最近はゆっくりしてた
のどかでよさそうyebis0942.icon
yebis0942yebis0942.icon
NFTを配ったり、リーンコーヒーという雑談フレームワークで雑談会したりしていました
オンラインイベントブース、さまざまな戦略性があるのではという話
harupiyo / Jun Yasumura
前回のあらすじ
Promise.withResolvers
みんな再発明している
今回の範囲
9.6 InitializeHostDefinedRealm から始めて、9.7 Agents へ
InitializeHostDefinedRealm
Realmは必ずこれを経由して作られているはず
Agents
agent
ECMAScript execution contexts
an execution context stack
a running execution context
an Agent Record
an executing thread
executing thread
他のagentとは独立して、agentのexecution contextにおいてalgorithmic stepを実行する
複数のagentに共有されうる
ただし、Agent Recordの[[CanBlock]]がtrueのagentはthreadを共有できない
NOTE: ブラウザによっては同じウィンドウ内のタブ同士が同じexecuting threadを共有するものがある
どういうことなのか…
Agent Record
[[CanBlock]]: agentがblockするとは?
[[IsLockFree1, 2, 8]]: lock-freeとは?
[[IsLockFree8]]の値は観測後も変えてよい?
lock-freeとは
メモリモデルの理解が必要そう
Go言語のメモリモデルでは出てこない概念
NOTE2:
4-byte atomic operationは常にlock-free
size nのatomic accessがlock-freeだとしても、size nのatomicでないアクセスは可能(ということか?)
参考: Go言語のメモリモデルの話
AgentCanSuspend ( )
blockとsuspendは同義なのかyebis0942.icon
NOTE:
実行環境によっては、一部のagentをsuspendするのが不適切な場合がある
例
ブラウザのdocumentのメインイベントを処理するAgentはsuspendすべきではない
(おそらくブラウザのUIが無反応になってしまうから)
でもworkerのイベントを処理するスレッドはsuspendしてもいいかも
Agent Clusters
An agent cluster is a maximal set of agents that can communicate by operating on shared memory.
Programs within different agents may share memory by unspecified means. At a minimum, the backing memory for SharedArrayBuffers can be shared among the agents in the cluster.
unspecified means: 不特定な手段?
大意としては、「agent間のメモリ共有手段は仕様では限定しない。少なくともSharedArrayBuffersの裏側のメモリは共有可能である」ということかyebis0942.icon
embeddingとは?
An embedding may deactivate (stop forward progress)
ここで初出だが、具体的な説明はspecの中にはない
agentを止めたり再開したりできるもの
NOTE 4
生存期間が違うagentがメモリを共有すると、停止されたagentがlockを取りっぱなしになってdeadlockしたりstarveしたりする
なので、そういう共有はできない
(英語) deactivated indefinitely
無期限に無効化する?
(英語) the preceding restriction
(この文書で)先に述べた制約