SlideShare a Scribd company logo
C++0x、Ruby、ECMAScript5 言語
   の国際標準化について 【19-E-5】


               サイボウズ・ラボ株式会社
                     竹迫 良範
             <takesako@shibuya.pm.org>
2010/02/19                               1
パネリスト紹介

  高橋 晶            【C++0x の概要】
       株式会社ロングゲート
             C++標準化委員会エキスパート


  前田 修吾 【Ruby 国際標準化】
       株式会社ネットワーク応用通信研究所
             日本Rubyの会


  竹迫 良範 【ECMAScript 5th】【司会】
       サイボウズ・ラボ株式会社
2010/02/19                       2
国際規格(IS)を作っている組織

  ISO(国際標準化機構)
       International Organization for Standardization
  IS (国際規格、 International Standard)
       例:ISO 9660
             情報交換用CD-ROMのボリューム及びファイルの構造
  IS の表記
       ISO NNNNN      (規格番号)
       ISO NNNNN:YYYY (改訂年)
       ISO NNNNN-P    (部番号)
2010/02/19                                               3
ISO/TC

  ISO (国際標準化機構)
       TC (技術委員会、Technical Committee)
  電気・電子技術分野「以外」の国際規格を作成
       ISO/TC 1    ねじ(Screw threads)
       ISO/TC 4    転がり軸受(Rolling bearings)
       ISO/TC 5    金属管及び管継手
       ISO/TC 6    紙、板紙及びパルプ
       ISO/TC 12   量、単位、記号、換算率及び換算量
           :

2010/02/19                                    4
ISO/TC/SC/WG

  TC (技術委員会、Technical Committee)
       SC (分科委員会、Sub Committee)
             WG (作業部会、Working Group)
  例: ISO 9000 シリーズの仕様策定
        ISO/TC 176        (品質管理及び品質保証)
         ISO/TC 176/SC 1         (概念及び用語)
         ISO/TC 176/SC 1/WG 1    (ISO 9000)
         ISO/TC 176/SC 2         (品質システム)
         ISO/TC 176/SC 2/WG 18   (ISO 9001/9004)
       http://www.tc176.org/     (続きはWebで)

2010/02/19                                          5
ISO と IEC の重複分野 ※

  IEC (国際電気標準会議)
       電気及び電子技術分野の国際規格を作成
             International Electrotechnical Commission
       IEC/TC 83         (Information Technology Equipment) ※
       IEC/TC 47         (半導体デバイス)
             IEC/TC 47/SC 47A (集積回路)
             IEC/TC 47/SC 47B (Microprocessor System) ※
       ISO/TC 97         (Information Technology) ※
             用語、文字とコード、入出力、プログラム言語、
              ディジタルデータ変換、定義と分析、機械装置の数値制御

2010/02/19                                                       6
ISO/IEC JTC 1 (Information Technology)

  ISO/IEC
       JTC 1 (第一合同技術委員会)
             Joint Technical Committee for Information Technology
       以前は ISO と IEC で情報技術の標準化作業が重複
             情報技術の標準化を行う合同技術委員会を新設
             IEC//SC 47B と IEC/TC 83 を事実上 ISO/TC 97 に統合
             ISOのEicher事務総長が「Tsunami」と呼んだほどの衝撃




2010/02/19                                                           7
ITSCJ 情報規格調査会(情報処理学会)

  JTC 1 には一カ国につき一組織のみが参加
       JISC(日本工業標準調査会) → ITSCJ に委任
  第1種専門委員会 【JTC 1の各SCに対応】
       SC 2 専門委員会 「符号化文字集合」
       SC 6 専門委員会 「通信とシステム間の情報交換」
       SC 7 専門委員会 「ソフトウェア技術」
              :
       SC 22 専門委員会 ※
             「プログラム言語、その環境及び
               システムソフトウェアインタフェース」
2010/02/19
                 :                    8
JTC 1/SC 22

  プログラム言語、その環境及び
   システムソフトウェアインタフェース
       SC   22/WG 4    COBOL
       SC   22/WG 5    Fortran
       SC   22/WG 11   言語共通
       SC   22/WG 14   C
       SC   22/WG 16   LISP
       SC   22/WG 17   Prolog
       SC   22/WG 21   C++

2010/02/19                        9
ここで疑問

  C++の標準化は…?
       ISO/IEC JTC 1/SC 22/WG 21 で言語仕様を策定
             ⇔ 情報規格調査会/SC 22/WG 21(日本)
  ECMAScript のWGが…ない?
       言語仕様の原案は ECMA TC39 が作成・保守
             ECMA から Fast-Track 手続きで IS 化
       IS各国投票(必要に応じて国際一致JISの作成)
             日本の対応: SC 22 に ECMAScript ad hoc 委員会を設置
  Ruby のWGが…ない?
       IS より前に JIS の原案を作成中…
2010/02/19                                          10
ISO規格の制定手順

  国際規格(IS)発行までに作成するドキュメント




2010/02/19   © JSA 2009 http://www.jsa.or.jp/itn/kensyu/text_iso3-0.pdf   11
ISO規格の制定手順

  目標期日




2010/02/19   © JSA 2009 http://www.jsa.or.jp/itn/kensyu/text_iso3-0.pdf   12
迅速手続

  Fast-Track(迅速手続)
       Pメンバ、Aリエゾンで制定した規格をそのままIS化
             ECMA  ISO/IEC JTC 1 (ECMAScript、C#、CLI)
             JIS  ISO/IEC JTC 1 (Ruby)
  PAS方式
       PAS Submitter資格を有する団体からのPAS提案
                IS後の保守のため、リエゾン関係を締結することがある
             OASIS  ISO/IEC JTC 1/SC 34 (ODF) … ○
             Sun  ISO/IEC JTC 1/SC 22 JSG (Java) …×
             FSG  ISO/IEC JTC 1/SC 22 LSG (Linux) …?

2010/02/19                                               13
参考資料: JSA のホームページより




2010/02/19   © JSA 2009 http://www.jsa.or.jp/itn/kensyu/text_iso3-0.pdf   14
【最新】 プログラミング言語の国際標準化動向

  1. C++0xの概要
        高橋 晶


  2. ECMAScript 5th Edition
        竹迫 良範

  3. Ruby国際標準化
        前田 修吾

2010/02/19                    15
【19-E-5】 ECMASCript 5th Edition
             で何が変わったか


               サイボウズ・ラボ株式会社
                     竹迫 良範
             <takesako@shibuya.pm.org>
2010/02/19                               16
ECMAScript の標準仕様はどこで決まっている?

  ECMA International
       ECMAScript (ECMA-262)
             ECMA TC39 で原案作成、保守、改訂
  国際規格(IS)
       ISO/IEC 16262
             各国の SC22 mirror committee が投票、コメント
  国内規格(JIS)
       JIS X 3060
             (必要があれば)JIS原案作成委員会にて策定・改訂
                参考:JIS Z 8301(規格票の様式及び作成方法)
2010/02/19                                         17
ECMAScript のバージョン

  1997年6月
       ECMA-262    1st Edition
  1998年6月
       ECMA-262  ISO/IEC 16262 に対応
  1999年12月
       ECMA-262    3rd Edition
             正規表現、文字列処理、try/catch、エラー処理などを追加
  2009年12月
       ECMA-262    5th Edition  いまここ
2010/02/19                                  18
消えた!?ECMAScript 4

 ActionScript 3.0 から継承
    namespace, package, class, interface, 継承
    const, プロパティ, var i:int, is, as 演算子
 JavaScript 1.7 から継承
    let宣言(待望のブロックスコープ!)
    分割代入 ([a, b] = [1, 2])
    yield(ジェネレーター)、イテレータ
 ECMAScript の拡張
       演算子オーバーロード
       “string”[0] == “s” とか
2010/02/19                                      19
ECMAScript 5th Edition

  ECMAScript 4 は様々な理由で結局まとまらず…
  ECMAScript 3 からの10年の空白
  ECMAScript 3.1 をベースに 5th Edition を作成
       今年の ISO/IEC 16262:2010 策定を目指す
             Fast-Track手続申請、JTC1参加各国が投票の準備中


  日本では…
       SC22 ECMAScript アドホック委員会を招集して
        審議開始・投票・コメントを準備
2010/02/19                                     20
ECMASCript 5
   で変わった点
2010/02/19       21
ECMAScript 5 で変わったところ

  Strict Mode
  slice[0:1:2]
  正式な JSON サポート
       JSON.parse
       JSON.stringify
  配列操作メソッドの追加
       forEach , filter , map
  その他
       getter, setter サポート / エラーの厳密定義 など
2010/02/19                                  22
Strict mode

2010/02/19            23
Strict Mode - 安全なプログラミング


        function foo() {
             var a = 1;
                 b = 2; // global scope
        }

        function bar() {
             ”use strict”;

             var c = 3;
                 d = 4; // Error
        }


2010/02/19                                24
後方互換性
              ○×
2010/02/19           25
with

2010/02/19          26
with で疑似ブロックスコープ ×


        window.alert(1);

        with (window) {
             alert(2);
             for (var i = 0; i < 100; i++) {

                  with({i: i}) {
                       i = 0;
                  }
             }

        }
2010/02/19                                     27
with で疑似ブロックスコープ → NG


        window.alert(1);

        with (window) {
             alert(2);
             for (var i = 0; i < 100; i++) {
                   “use strict”;
                   with({i: i}) {
                        i = 0;
                   }
             }

        }
2010/02/19                                     28
this

2010/02/19          29
暗黙の this が global object でなくなる


        // no strict

        function Point(x, y) {
             this.x = x + 0.0;
             this.y = y + 0.0;
        }

        var a = new Point(1, 2); // ok
        var b =     Point(1, 2); // miss

             // b = {window.x = 1, window.y = 2};


2010/02/19                                          30
暗黙の this が global object でなくなる


        ”use strict”;

        function Point(x, y) {
             this.x = x + 0.0;
             this.y = y + 0.0;
        }

        var a = new Point(1, 2); // ok
        var b =     Point(1, 2); // miss

             // b = {undefined.x = 1, undefined.y = 2};


2010/02/19                                                31
”string”[0]

                ”s”
2010/02/19                 32
jjencode 記号だけで任意のコードが書けます

       Javascript:$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_
       :(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$
       $:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$
       _:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+
       ($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$
       ]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[
       $._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$
       ]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+
       "¥""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"¥¥"+$.__$+$.$$_+$._$_
       +$.__+"(¥¥¥"¥¥"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+
       (![]+"")[$._$_]+$._$+",
       ¥¥"+$.__$+$.__$+$._$_+$.$_$_+"¥¥"+$.__$+$.$$_+$.$$_+$.$_$
       _+"¥¥"+$.__$+$._$_+$._$$+$.$$__+"¥¥"+$.__$+$.$$_+$._$_+"¥
       ¥"+$.__$+$.$_$+$.__$+"¥¥"+$.__$+$.$$_+$.___+$.__+"¥¥¥")"+
       "¥"")())();



2010/02/19                                                         33
リテラルの生成

  数字の生成
       $ = ~[]; // -1
  文字の生成
       $ =   (![]+"");       // "false"
       $ =   (![]+"")[0];    // "f"
       $ =   ({}+"");        // "[object Object]"
       $ =   ({}+"")[5];     // "c"
       $ =   ({}.$+"");      // "undefined"
       $ =   ({}.$+"")[1];   // "n"
2010/02/19                                           34
任意コードの実行

  eval相当の作成
       Number.constructor === Function Object
       Function( "alert(1)" )(); // substitute for eval
       (0)["constructor"]["constructor"]("alert(1)")();
  準備
       $ = "constructor";
       $$ = "alert(1)";
       $_ = ~[];    // == -1
  ($_)[$][$]($$)();         // 実行
2010/02/19                                                 35
2010/02/19   36
ECMAScript 5 で変わったところ(再掲)

  Strict Mode
  slice[0:1:2]
  正式な JSON サポート
       JSON.parse
       JSON.stringify
  配列操作メソッドの追加
       forEach , filter , map
  その他
       getter, setter サポート / エラーの厳密定義 など
2010/02/19                                  37
ECMAScript 規格の特徴

  既存の実装
       たくさんのブラウザ、言語処理系がある
       机上の空論じゃない、利用者がいる
             HTML  SGML
  後方互換性の維持
       予約語、パーサの変更に敏感 ”use strict”;
  特定の企業・実装に左右されにくい
       仕様を国際規格団体が保守をしてくれる
       データの長期保存、オープンな規格
2010/02/19                            38
ECMAScript 5
    Conformance Suite

2010/02/19              39
2010/02/19   40
2010/02/19   41
2010/02/19   42
2010/02/19   43

More Related Content

Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

  • 1. C++0x、Ruby、ECMAScript5 言語 の国際標準化について 【19-E-5】 サイボウズ・ラボ株式会社 竹迫 良範 <takesako@shibuya.pm.org> 2010/02/19 1
  • 2. パネリスト紹介 高橋 晶 【C++0x の概要】 株式会社ロングゲート C++標準化委員会エキスパート 前田 修吾 【Ruby 国際標準化】 株式会社ネットワーク応用通信研究所 日本Rubyの会 竹迫 良範 【ECMAScript 5th】【司会】 サイボウズ・ラボ株式会社 2010/02/19 2
  • 3. 国際規格(IS)を作っている組織 ISO(国際標準化機構) International Organization for Standardization IS (国際規格、 International Standard) 例:ISO 9660 情報交換用CD-ROMのボリューム及びファイルの構造 IS の表記 ISO NNNNN (規格番号) ISO NNNNN:YYYY (改訂年) ISO NNNNN-P (部番号) 2010/02/19 3
  • 4. ISO/TC ISO (国際標準化機構) TC (技術委員会、Technical Committee) 電気・電子技術分野「以外」の国際規格を作成 ISO/TC 1 ねじ(Screw threads) ISO/TC 4 転がり軸受(Rolling bearings) ISO/TC 5 金属管及び管継手 ISO/TC 6 紙、板紙及びパルプ ISO/TC 12 量、単位、記号、換算率及び換算量 : 2010/02/19 4
  • 5. ISO/TC/SC/WG TC (技術委員会、Technical Committee) SC (分科委員会、Sub Committee) WG (作業部会、Working Group) 例: ISO 9000 シリーズの仕様策定  ISO/TC 176 (品質管理及び品質保証) ISO/TC 176/SC 1 (概念及び用語) ISO/TC 176/SC 1/WG 1 (ISO 9000) ISO/TC 176/SC 2 (品質システム) ISO/TC 176/SC 2/WG 18 (ISO 9001/9004)  http://www.tc176.org/ (続きはWebで) 2010/02/19 5
  • 6. ISO と IEC の重複分野 ※ IEC (国際電気標準会議) 電気及び電子技術分野の国際規格を作成 International Electrotechnical Commission IEC/TC 83 (Information Technology Equipment) ※ IEC/TC 47 (半導体デバイス) IEC/TC 47/SC 47A (集積回路) IEC/TC 47/SC 47B (Microprocessor System) ※ ISO/TC 97 (Information Technology) ※ 用語、文字とコード、入出力、プログラム言語、 ディジタルデータ変換、定義と分析、機械装置の数値制御 2010/02/19 6
  • 7. ISO/IEC JTC 1 (Information Technology) ISO/IEC JTC 1 (第一合同技術委員会) Joint Technical Committee for Information Technology 以前は ISO と IEC で情報技術の標準化作業が重複 情報技術の標準化を行う合同技術委員会を新設 IEC//SC 47B と IEC/TC 83 を事実上 ISO/TC 97 に統合 ISOのEicher事務総長が「Tsunami」と呼んだほどの衝撃 2010/02/19 7
  • 8. ITSCJ 情報規格調査会(情報処理学会) JTC 1 には一カ国につき一組織のみが参加 JISC(日本工業標準調査会) → ITSCJ に委任 第1種専門委員会 【JTC 1の各SCに対応】 SC 2 専門委員会 「符号化文字集合」 SC 6 専門委員会 「通信とシステム間の情報交換」 SC 7 専門委員会 「ソフトウェア技術」 : SC 22 専門委員会 ※ 「プログラム言語、その環境及び システムソフトウェアインタフェース」 2010/02/19 : 8
  • 9. JTC 1/SC 22 プログラム言語、その環境及び システムソフトウェアインタフェース SC 22/WG 4 COBOL SC 22/WG 5 Fortran SC 22/WG 11 言語共通 SC 22/WG 14 C SC 22/WG 16 LISP SC 22/WG 17 Prolog SC 22/WG 21 C++ 2010/02/19 9
  • 10. ここで疑問 C++の標準化は…? ISO/IEC JTC 1/SC 22/WG 21 で言語仕様を策定 ⇔ 情報規格調査会/SC 22/WG 21(日本) ECMAScript のWGが…ない? 言語仕様の原案は ECMA TC39 が作成・保守 ECMA から Fast-Track 手続きで IS 化 IS各国投票(必要に応じて国際一致JISの作成) 日本の対応: SC 22 に ECMAScript ad hoc 委員会を設置 Ruby のWGが…ない? IS より前に JIS の原案を作成中… 2010/02/19 10
  • 12. ISO規格の制定手順 目標期日 2010/02/19 © JSA 2009 http://www.jsa.or.jp/itn/kensyu/text_iso3-0.pdf 12
  • 13. 迅速手続 Fast-Track(迅速手続) Pメンバ、Aリエゾンで制定した規格をそのままIS化 ECMA  ISO/IEC JTC 1 (ECMAScript、C#、CLI) JIS  ISO/IEC JTC 1 (Ruby) PAS方式 PAS Submitter資格を有する団体からのPAS提案  IS後の保守のため、リエゾン関係を締結することがある OASIS  ISO/IEC JTC 1/SC 34 (ODF) … ○ Sun  ISO/IEC JTC 1/SC 22 JSG (Java) …× FSG  ISO/IEC JTC 1/SC 22 LSG (Linux) …? 2010/02/19 13
  • 14. 参考資料: JSA のホームページより 2010/02/19 © JSA 2009 http://www.jsa.or.jp/itn/kensyu/text_iso3-0.pdf 14
  • 15. 【最新】 プログラミング言語の国際標準化動向 1. C++0xの概要  高橋 晶 2. ECMAScript 5th Edition  竹迫 良範 3. Ruby国際標準化  前田 修吾 2010/02/19 15
  • 16. 【19-E-5】 ECMASCript 5th Edition で何が変わったか サイボウズ・ラボ株式会社 竹迫 良範 <takesako@shibuya.pm.org> 2010/02/19 16
  • 17. ECMAScript の標準仕様はどこで決まっている? ECMA International ECMAScript (ECMA-262) ECMA TC39 で原案作成、保守、改訂 国際規格(IS) ISO/IEC 16262 各国の SC22 mirror committee が投票、コメント 国内規格(JIS) JIS X 3060 (必要があれば)JIS原案作成委員会にて策定・改訂  参考:JIS Z 8301(規格票の様式及び作成方法) 2010/02/19 17
  • 18. ECMAScript のバージョン 1997年6月 ECMA-262 1st Edition 1998年6月 ECMA-262  ISO/IEC 16262 に対応 1999年12月 ECMA-262 3rd Edition 正規表現、文字列処理、try/catch、エラー処理などを追加 2009年12月 ECMA-262 5th Edition  いまここ 2010/02/19 18
  • 19. 消えた!?ECMAScript 4 ActionScript 3.0 から継承 namespace, package, class, interface, 継承 const, プロパティ, var i:int, is, as 演算子 JavaScript 1.7 から継承 let宣言(待望のブロックスコープ!) 分割代入 ([a, b] = [1, 2]) yield(ジェネレーター)、イテレータ ECMAScript の拡張 演算子オーバーロード “string”[0] == “s” とか 2010/02/19 19
  • 20. ECMAScript 5th Edition ECMAScript 4 は様々な理由で結局まとまらず… ECMAScript 3 からの10年の空白 ECMAScript 3.1 をベースに 5th Edition を作成 今年の ISO/IEC 16262:2010 策定を目指す Fast-Track手続申請、JTC1参加各国が投票の準備中 日本では… SC22 ECMAScript アドホック委員会を招集して 審議開始・投票・コメントを準備 2010/02/19 20
  • 21. ECMASCript 5 で変わった点 2010/02/19 21
  • 22. ECMAScript 5 で変わったところ Strict Mode slice[0:1:2] 正式な JSON サポート JSON.parse JSON.stringify 配列操作メソッドの追加 forEach , filter , map その他 getter, setter サポート / エラーの厳密定義 など 2010/02/19 22
  • 24. Strict Mode - 安全なプログラミング function foo() { var a = 1; b = 2; // global scope } function bar() { ”use strict”; var c = 3; d = 4; // Error } 2010/02/19 24
  • 25. 後方互換性 ○× 2010/02/19 25
  • 27. with で疑似ブロックスコープ × window.alert(1); with (window) { alert(2); for (var i = 0; i < 100; i++) { with({i: i}) { i = 0; } } } 2010/02/19 27
  • 28. with で疑似ブロックスコープ → NG window.alert(1); with (window) { alert(2); for (var i = 0; i < 100; i++) { “use strict”; with({i: i}) { i = 0; } } } 2010/02/19 28
  • 30. 暗黙の this が global object でなくなる // no strict function Point(x, y) { this.x = x + 0.0; this.y = y + 0.0; } var a = new Point(1, 2); // ok var b = Point(1, 2); // miss // b = {window.x = 1, window.y = 2}; 2010/02/19 30
  • 31. 暗黙の this が global object でなくなる ”use strict”; function Point(x, y) { this.x = x + 0.0; this.y = y + 0.0; } var a = new Point(1, 2); // ok var b = Point(1, 2); // miss // b = {undefined.x = 1, undefined.y = 2}; 2010/02/19 31
  • 32. ”string”[0]  ”s” 2010/02/19 32
  • 33. jjencode 記号だけで任意のコードが書けます Javascript:$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_ :(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$ $:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$ _:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+ ($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$ ]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[ $._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$ ]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+ "¥""+$.$_$_+(![]+"")[$._$_]+$.$$$_+"¥¥"+$.__$+$.$$_+$._$_ +$.__+"(¥¥¥"¥¥"+$.__$+$.__$+$.___+$.$$$_+(![]+"")[$._$_]+ (![]+"")[$._$_]+$._$+", ¥¥"+$.__$+$.__$+$._$_+$.$_$_+"¥¥"+$.__$+$.$$_+$.$$_+$.$_$ _+"¥¥"+$.__$+$._$_+$._$$+$.$$__+"¥¥"+$.__$+$.$$_+$._$_+"¥ ¥"+$.__$+$.$_$+$.__$+"¥¥"+$.__$+$.$$_+$.___+$.__+"¥¥¥")"+ "¥"")())(); 2010/02/19 33
  • 34. リテラルの生成 数字の生成 $ = ~[]; // -1 文字の生成 $ = (![]+""); // "false" $ = (![]+"")[0]; // "f" $ = ({}+""); // "[object Object]" $ = ({}+"")[5]; // "c" $ = ({}.$+""); // "undefined" $ = ({}.$+"")[1]; // "n" 2010/02/19 34
  • 35. 任意コードの実行 eval相当の作成 Number.constructor === Function Object Function( "alert(1)" )(); // substitute for eval (0)["constructor"]["constructor"]("alert(1)")(); 準備 $ = "constructor"; $$ = "alert(1)"; $_ = ~[]; // == -1 ($_)[$][$]($$)(); // 実行 2010/02/19 35
  • 37. ECMAScript 5 で変わったところ(再掲) Strict Mode slice[0:1:2] 正式な JSON サポート JSON.parse JSON.stringify 配列操作メソッドの追加 forEach , filter , map その他 getter, setter サポート / エラーの厳密定義 など 2010/02/19 37
  • 38. ECMAScript 規格の特徴 既存の実装 たくさんのブラウザ、言語処理系がある 机上の空論じゃない、利用者がいる HTML  SGML 後方互換性の維持 予約語、パーサの変更に敏感 ”use strict”; 特定の企業・実装に左右されにくい 仕様を国際規格団体が保守をしてくれる データの長期保存、オープンな規格 2010/02/19 38
  • 39. ECMAScript 5 Conformance Suite 2010/02/19 39