Twitter hashtag: #esspec
自己紹介 (近況報告)
syumai
GoとTSやってます
仕事では最近はdraw.ioをやってます
最近詰将棋をやってます
Jun Yasumura / harupiyo Jun Yasumura.icon
noyannoyan.icon
セキュキャン面白かったです。rungさんの講義はおすすめ
tars0x9752 (たーず / naoki aoyama) tars0x9752.icon
ブログ記事を書いた
nixpkgs にPRだしたり.
まだ何も反応がなくて悲しい
yebis0942yebis0942.icon
nix流行ってますね
おーみーさんのリポジトリでも見た覚えがある
waiwaitars0x9752.icon
Zigちょっとだけ入門しました
まだ入門完了してないけど
ツールチェーンが直感的
zig runとかzig testにGoみを感じる
仕様コンパクトそう
PEGで文法定義してるという話
自己紹介していたら気になるテーマの学びが深まってお得だった…yebis0942.icon
Nozomu Ikuta NozomuIkuta.icon
Nuxt Feed moduleのNuxt 3化のPRを出したところ、Nuxt 3に必要な機能がまだなくて止まってます Scrapboxのsyntax難しい
Zigってなんで流行ってる?
unjs
おーみーaumy.icon
前回は腹痛を起こして実質休みでした
GraphQL Language ServiceへのPRを再開
静的型チェック・型推論の実装
WebAssemblyへのコンパイラを書きたい
ガベージコレクション…
前回のあらすじ
FromPropertyDescriptor ( Desc )でプロパティディスクリプタがECMAScript language valueとして組み立てられるところを見ていくぞ、というところで終わっていた
FromPropertyDescriptor ( Desc )
unusedは何者?
サンセリフ体は他と混同しないために用いられるだけで、特に意味はないようです
Enums are denoted using a sans-serif typeface. For instance, a Completion Record's Type field takes on values like normal, return, or throw. Enums have no characteristics other than their name. The name of an enum serves no purpose other than to distinguish it from other enums, and implies nothing about its usage or meaning in context.
説明するなら「ECMAScript specification typesのひとつであるenum specification type」なのかな
探し方の話
なるほど"sans-serif"で検索すればよかったのかーyebis0942.icon
実はsans-serifとわからず、devtoolsでelementから総当たりしました
僕もdocument.querySelectorAll("emu-const")したけど結果が多すぎて諦めてました。シュッと見つけられててすごい。
雑談: マウスオーバーしたらなんかいい感じにヘルプしてくれる拡張機能がほしいyebis0942.icon
この抽象操作の返り値は使われてなさそう
返り値なしでreturnすることはできないのか?
そうだったような気もする…
使われ方
Proxyまわりで使われていそう
General property descriptorを変形するのに使われている
このあたり理解が怪しいので間違っているかもyebis0942.icon
The Environment Record Specification Type
Environment Recordまわりの不明点はここで解決できるのでは、と思っていたが、主要な説明は9.1でされていた
The Abstract Closure Specification Type
capture で capture
algorithm steps と値をまとめて関数みたいな感じで呼べるような meta value
Abstract Closure は algorithm steps の中で定義する.
Abstract closureを作ったあとで、captureした値を変更したらどうなる?
作った瞬間の値が保持されているので、abstract closureの実行結果には影響しない
it captures the value that is associated with each alias at that time.
(英語) addend:
augend は「足される数(被加数)」、addend は「足す数(加数)」の意味
1 + 2のとき、1はaugend, 2はaddendということになるらしい
42とは?
生命、宇宙、そして万物についての究極の疑問の答え
Data Blocks
8bitの数値(0〜255)の配列
配列長は作成時に固定される
初期値はすべて0
記法: db[2] -> dbの3番目の値
リテラルはないのかなyebis0942.icon
Shared Data Block
並行動作する複数のagentから参照されうるメモリ上にあるdata block
agent: 別のスレッド的なもの
Shared Data Blockの同一性
そのメモリ上の位置が一致しているときは同一
さもなければ同一ではなく、その場合には両者のメモリ上の位置に重複はない
「メモリ上の位置が部分的にかぶることはない」ということらしい
yebis0942.iconTypedArrayとかの動きを考えると確かにそうなんだろうなという気はする
yebis0942.iconvirtual memoryというのはプロセスごとに独立して与えられる仮想的なメモリ空間なので、「プロセスごとのvirtual memory addressは異なるけど、実は物理メモリでは同じものだった」ということがあって、なので「物理メモリでの所在だけを考えますよ」という話をしているのかなーと思いました
2020年に「"address-free"の意味がよく分からない」という趣旨のissueが上がっている
questionタグがつけられて終了してしまった感…
"Address-free"という言葉に関する議論
yebis0942.icon同一性の話をしているところに、部分的にメモリを共有することはないという制約の話が混ざってしまってややこしくなってる気がする
使われ方
yebis0942.iconreferenceを見た感じだとTypedArrayとかで使われていそう
余談
ESではmemory modelは仕様書の中で記述されているけど、Goでは仕様書とは別の文書に記述されている
(英語) "a distinct and mutable sequence of byte-sized (8 bit) numeric values"
distinct: ここではどういう意味なのかちょっと不明
valueがすべて相異なる?
valueがそれぞれ独立している?
こっちのような気がするyebis0942.icon
(英語) reside: residenceの動詞形っぽい
"resides in memory"
(英語) A is designated B.
AはBとされる。
CreateByteDataBlock ( size )
sizeが巨大すぎる場合や、負の数が渡されたときはRangeErrorになるっぽい
yebis0942.iconメモリの確保に失敗したときもRangeErrorになりそう
CreateSharedByteDataBlock, CopyDataBlockBytes
メモリモデルだけじゃなくて実行モデルも理解してないと読めない気がする
スキップしましょう
6.2.10 The PrivateElement Specification Type
PrivateElement type
private class fields, methods, and accessorsの仕様で使われるRecord
プロパティディスクリプタはprivate elementsでは使われない
private fields: non-configurable, non-enumerable, writable data propertiesっぽい動きをする
private methods: non-configurable, non-enumerable, non-writable data propertiesっぽい動きをする
private accessors: non-configurable, non-enumerable accessor propertiesっぽい動きをする
こういう解説的な書き方はESSpecでは珍しい気がするyebis0942.icon
Values of the [[Kind]] field for which it is present
「このフィールドが存在するなら[[Kind]]はこの値のいずれかになる」という意味らしい
"Private Name": spec typeだった
globalでuniqueなのが面白い
6.2.11 The ClassFieldDefinition Record Specification Type
クラスのフィールド定義のためのRecord
[[Initializer]]とは?
値: a function object or empty
意味: The initializer of the field, if any.
クラスのフィールドにinitializerというのがあるのか?
やってみた
code:js
let a = 0;
class Fuga {
b = (() => ++a)();
// これも同じ b = ++a;
constructor(){};
}
new Fuga().b // ?
なんとbの値は毎回変わる
() => (() => ++a)()というのがinitializerっぽい
(() => ++a)()はF.[[ECMAScriptCode]]にセットされている
明示的にreturnしてないように見えるが…?実行結果が暗黙的にreturnされる仕組みがありそう。
ここのF.[[Call]]の定義を見てみる
6. Let result be Completion(OrdinaryCallEvaluateBody(F, argumentsList)).
いっぱい出てきた!
〜完〜
(これはinitializerを見ればいいのか…?)