Skip to content

Instantly share code, notes, and snippets.

@Layzie
Created April 7, 2012 05:28
Show Gist options
  • Save Layzie/2325537 to your computer and use it in GitHub Desktop.
Save Layzie/2325537 to your computer and use it in GitHub Desktop.

ECMAScript勉強会

2012/04/07 渋谷

例によって、抜けなんかもあります。

自己紹介タイム

何だか錚々たる面々でビビりました。

ECMAScript概要

rika-tさん

  • ECMA-262 5.1Editionでの記載に沿う形での説明。
  • 表記の説明
  • Object
    • 0以上のプロパティの集合
  • 属性
    • 書き込み可能、列挙可能なプロパティの振舞を設定するもの
  • プロパティ
    • 他のオブジェクト、プリミティブ値、関数の入れ物
  • プリミティブ値
    • Undefined / Null / Boolean / Number / String
  • 組み込みオブジェクト
    • Object、Array、JSONなどなど
  • 何でNullがオブジェクトなの?→ takesakoさん
    • 実装バグ。ブレンダンさんが時間無かったから。→ Constなんとかさん
    • NodeではNullnullにするオプションが付いた!
  • プリミティブに対してメソッド呼び出しは本来おかしい
    • ラッパーオブジェクトがあるのは言語仕様上の一貫性
  • Globalオブジェクト
    • 何らかの実行領域の前に実行されるオブジェクト
  • クラスは無い
    • ES.Nextまではクラスという文字を使ってたけど、Nextになってから無くなった。仕様書で。
    • クラスが無いかわりにコンストラクタ呼び出しでのオブジェクト生成
      • []:Array, {}: Object
  • Prototypeの図が分かりにくすぎるww
    • Prototypeチェーンは親のプロパティを使えるんだよ
  • 変数宣言
    • varキーワードの後にIdentifier
    • 予約語(7.6.1.1Keyword)
    • 将来の予約語あり
      • strict mordだとさらに増える
    • 仕様書読むのは色々と遡ったりしないといけないよ。
    • GetValueSetValueは見ておいた方が良い

ES.Next追っかけ

teramakoさん

  • プレゼンは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特権でモジュールとして実行するので面倒
  • iv/jsで解析
    • Constなんとかさん作
  • JavaScript Syntax Tree Visualization with Esprima
  • ECMA Script各ページ
    • ES5
      • PDF
      • GitHub
    • Draft
    • Quasis Demo
      • テンプレート構文
      • ヒアドキュメントっぽいの
      • バッククォートで複数行でも対応
      • 変数にも対応
    • letキーワード
      • Firefoxでは入った
      • Chromeではリジェクトw

ES.next the corner cases

Constellationさん

  • 来場の人はみんな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以外が作れる
      • 実はArrayObjectではない…
      • Arrayの継承ができる!
    • なんでLiteralしか来れない?
      • おそらく、静的に確定させたい
      • [[Prototype]]が書き変わると色々不都合
    • 継承できるよ
  • 便利関数を増やす
    • Stringだと…
      • repeatとかtoArrayでも
    • isFinitとかGlobalにもどっちにもあるw
    • フィードバックがあるんで、欲しい数学関数がある人は今のうち!
  • その他
    • duplicateな変数名のpurge機構
      • function test(a) { var a = 20;}みたいのがSyntaxErrorに!
    • 今まで、NaNなDateがtoStringでどのような値を返すか仕様では決まってない
      • invaild Dateがエラーを返すかも
    • enumeration
      • propertyfor-inObject.keysで登場順が決まるようになった
    • LHSについて改訂
      • (1, 2, 3) = 20ReferenceErrorでは無くSyntaxErrorになる
    • ES.next draftにあるバグ
      • ({ responseText }) = res;が認められる
        • 左辺がオブジェクトリテラルと解釈されないといけないが、全然解釈できない
    • ES5ではあったけど for (var i = 20 in []) {};みたいのがひっそり消えた…寂しい

ECMA-262 6th Draftを実際に読む

全員で

全員でECMA-262 6th Draftを実際に読んでいきます。

  • Unicordは0xfb00なんかをUpperCaseにすると0xFFFb00になってしまう
  • 何とECMAScriptはJavaに似ていると書いてるww
  • use strictは結構曖昧。明確な範囲が決まっていない
    • 特に関数内のuse strictだとbodyだけなのか、引数まで含めるのか、関数名までなのかなど
      • ディスカッションにより、関数名まで含んでという事になりました
  • 5章で終わり
  • 次回続きをやって欲しいと思いました
    • 5月中旬に第2回らしいです
    • 別の仕様書を読む勉強会も開催したいそうです

良い勉強会ありがとうございました!発表者の方々、主催のrika-tさんお疲れさまでした。

発表者の方々のスライド

予定地。アップされ次第こちらに載せていこうと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment