Twitter hashtag: #esspec
自己紹介 (近況報告)
syumai
GoとTSやってます
明日から京都行きます
Jun Yasumura / harupiyo Jun Yasumura.icon
HTML5.0仕様書を読んだ経験あり
最近仮想マシンがよく壊れるので、気軽に試せる実機が欲しく2011年モデルのThinkpad T420sを手に入れました
noyannoyan.icon
Firefoxにバグ報告?をした余波で、cssに新しい色が追加された
アーロンチェアが来てから、仕事のあとに勉強する余力があり感動
Pay to Winなので、みなさん買いましょう
おーみーaumy.icon
ThinkPad X13 Gen 3届いた (さっき)
ヘッドセットが壊れてイヤホン (IE100PRO) とマイク (ATR2100x-USB) を買った
tars0x9752 (たーず / naoki aoyama)
gemini capsule 作って gemlog はじめました(どうでもいいことしか書いてないです)
gemini://tars.flounder.online/
gemini client は amfora がおすすめです(imo)
yebis0942.iconGo製!よさそうですね
$ amfora tars.flounder.online
yebis0942yebis0942.icon
ISUCONの練習してます!もう予選突破確実です!って言えてる予定
前回近況で話したBubble Teaでアプリ作って公開したら作者さんからstarもらった
エゴサされてるんだな〜
Nozomu Ikuta NozomuIkuta.icon
数回欠席して追いつかるか不安
前回のあらすじ
invariants(不変条件)を読んでいた
Well-Known intrisic object
shadow realm
Safariのdeveloper previewで使えるようになってる
6.2 ECMAScript Specification Typesの途中まで読んでいた
---
今回の範囲
6.2.2 The Set and Relation Specification Types の The Relation type is used to explain constraints on Sets. から
6.2.1 The List and Record Specification Types
順序付きのペアのSetを値として持つ
たぶん「ある集合の要素同士の関係を表すもの」と理解するとよさそう?
Relationの例
a Relation of events
これは何なんだろう
あまり意味はなさげ?
狭義半順序(strict partial order)
Rの値域に含まれるすべてのa, b, cについて
It is not the case that a R a(無反射律)
"a R a"なrelationは未定義ということか?
a R bかつb R cならa R c(推移性)
厳密全順序(strict total order)
Rの値域に含まれるすべてのa, b, cについて
a R bまたはb R aでなければaとbは同値である(完全律)
狭義半順序の性質も満たす
↑の「なんとかorder」というのは単なる例示なのか、Relationそのものの定義なのか
たぶん単なる例示だろう
Relationは仕様書内でどう使われているのか
candidate executionとは?
実行候補?
読んでみたが難しそう…
"a happens-before Relation"
他の勉強会で見たやつだ
(英語) least: "A Relation is least with respect to some conditions ..."
少なくとも?
数学英語
irreflexivity: 無反射律 / 反対称律 (ir + reflexivity)
transitivity: 推移律
totality: 完全律
not the case: ?
厳密半順序(strict partial order)について手元にあった↓の本に書いてあった
関係Rが推移律と非反射律を満たすとき厳密半順序というらしい(弱半順序とよぶこともあるらしい)
反射律 := 自分は自分の関係者
対称律 := 自分の関係者にとって自分は関係者
非反射律 := 自分は自分の関係者ではない
推移律 := 関係者の関係者は関係者
a R bはどういう意味?
aとbはRの関係にある
関係Rが(a, b)というペアを持つ
6.2.3 The Completion Record Specification Type
実行時の値と制御フローの伝播を表すために使う
たとえばbreak, continue, return, throwなど、制御を大域で移す構文の振る舞いを表現するのに使う
以下のフィールドを持つ
[[Type]]: completionの種類を表す
値はnormal, break, continue, return, throwのいずれか
[[Value]]: 生成された値を表す
値はCompletion Record以外なら何でもよし
[[Target]]: 制御の移譲先(おそらくジャンプ先のラベル) 値はStringもしくは空
Completion Records のショートハンド
normal completion
break completion
continue completion
return completion
throw completion
abrupt completion
a normal completion containing X
Implementation-defined callable objects...という一文は必要なのか?
前の段落では"in this specification"と限定しているので必要
この限定を外すと次のeditorial errorの言明が仕様書外にも適用されてしまうので外せない
6.2.3.1 Await
Abstract operation Awaitの動作を定義している アルゴリズムの詳細は今回はスキップする
all aliases in the above steps are ephemeral and visible only in the steps pertaining to Await.
Awaitのアルゴリズムで宣言されたエイリアスは外からは参照できない
"... ephemeral and visible only in the steps pertaining to ..."という言い回しは ReturnIfAbruptの定義でも使われている with the exception of completion
completionだけは外から参照できる、ということを言っていそう
valueが外から参照される必要があるからと話しましたが、必要なのはtypeだった気がしていますnoyan.icon
Awaitのアルゴリズムの中にcompletionのエイリアスも出てくるので、"all aliases"を文字通り受け取るとcompletionがアクセス不能になるからかな?と思ってました。typeについてはまだちょっと分かってません…yebis0942.icon
自分も同じ考えです。completionRecordでtype(normal, break, etc...)
こう思った原因は、Let Result be await(Value)という表記をみて、こう書けばResultでCompletionRecord.[[value]]は取れるな~⁉と思ったからですnoyan.icon どうだろう・・・?
edit: await(value)とcompletionRecord.[[value]]が区別しにくかったので修正しました
少なくともResultもValueも取れるべき、というのは完全同意ですyebis0942.icon
本質的でないことをいって困惑させてしまっていたら申し訳ないですnoyan.icon
ポイントをあんまり理解できてなかったかもしれない…。ともあれありがとうございます!yebis0942.icon
6.2.3.4 updateValue( completionRecord, value )
completionRecordにvalueをセットしたものを返す
新しく値を作ってるものをupdateと言っていいのか?
return ? completionRecord.
?はabs opの呼び出しにくっついてることが多い気がするのでこういう書き方は珍しいかも
何のために?を付けている?
付けなくても動作は変わらないのでは?
abrupt operationがありえるということを強調するため?
6.2.4 The Reference Record Specification Type
delete, typeof, 代入演算子, superやその他の言語機能を表現するのに使われる
フィールドは以下
[[Base]]
※"which holds the binding"が"The value"にも掛かっている可能性ありそう
たとえばvar o = { a: 1 }のときo.aというコードを実行すると[[Base]]がoであるReference Recordが生成され、oは{ a: 1 }というbindingを持っていることになるのでは
値がunresolvableならバインディングが解決できないことを示す
つまり未定義な変数を参照した場合?
[[ReferencedName]]
バインディングの名前
[[Base]]の値がEnvironment RecordならString
[[Strict]]
strict modeで生成されたらtrue
[[ThisValue]]
ここはよくわからなかった…
super.hoge()みたいな書き方ができるんですねー
こちらを先に説明してほしい気持ち
関数とかブロックのスコープを保持するレコードらしい
noyan.iconたしかにsuperの場合は継承元のスコープを参照するので、binding自体のEnvironment Recordがいらないのかな?