Twitter hashtag: #esspec
https://youtu.be/L2COR51W11A
自己紹介 (近況報告)
syumai
GoとTSやってます
本日サービスリリースしました
めでたいyebis0942.iconnoyan.iconJun Yasumura.icon
Jun Yasumura / harupiyo Jun Yasumura.icon
趣味はCommon Lisp
フロントエンド学び始め。エンジニア出身の講師として、世の中のHTML/CSSコーダー(マークアップエンジニアー)さんを幸せにすることが今の目標。具体的にはコンポーネント技術を伝えたい。仕込み中!
輪読会は英語の勉強にも役立っています。
noyannoyan.icon
Reactが大好きです。React内部のコードリーディングに時間を溶かしていました
goとの関係は発展的解消を迎えました
最近M1 Macが送られてきて、ちゃんと使えるのかな?となってます
yebis0942yebis0942.icon
Perl5書いてました
おーみーaumy.icon
やる気が出ず、GitHubの草が枯れた
for (const a in null, []) {} が合法で for (const a of null, []) が違法な理由がわからない
inには"foo" in { foo: 1 }みたいな記法があるからかな?勘ですけどもyebis0942.icon
tars0x9752 (たーず / naoki aoyama)
Matrix: @tars0x9752:matrix.org
仕事ではwebアプリ・モバイルアプリ開発のフロントエンド~バックエンドをTSで書いたりしてます。
普段英語を人前で話す機会とかは全然ないので、発音とかお聞き苦しいかもですが、ご容赦ください。(がんばります)
Ikuta
前回ワクチン摂取で休んだら、参加登録忘れてました
前回のあらすじ
前回からDraft版を読もうということになりました
ちなみに昨日からDraftが2022年版から2023年版になりました
あけましておめでとう?
雑談
TC39のmeetingでデコレータがStage3に昇格しましたね
歴史あるproposal
Stage3はおおむね確定版という位置づけ
TypeScriptにも実装されていくはず
TypeScriptにもdecoratorが先行実装されてたので整合性どうなるんだろう
experimental
今回の範囲
5.1.5 Grammar Notation の When the words “one of”... から
5.1.5 Grammar Notation
one of
「次に続くトークンのいずれか」というのを簡潔に書ける
これを使わないと生成規則が縦長になってしまうことがある
[empty]
生成規則の右辺が何も含まないことを示す
先読み
[lookahead = seq]
次にseqというトークンが出現しないといけない
[lookahead ∈ set]
次のトークンはsetという集合の要素のどれかでないといけない
(note) 非終端記号を異なるトークン列として無限に展開できるべきではない
そうなっていたら仕様書の(編集上の)誤りである
[lookahead ≠ seq]
次にseqというトークンが出現してはいけない
[lookahead ∉ seq]
次のトークンはsetという集合の要素のどれかではいけない
LookaheadExample
n012345とかが合法なのかyebis0942.icon
なんか人工的な例だねーという感想
Note that when these phrases are used in the syntactic grammar, ...
先読みをsyntactic grammarで使う場合、直後のトークンを曖昧さなく特定することができないことがある
なぜなら、後続のトークンを決定するには、後続の位置でどのlexical goal symbolを使うかを知っておく必要があるから
したがって、次のようなケースが仕様に現れたとしたら、それは仕様のバグである
先読み制約に出現するトークン列 seq が結果のトークン列の頭につくかどうかによって、どのlexical goal symbolを使うかが変わる
(これはあまり深追いしないようにしよう、ということで先に進んだ)
lexical goal symbol: lexical grammarにおけるgoal symbol
改行
restricted production
右辺に[no LineTerminator here]が登場する生成規則
単に「改行が出たら生成規則として使えない」ではなくて、「改行が出たらエラーとみなす」でいいのか?yebis0942.icon
仕様の文面を見ると単に「使えない」だけというのが正しそうだが、ブラウザのエラーを見ると「改行が出たらエラー」としているようにも見える(ただエラーメッセージが親切なだけ?)
「トークン列がvalidなgoal symbolを形成しないならエラーを出す」というのは、自然な発想かもしれませんnoyan.icon
でもこれが真なら「じゃあearly error / syntactic grammer はなぜ必要か?」という部分が分からなくなります。意味論的な保証?
code:throw.js
throw
1
// Firefox:
// Uncaught SyntaxError: no line break is allowed between 'throw' and its expression
// Chrome and Edge:
// Uncaught SyntaxError: Illegal newline after throw
Chromiumのエラーメッセージはrollup由来?自信ないけれどnoyan.icon
V8のほうかも?と思ってソースを検索したけどそれっぽいのなかったですyebis0942.icon
たしかにNode.jsでも同一のエラーメッセージが出てました。DevtoolではなくV8由来と考えたほうが合理性がありそうですね。なんで見つからないんでしょうnoyan.icon
engine262はLineTerminatorを検出したら即座にSyntaxErrorを出してそうyebis0942.icon
明示的にそういう仕様が規定されてるわけではないけど、ここで通してもどうせSyntax Errorになるからここで止めて分かりやすいエラーを送出したほうがいい、ということかな…?
([no LineTerminator here] で禁止されていない限り) 連続した2つのトークンの間にLineTerminatorが現れてもよい
but not
IdentifierName but not ReservedWord で IdentifierName だけど ReservedWord ではないことを表明できる
expandとreplaceの使い分けについてちょっと話した
ここではsymbolが1対1対応するからreplaceなのだろうという結論になった
文章で説明する場合
すべての選択肢を列挙することができない生成規則をサンセリフ体(=ゴシック体)で説明的に書くことがある
(英語) alternative
生成規則の文脈だと「選択肢」と訳すのがしっくりくるが
"an alternative definition"だと「選択肢」とは取りづらい
「代替可能」という気持ち
(英語) editorial error
編集上の誤り
ここでは「仕様書そのものの誤り」という意味
(英語) provided that ~
~である限り
deeplの翻訳
production: 生成
productions: プロダクションズ
mayの訳
mayをどのように訳せばよいか、この読書会に限らずいつも迷います。noyan.icon
江川『英文法解説』とかを読むけれど、コアの意味がつかめた感覚がない…
5.2 Algorithm Conventions
仕様書では処理をアルゴリズムとして定義することがあるが、処理系の内部実装を規定するものではない
仕様書のアルゴリズムと同じ結果が出ていればよいということらしい
アルゴリズムは引数を取ることができる
optional parameters: [, name]のように角カッコでくくられている
no different from required parameters within algorithm steps
アルゴリズムのステップの記述の中ではoptionalでないパラメータと同じように扱われれる
パラメータの数が1〜3の場合、JSON.stringify ( value [ , replacer [ , space ] ] )のように書かれるyebis0942.icon
rest parameter: ...nameのように書かれる
JavaScriptの(...rest) => {})と同じ動きっぽい
アルゴリズムはサブステップからなる
サブステップはさらにサブステップに分割されることがある
Outline numbering conventions
見出しの番号付けの規約
インデントが深くなるごとに「アラビア数字→小文字アルファベット→ローマ数字→アラビア数字(最初に戻る)」と使う番号の種別が変わる
ステップはif文になることもある
Assert:
「次のような条件が成り立っているはず」ということを表明する
このステップの前提としている状態の表明で、アルゴリズムを読みやすくする Jun Yasumura.icon
アルゴリズムの解説のために書かれているだけで、内部実装では気にしなくてよい
Let x be someValueで変数定義みたいなことができる
参照っぽい動きをする = 片方を変更するともう片方も変更される
参照っぽい動きをさせたくない場合はLet x be a copy of someValueと書く
このcopyはshallow copyである
再定義したいときはSet x to someOtherValueと書く
ループがなかったな…。全部再帰で書くのだろうかyebis0942.icon
Repeat, while j is not -1,みたいな記述があった。なるほど〜
(英語) “if” predicate: if述語
論理学の用語としての述語
述語論理の「述語」は、評価するとBoolean になる関数のこと Jun Yasumura.icon
(英語) invariant condition: 不変条件
次回は5.2.1 Abstract Operationsのはじめから