ECMAScript仕様輪読会 #9
前回: ECMAScript仕様輪読会 #8
Scrapboxの招待リンク: https://scrapbox.io/projects/esspec/invitations/85b96c9fa718ce5185e307196ed8fb53
connpass: https://esspec.connpass.com/
Discord: https://discord.gg/59S3y6weQj
Twitter hashtag: #esspec
YouTube: https://youtu.be/u3b9GG2lMLA
自己紹介 (近況報告)
syumai
Twitter: https://twitter.com/__syumai GitHub: https://github.com/syumai
GoとTSやってます
Jun Yasumura / harupiyo Jun Yasumura.icon
HTML5.0の仕様書を読んだ経験あり
講師。HTML/CSSコーダーにコンポーネント(CSS管理を楽にするため)と視覚回帰テストを届けたい。Git、Svelte、Storybook、Chromatic、Playwrightの入門用テキスト作成中。
noyannoyan.icon
就職しました
朝5時まで起きてたので寝不足・・・
Tiger Book読んでます
https://www.cs.princeton.edu/~appel/modern/ml/
yebis0942yebis0942.icon
Go ConferenceでLTしました
https://twitter.com/yebis0942/status/1518169610402828288
情報処理技術者試験終わりました
おーみーaumy.icon
Twitter: aumy_f GitHub: aumyf
脱無職
昼寝したので眠くない
tars0x9752 (たーず / naoki aoyama)
GWが楽しみ
NozomuIkuta
GitHub: https://github.com/NozomuIkuta
Twitter: https://twitter.com/NozomuIkuta
Vue Fes Japan Online 2022 https://vuefes.jp/2022/
Rollupと、競技プログラミンングの基礎を勉強中
21:00 再開
今回の範囲
5.2.4 Static Semantics の Named Static Semantic Rules... から
https://tc39.es/ecma262/
前回わかったこと
Syntax-Directed Operationsの使われ方
前回わからなかったこと
Syntax-Directed Operationsのimplicitな定義
Static Semantic Rules have names...のくだりの意味が取れなかった
5.2.4 Static Semantics
Context-free grammars are not sufficiently powerful to express all the rules / that define whether a stream of input elements form a valid ECMAScript Script or Module / that may be evaluated.
(英語) form: 形作る
こいつの主語はa stream ofっぽい、けど、そうなると三単現でformsになりそうだなー
他のところでは"When a stream of code points is"みたいに単数扱いしてるような
formsのtypoなのではないか…!
Static Semantic Rules have names and typically are defined using an algorithm. Named Static Semantic Rules are associated with grammar productions / and a production that has multiple alternative definitions will typically have for each alternative a distinct algorithm for each applicable named static semantic rule.
それぞれの登場人物の関係がわからん
esspec #9 Note
「Named Static Semantic RuleとGrammar productionのペア」 --( 1 : N )-- alternatives --( 1 : 1 )-- algorithm
yebis0942.iconっていう構造が実態に即しているような気がしてきた。どうでしょうか。
shqld Grammer production -> (NSSR -> (distinct algorithm)* )* なのではないでしょうか?
yebis0942.icon たしかにNSSRはGrammar productionに従属してるっぽいですね
Note: ひとつの生成規則に複数のStatic Semanticsが紐づいていることがある
例: AsyncConciseBody : ExpressionBody
Early Errors
毎度のことながら実例が見たい
Arrow FunctionのEarly Errorsがわかりやすそう
https://tc39.es/ecma262/#sec-arrow-function-definitions-static-semantics-early-errors
algorithm stepに出てくるContainsは何者?
定義を見たらSyntax-Directed Operationだった
Foo Contains Bar.という呼び出し方法が存在する模様
Mathematical Operations
NumbersはECMAScript language valuesではないのか…?
下付き接尾辞で数値を区別する
𝔽がNumbers
ℤがBigInts
ないやつはmathematical values
+、-、×などの記号
indeterminate forms: よくわからない
正や負の無限などを含む数?
https://en.wikipedia.org/wiki/Indeterminate_form
Number Value は MV を内包しているけど、 MV は Number Value ではないのでその明確な違いを強調している箇所
実際の Runtime Operations でそれらの違いが暗黙的で分かりづらくなってくるので、その布石(だと思っている)
FとかZとか https://ja.wikipedia.org/wiki/黒板太字
ℤ: 数学で整数全体の集合として慣例的に使われる文字
参照: http://www.ritsumei.ac.jp/~kutsumi/lectures/2014/cal2/notation.pdf
Fについて
何らかの体を表す。位数を下付きにして有限体を表すことが多い。また、ヒルツェブルク曲面や、生成元の数(無限の場合は生成集合)を伴って自由群を表すこともある。
やっぱりFloating pointに由来する独自用法っぽい
ES の仕様内に限っては FとZはただの JS 関数として定義されていて(あるいは subscript)、MVを引数にとって Number / BigInt にキャストするだけの意味だと思ってます shqld
Extended MV は本来数学的な値ではない正負の無限(2進表現によって生まれてしまったもの)を含めている
正負の無限は2進表現によらずに作れるのではyebis0942.icon
2進表現に依存しているのは+0, -0のような気がする
IEEE 754における負のゼロ
確かにです (0と混同してました) shqld
たんなるreal numbersをMVと呼んでいる仕様書の書き方が分かりにくさを招いてる気がしてきました…yebis0942.icon
コンピュータにおける極限表現ってそもそも何?という気持ちも出てきました... shqld
すみません、この表現が正しいかは僕も全然自信がないのですがとりあえず書き留めてみました
"Non-finite"とは
infiniteとは違うのか
正負の無限大以外にも有限でない値があるのでは?
Number.isFinite(NaN) はfalseなのでNaNのことそう
なるほどー。でもNaNって有限でも無限でもない値と定義したいような気もしますyebis0942.icon
isFinite関数の定義を参照してみる
TypeScriptの型定義では引数の型はNumber
TSの型定義は実用寄りなのであまり信頼できないかも