SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
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

Más contenido relacionado

Similar a Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めYou&I
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)shojiro-tanaka
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMFAtomu Hidaka
 
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Hirofumi Iwasaki
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」Masawo Yamazaki
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)NTT DATA Technology & Innovation
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMFAtomu Hidaka
 
OpenDocument interoperability test workshop
OpenDocument interoperability test workshopOpenDocument interoperability test workshop
OpenDocument interoperability test workshopMakoto Takizawa
 
福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験Kaz Ueno
 
Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Yuki Suga
 
Who enjoy a coding standard? ver. 0.30
Who enjoy a coding standard? ver. 0.30Who enjoy a coding standard? ver. 0.30
Who enjoy a coding standard? ver. 0.30Kiyoshi Ogawa
 
bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 BeatCraft
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Fixstars Corporation
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kKenji Aoyama
 
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...SORACOM,INC
 
Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋智啓 出川
 

Similar a Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22) (20)

Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
Jakarta EEとMicroprofileの上手な付き合い方と使い方 - JakartaOne Livestream Japan 2020
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
io tつくるよ! LT [m5stackの拡張基板をつくったよ!」
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
Java 18で入ったJVM関連の(やや細かめな)改善(JJUGナイトセミナー「Java 18 リリース記念イベント」発表資料)
 
2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF2014 0228 OSC-Spring Tokyo NETMF
2014 0228 OSC-Spring Tokyo NETMF
 
OpenDocument interoperability test workshop
OpenDocument interoperability test workshopOpenDocument interoperability test workshop
OpenDocument interoperability test workshop
 
福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験福岡市LoRawan(TM)実証実験
福岡市LoRawan(TM)実証実験
 
Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2Robotech2012講習会v01最終版v2
Robotech2012講習会v01最終版v2
 
Who enjoy a coding standard? ver. 0.30
Who enjoy a coding standard? ver. 0.30Who enjoy a coding standard? ver. 0.30
Who enjoy a coding standard? ver. 0.30
 
bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2 bc10 (Android 2.2対応) について @Gadget1 R2
bc10 (Android 2.2対応) について @Gadget1 R2
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88k
 
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
SORACOM UG 広島 #2 | SORACOM の紹介から SORACOM Conference "Discovery" 2018 SORACOM ...
 
Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋Fortranが拓く世界、VSCodeが架ける橋
Fortranが拓く世界、VSCodeが架ける橋
 

Más de takesako

SECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催についてSECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催についてtakesako
 
Acme minechan
Acme minechanAcme minechan
Acme minechantakesako
 
Acme::MineChan LT demo
Acme::MineChan LT demoAcme::MineChan LT demo
Acme::MineChan LT demotakesako
 
Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread ProgrammingNode.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programmingtakesako
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithmtakesako
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTtakesako
 
再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validatortakesako
 
正規表現‐もう一つのバベルの塔‐木村浩一
正規表現‐もう一つのバベルの塔‐木村浩一正規表現‐もう一つのバベルの塔‐木村浩一
正規表現‐もう一つのバベルの塔‐木村浩一takesako
 
Perl6 Regex Programming with Rakudo
Perl6 Regex Programming with RakudoPerl6 Regex Programming with Rakudo
Perl6 Regex Programming with Rakudotakesako
 
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to usThat Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to ustakesako
 
Perl x86 JIT Programming
Perl x86 JIT ProgrammingPerl x86 JIT Programming
Perl x86 JIT Programmingtakesako
 
YAPC::Asia 2008 Closing Ceremony
YAPC::Asia 2008 Closing CeremonyYAPC::Asia 2008 Closing Ceremony
YAPC::Asia 2008 Closing Ceremonytakesako
 
HTML Binary Hacks & GIF89a Ployglot
HTML Binary Hacks & GIF89a PloyglotHTML Binary Hacks & GIF89a Ployglot
HTML Binary Hacks & GIF89a Ployglottakesako
 
Devsumi2008 - YAPC::Asia 2008 Tokyo
Devsumi2008 - YAPC::Asia 2008 TokyoDevsumi2008 - YAPC::Asia 2008 Tokyo
Devsumi2008 - YAPC::Asia 2008 Tokyotakesako
 
GIF89a Oldtype
GIF89a OldtypeGIF89a Oldtype
GIF89a Oldtypetakesako
 
Shibuyajs Digest
Shibuyajs DigestShibuyajs Digest
Shibuyajs Digesttakesako
 
HTML2.0 - digg - OSC2007-fall
HTML2.0 - digg - OSC2007-fallHTML2.0 - digg - OSC2007-fall
HTML2.0 - digg - OSC2007-falltakesako
 
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser DetectionShibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detectiontakesako
 
Shibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnectShibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnecttakesako
 

Más de takesako (19)

SECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催についてSECCON CTF セキュリティ競技会コンテスト開催について
SECCON CTF セキュリティ競技会コンテスト開催について
 
Acme minechan
Acme minechanAcme minechan
Acme minechan
 
Acme::MineChan LT demo
Acme::MineChan LT demoAcme::MineChan LT demo
Acme::MineChan LT demo
 
Node.js - JavaScript Thread Programming
Node.js - JavaScript Thread ProgrammingNode.js - JavaScript Thread Programming
Node.js - JavaScript Thread Programming
 
Node.js - sleep sort algorithm
Node.js - sleep sort algorithmNode.js - sleep sort algorithm
Node.js - sleep sort algorithm
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
 
再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator再帰的 正規表現JSON Validator
再帰的 正規表現JSON Validator
 
正規表現‐もう一つのバベルの塔‐木村浩一
正規表現‐もう一つのバベルの塔‐木村浩一正規表現‐もう一つのバベルの塔‐木村浩一
正規表現‐もう一つのバベルの塔‐木村浩一
 
Perl6 Regex Programming with Rakudo
Perl6 Regex Programming with RakudoPerl6 Regex Programming with Rakudo
Perl6 Regex Programming with Rakudo
 
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to usThat Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
 
Perl x86 JIT Programming
Perl x86 JIT ProgrammingPerl x86 JIT Programming
Perl x86 JIT Programming
 
YAPC::Asia 2008 Closing Ceremony
YAPC::Asia 2008 Closing CeremonyYAPC::Asia 2008 Closing Ceremony
YAPC::Asia 2008 Closing Ceremony
 
HTML Binary Hacks & GIF89a Ployglot
HTML Binary Hacks & GIF89a PloyglotHTML Binary Hacks & GIF89a Ployglot
HTML Binary Hacks & GIF89a Ployglot
 
Devsumi2008 - YAPC::Asia 2008 Tokyo
Devsumi2008 - YAPC::Asia 2008 TokyoDevsumi2008 - YAPC::Asia 2008 Tokyo
Devsumi2008 - YAPC::Asia 2008 Tokyo
 
GIF89a Oldtype
GIF89a OldtypeGIF89a Oldtype
GIF89a Oldtype
 
Shibuyajs Digest
Shibuyajs DigestShibuyajs Digest
Shibuyajs Digest
 
HTML2.0 - digg - OSC2007-fall
HTML2.0 - digg - OSC2007-fallHTML2.0 - digg - OSC2007-fall
HTML2.0 - digg - OSC2007-fall
 
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser DetectionShibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
Shibuya.pm#8 - ImageFight - HTML 2.0 New Browser Detection
 
Shibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnectShibuyajs24 JavaScript.GIF x LiveConnect
Shibuyajs24 JavaScript.GIF x LiveConnect
 

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