Twitter hashtag: #esspec
読むもの
読み方について読む
読みたいもの
completion record についての詳細
abrupt completion についての詳細
スケジュール
19:30 集合、自己紹介
20:50 ~ 21:00 休憩
22:00 終了
https://youtu.be/yelrQym3MIY
自己紹介
syumai
仕事でNext.jsやったり、Go書いたりしてます
Goの言語仕様の輪読会が終わったので、勢いでこれを開催しました
Go Conference 2022 spring に登壇予定入りました
最近next-authにちょっとしたPR出しました
syu_cream
(後で紹介)
医療系スタートアップでフルスタック風なソフトウェアエンジニアやってます
React, Next.js 半年?くらいの経験値
ES5 から触ってた?記憶喪失
WhyK
今は仕事でReact書いてます
Denoが好きです
かなり雰囲気で英語を読んで、機械翻訳よく使う人間です(機械翻訳バリバリ使います)
仕様書輪読会面白そうだったので参加しました
Nozomu Ikuta
Vue/Nuxtのスタック中心に仕事をしています
asazu taigaasazutaiga.icon*4
仕事でReact, TypeScriptを使っています
JSは2年くらい書いてます
JunYasumura
(後で紹介)
noyannoyan.icon
Reactが大好きです。最近はReact内部のコードリーディングに時間を溶かしています
言語仕様書を読むのは初めてなので緊張しています…!
yebis0942yebis0942.icon
Reactたまにやってます
肝心の発音チェックはだいぶゆるかった
メモ: bluetoothイヤホンはマイク入力が小さいので内蔵マイク使うこと
おーみー
高校生です。趣味でReact, F#, Kokaなどをいじって遊んでいます
プログラミング言語に興味があります
JSはだいぶ前から少しずつ書いてました。ES2015以降が主です
最近は友人のNext.js個人開発を手伝っています
tars0x9752 (たーず / naoki aoyama)
Matrix: @tars0x9752:matrix.org
仕事ではwebアプリ・モバイルアプリ開発のフロントエンド~バックエンドをTSで書いたりしてます。
普段英語を人前で話す機会とかは全然ないので、発音とかお聞き苦しいかもですが、ご容赦ください。(がんばります)
誤植メモ
> > console.log(Object.getOwnPropertyDescriptor([], "length"));
{ value: 1, // => 0 または、[]はarr
議事メモ (余裕があれば)
前回の続きから。
2.1 Algorithm steps
(コメント) Let a be 1. = let a = 1でJavaScriptそのものの記法と近いのが面白い
抽象演算
algorithm stepを記述するときによくある処理を関数化したもの
JavaScriptのレベルでは現れない
2.3 What is [[This]]
[[2連角カッコでくくられたやつ]]の説明
文脈によって3種類に分かれる
(英語) "From time to time" = 「時々」
(英語) "go a long way" = 「役立つ」
2.3.1. A field of a Record
仕様書の中にしか現れない
field: recordのキーと値のペア
defineProperty
オブジェクトのプロパティの性質を細かく設定できる
for...inの列挙の対象にするかどうかとか
本文中のIsDataDescriptorとは
abstract operationのひとつ
あるプロパティデスクリプタが特定の性質を持っているか確認するやつ
descriptor: 記述子
2.3.2. An internal slot of a JavaScript Object
JavaScriptのobjectが持っていることがある
仕様書の中にしか現れない
例: Objectのprototype
internal slotとrecord fieldの違いは?
hoge.[[fuga]]のhogeの種別で判別できる
(コメント) JSのobjectとrecordはたぶん別物
2.3.3. An internal method of a JavaScript Object
関数のように呼び出しできる
仕様書の中にしか現れない
例: F.[[Call]](V, argumentsList)
2.4. Completion Records; ? and !
runtime semanticsの結果を示すもの
フィールドは3種類ありえる
[[Type]]: normal, return, throw, break, continue
[[Value]], [[Target]]: これらはオプショナル
normal completion: [[Type]]がnormal
abrupt completion: それ以外
組み込み関数の仕様定義に登場するのはthrowだけ
他のものは関数の境界を超えられない
? AbstractOp(): AbstructionOp()の結果がabrupt completionならそれを返して終了
! AbstractOp(): この呼び出しがabrupt completionにならないことを保証
(コメント) completion recordってalgorithmの1ステップごとに存在するんですか
runtime semantics1つごとに存在するだけでは
(英語) niceties: 気の利いたもの?
EXAMPLEの関係
ex5: shorthandを使わずに冗長に書いた例
ex6: ReturnIfAbruptを使ってシンプルに書いた例
ex7: ?を使ってさらにシンプルに書いた例
ex8: !を使った例
(雑談) C言語のエラー処理の面倒さ
例外がない(そういえば例外の話を前の方でしてましたね)
グローバル変数にエラー値を入れる仕様だったり
Goはpanicとrecoverで大域脱出できる
(コメント) algorithm stepのreturnはabruptじゃなくてnormal completionっぽい
returnもabrupt completionなのが不思議
normalも[[Value]]を持つんですね
この最後のreturn T.に到達したときもreturnでabrupt completionになるのか?
ならない気がする
Callable objects that are defined in this specification only return a normal completion or a throw completion. Returning any other kind of completion is considered an editorial error.
functionの実行後のcompletionはnormal or throw
1. Return "Infinity".
means the same thing as:
1. Return NormalCompletion("Infinity").
algorithm stepsの中のReturnは暗黙的にnormal completionになるっぽい
2.5. JavaScript Objects
objectは2種類ある
ordinary objects
exotic object
特殊なことができる
例: Arrayのlength
Proxy APIで自作できる
(英語) instruments: 手段