2012/04/07 渋谷
例によって、抜けなんかもあります。
何だか錚々たる面々でビビりました。
- ECMA-262 5.1Editionでの記載に沿う形での説明。
- 表記の説明
- Object
- 0以上のプロパティの集合
- 属性
- 書き込み可能、列挙可能なプロパティの振舞を設定するもの
- プロパティ
- 他のオブジェクト、プリミティブ値、関数の入れ物
- プリミティブ値
- Undefined / Null / Boolean / Number / String
- 組み込みオブジェクト
- Object、Array、JSONなどなど
- 何で
Nullがオブジェクトなの?→ takesakoさん- 実装バグ。ブレンダンさんが時間無かったから。→ Constなんとかさん
- Nodeでは
Nullをnullにするオプションが付いた!
- プリミティブに対してメソッド呼び出しは本来おかしい
- ラッパーオブジェクトがあるのは言語仕様上の一貫性
- Globalオブジェクト
- 何らかの実行領域の前に実行されるオブジェクト
- クラスは無い
- ES.Nextまではクラスという文字を使ってたけど、Nextになってから無くなった。仕様書で。
- クラスが無いかわりにコンストラクタ呼び出しでのオブジェクト生成
- []:Array, {}: Object
- Prototypeの図が分かりにくすぎるww
- Prototypeチェーンは親のプロパティを使えるんだよ
- 変数宣言
varキーワードの後にIdentifier- 予約語(7.6.1.1Keyword)
- 将来の予約語あり
- strict mordだとさらに増える
- 仕様書読むのは色々と遡ったりしないといけないよ。
GetValueとSetValueは見ておいた方が良い
- プレゼンはFirefox + Vimperator!ステキ。
- ES.Nextの追いかけ方
- MLの購読
- Draft版の構文抽出
- Mozillaの実装
- ML
- es-discuss@mozilla.org
- 追っかけならぜひ購読
- 結構多い
- wiki.ecmascript.orgに提案書いて、MLで議論
- Draft版の構文抽出
- MLにアップデートアナウンスを見て、pdfをダウンロード
- pdfに色付けされてるので変更点を追っていく
- teramakoさんが構文抽出したページを作ってくれている
- なぜ作ったか。→Annexが更新されないので
- Mozillaの実装
- SpiderMonkeyのHarmoby実装をトラッキングするメタバグがある
- CCListに登録するとメールが来る
- ScratchPadが便利
- FirefoxのJavaScript実行環境
- 構文解析
- SpiderMonkeyで構文解析
- Reflect.parse()メソッド
- 結果をオブジェクトツリーで返してくれる
- Firefoxで構文解析
- Chrome特権でモジュールとして実行するので面倒
- SpiderMonkeyで構文解析
- iv/jsで解析
- Constなんとかさん作
- JavaScript Syntax Tree Visualization with Esprima
- ECMA Script各ページ
- ES5
- GitHub
- Draft
- Quasis Demo
- テンプレート構文
- ヒアドキュメントっぽいの
- バッククォートで複数行でも対応
- 変数にも対応
letキーワード- Firefoxでは入った
- Chromeではリジェクトw
- ES5
- 来場の人はみんなES.Nextに詳しいんでは…w
- なので、誰も知らないようなものでw
- Esprimaのコミッターをされてる
- ConstDeclaraionの素晴らしさ
- uninitializedを持たない
- ES6 draft仕様の特徴
- BNFだけじゃだめになった
- block scope
- uninitializedを持たないためruntimeにしか分からない状態…
- ConstDeclarationの素晴らしさ
- section 11.13 Runtime Semantics
const V = 20;
V = 30; //Throw Error!
- より値の同一性の重きを置いたequal
- is/isnt
- NaN is NaN => true
- Map/Setにおけるequalityの基盤
- is/isntはContextual Keyword
- これに限らず、ES.nextではStatement先頭以外のkeywordは大体そう。
var letとかで銀行サイトでWebkitが壊れるとかww
- triangle literal
- 左辺のobjectを右辺のliteralの[[Prototype]]に割り当てる
Object.createがあるよねArrayなど、Object以外が作れる- 実は
ArrayはObjectではない… Arrayの継承ができる!
- なんでLiteralしか来れない?
- おそらく、静的に確定させたい
- [[Prototype]]が書き変わると色々不都合
- 継承できるよ
- 便利関数を増やす
Stringだと…repeatとかtoArrayでも
isFinitとかGlobalにもどっちにもあるw- フィードバックがあるんで、欲しい数学関数がある人は今のうち!
- その他
- duplicateな変数名のpurge機構
function test(a) { var a = 20;}みたいのがSyntaxErrorに!
- 今まで、
NaNなDateがtoStringでどのような値を返すか仕様では決まってないinvaild Dateがエラーを返すかも
enumerationpropertyのfor-inやObject.keysで登場順が決まるようになった
- LHSについて改訂
(1, 2, 3) = 20がReferenceErrorでは無くSyntaxErrorになる
- ES.next draftにあるバグ
({ responseText }) = res;が認められる- 左辺がオブジェクトリテラルと解釈されないといけないが、全然解釈できない
- ES5ではあったけど
for (var i = 20 in []) {};みたいのがひっそり消えた…寂しい
- duplicateな変数名のpurge機構
全員でECMA-262 6th Draftを実際に読んでいきます。
- Unicordは
0xfb00なんかをUpperCaseにすると0xFFFb00になってしまう - 何とECMAScriptはJavaに似ていると書いてるww
use strictは結構曖昧。明確な範囲が決まっていない- 特に関数内の
use strictだとbodyだけなのか、引数まで含めるのか、関数名までなのかなど- ディスカッションにより、関数名まで含んでという事になりました
- 特に関数内の
- 5章で終わり
- 次回続きをやって欲しいと思いました
- 5月中旬に第2回らしいです
- 別の仕様書を読む勉強会も開催したいそうです
良い勉強会ありがとうございました!発表者の方々、主催のrika-tさんお疲れさまでした。
予定地。アップされ次第こちらに載せていこうと思います。
- @rika-tさん
- @teramakoさん
- @Constellationさん