Twitter hashtag: #esspec
自己紹介 (近況報告)
syumai
GoとTSやってます
Jun Yasumura / harupiyo Jun Yasumura.icon
HTML5.0仕様書を読んだ経験あり
講師。HTML/CSSコーダーにCSS管理を楽にするコンポーネントと視覚回帰テストを届けたい。教科書ができあがりました。寝不足。
noyannoyan.icon
Reactが好きで、ソースコードを読んでいたりしたらエンジニアになりました。
24時間コードをかける椅子・机をさがし中
Tiger Book v.s. ゴールデンウィーク
ゴールデンウィークは勝てませんでした
yebis0942yebis0942.icon
GoとかRailsとか、最近久しぶりにReact書いてます
これで前回からの仕様書の差分をシュッと確認できそう
code:shell
cd github.com/tc39/ecma262
PRはmainブランチに対してrebaseしてからマージしてるっぽい(なんでだろ?)
!と?が間違えてたやつ、「記述通りに実装するとtest262のテストが落ちるよ」という話でした
おーみーaumy.icon
Webとプログラミング言語に興味があります
tars0x9752 (たーず / naoki aoyama)
Matrix: @tars0x9752:matrix.org
GW 伊豆旅行いってきた
NozomuIkuta
Rollupと、競技プログラミンングの基礎を勉強中
あざらし
最近 JS on WASM に興味があります
前回のあらすじ
5.2.4 Static Semantics: ネストしたfor eachの解釈の議論が盛り上がった
5.2.5 Mathematical Operations: ...
21:06 再開
今回の範囲
5.2.5 Mathematical Operations の The mathematical function abs... から
The mathematical functions
abs(絶対値)
min(最小値)
max(最大値)
modulo(剰余)
割る数は小数でもいいのか?
yebis0942.icon負数の剰余って言語ごとに正負がバラバラみたいな話ありましたね
clamping(上限・下限)
yebis0942.iconこれだけ"The phrase "the result of clamping x"...っていう表現なのが面白い
floor(Math.floor)
(英語) The domain and range of these mathematical functions: 定義域と値域
The domain of a function f(x) is the set of all values for which the function is defined, and the range of the function is the set of all values that f takes.
関数(写像)の入力(の集合)は domain、出力は range
yebis0942.iconmin, maxの定義域はextended mathematical values (EMV) なのか、それともmathematical values (MV) なのか
The mathematical function min(x1, x2, … , xN) produces... The domain and range of these mathematical functions are the extended mathematical values.
この段落によるとEMV
Mathematical functions min, max, abs, and floor are not defined for Numbers and BigInts, and any usage of those methods that have non-mathematical value arguments would be an editorial error in this specification.
字義通りに読むと引数はMVとしているように見える
このテキストの意図はNumbersやBigIntsを除外することにあるようだから、実際はやっぱりEMVなのかな?
ただ、min, max, abs, floorの定義域を制約する目的がよくわからない
Numbersは-0とかNaNの処理が面倒そうではあるが
謎のNOTE
floorの説明っぽい
が、それならfloorの直下に置くべきではないか
最後のピリオドは何?
式の終わりを示している?
6 ECMAScript Data Types and Values
String Type, Symbol Type, Numeric Typesの途中は精読不要そうなのでざっと流した
Numeric Typesの途中あたりから輪読していく
The String Type
その後の文章はそれほど読むメリットなさそうなので飛ばす
The Symbol Type
仕様書ではwell-known symbolは@@foobarという形で記述される
realmとは
6.1.6 Numeric Types
abstract operationの表
上のほうはだいたい「それはそう」感がある
Numberって浮動小数点だけど、ビット演算はどう定義されている?
初手で整数にしてた
実際の処理系の実装では最適化してintとして持っていることもある
signedRightShiftとunsignedRightShift
同値判定
equal, sameValue, sameValueZeroなど
SameValue読みたいかも
後で絶対出てくる予感がするので今回は流した
Number::toString
アルゴリズムが長い
aumy.iconGoの仕様ではどうなってる?
言語仕様には含まれていない
現実的にはfmtパッケージの実装に依存という感じになっている
NumberとBigIntを相互変換すると誤差が生じる可能性があるので暗黙の変換は提供しない
6.1.6.1 The Number Type
最初のほう何書いてるかわからないので飛ばすのも気持ち悪いから読んでみる
$ 2^{64}-2^{53}+3個の値がある
残りの $ 2^{53}-2個は NaNとして区別される
なんでNaNの値がこんなに多いんだろう?
tars.iconさんメモ
IEEE では指数部が全部1 がNaNなので、倍精度浮動小数点数では指数部11桁で、その11桁全部1で固定したものは仮数が何であっても全部NaN = 仮数部53ビット分の数だけNaNがあるみたいな理解です
$ 2^{53}-2 の $ -2 は指数部全部1でもNaNじゃない数が2個あるってことっぽい
yebis0942.icon指数部全部1かつ仮数部全部0だと∞, -∞になるので、そのぶんで2個引かれているということらしいです
残りのビットはpayloadとして任意の情報を載せられることになってる
処理系の実装ではNaN Boxingというテクニックで利用されているとのこと
external codeはそれぞれのNot-a-Numberを識別できてもよい
(JavaScriptのレベルでは全部同じNaNに見える)
external codeとは?
aumy.iconたとえばV8をC++から操作しているとして、そのC++コードからは区別できたりするのではないか
ECMAScriptではないDOM標準の話?
NaNと"Not-a-Number" valuesの違い
yebis0942.iconの理解はこんな感じです
IEEEのレベルではたくさんの"Not-a-Number" valuesがある
ECMAScriptのレベルではこれらはすべてNaNであり、違いを識別できない
ECMAScriptの外では違いを識別できるようにしてもよい(実装依存である)
NOTE: ArrayBufferやSharedArrayBufferにNumberを入れたときのビットパターンは規定しない
Spectre対策? -> SAB のみ (+ Browser のみ)
単に処理系の実装の自由を保障するための記述のような気がする
$ -2^{53}から$ 2^{53}までの整数はNumberで正確に表せる
それを超えると歯抜けになる
yebis0942.iconNumberのnormalizeを規定する意図ってなんなんだろう
(英語) these values are also referred to
toはthese valuesにかかっている
6.1.7 The Object Type
data property:
key valueとは
プロパティのフィールド名に相当するもの
a set of Boolean attributesとは
Object.definePropertyで指定できる各種属性の話っぽい