Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

43
サイボウズ・ラボ株式会社 竹迫 良範 <[email protected]> C++0xRubyECMAScript5 言語 の国際標準化について 【19-E-52010/02/19 1

Transcript of Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

Page 1: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

サイボウズ・ラボ株式会社

竹迫 良範

<[email protected]>

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

2010/02/19 1

Page 2: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

パネリスト紹介

高橋 晶 【C++0x の概要】

株式会社ロングゲート

C++標準化委員会エキスパート

前田 修吾 【Ruby 国際標準化】

株式会社ネットワーク応用通信研究所

日本Rubyの会

竹迫 良範 【ECMAScript 5th】【司会】

サイボウズ・ラボ株式会社2010/02/19 2

Page 3: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

国際規格(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

Page 4: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

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

Page 5: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

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

Page 6: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

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

Page 7: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

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

Page 8: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

ITSCJ 情報規格調査会(情報処理学会)

JTC 1 には一カ国につき一組織のみが参加

JISC(日本工業標準調査会) → ITSCJ に委任

第1種専門委員会 【JTC 1の各SCに対応】

SC 2 専門委員会 「符号化文字集合」

SC 6 専門委員会 「通信とシステム間の情報交換」

SC 7 専門委員会 「ソフトウェア技術」:

SC 22 専門委員会 ※

「プログラム言語、その環境及びシステムソフトウェアインタフェース」

:2010/02/19 8

Page 9: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

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

Page 10: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

ここで疑問

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

Page 11: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

ISO規格の制定手順

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

2010/02/19 11© JSA 2009 http://www.jsa.or.jp/itn/kensyu/text_iso3-0.pdf

Page 12: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

ISO規格の制定手順

目標期日

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

Page 13: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

迅速手続

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

Page 14: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

参考資料: JSA のホームページより

2010/02/19 14© JSA 2009 http://www.jsa.or.jp/itn/kensyu/text_iso3-0.pdf

Page 15: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

【最新】 プログラミング言語の国際標準化動向

1. C++0xの概要

高橋晶

2. ECMAScript 5th Edition

竹迫良範

3. Ruby国際標準化

前田修吾

2010/02/19 15

Page 16: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

サイボウズ・ラボ株式会社

竹迫 良範

<[email protected]>

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

2010/02/19 16

Page 17: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

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

Page 18: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

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

Page 19: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

消えた!?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

Page 20: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

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

Page 21: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 21

ECMASCript 5で変わった点

Page 22: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

ECMAScript 5 で変わったところ

Strict Mode

slice[0:1:2]

正式な JSON サポート

JSON.parse

JSON.stringify

配列操作メソッドの追加

forEach , filter , map

その他

getter, setter サポート / エラーの厳密定義 など

2010/02/19 22

Page 23: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 23

Strict mode

Page 24: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

Strict Mode - 安全なプログラミング

2010/02/19 24

function foo() {var a = 1;

b = 2; // global scope}

function bar() {”use strict”;

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

}

Page 25: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 25

後方互換性○×

Page 26: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 26

with

Page 27: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

with で疑似ブロックスコープ ×

2010/02/19 27

window.alert(1);

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

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

}}

}

Page 28: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

with で疑似ブロックスコープ → NG

2010/02/19 28

window.alert(1);

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

“use strict”;with({i: i}) {

i = 0;}

}

}

Page 29: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 29

this

Page 30: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

暗黙の this が global object でなくなる

2010/02/19 30

// no strict

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

}

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

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

Page 31: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

暗黙の this が global object でなくなる

2010/02/19 31

”use strict”;

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

}

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

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

Page 32: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 32

”string”[0]

”s”

Page 33: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

jjencode 記号だけで任意のコードが書けます

2010/02/19 33

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

Page 34: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

リテラルの生成

数字の生成

$ = ~[]; // -1

文字の生成

$ = (![]+""); // "false"

$ = (![]+"")[0]; // "f"

$ = ({}+""); // "[object Object]"

$ = ({}+"")[5]; // "c"

$ = ({}.$+""); // "undefined"

$ = ({}.$+"")[1]; // "n"

2010/02/19 34

Page 35: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

任意コードの実行

eval相当の作成

Number.constructor === Function Object

Function( "alert(1)" )(); // substitute for eval

(0)["constructor"]["constructor"]("alert(1)")();

準備

$ = "constructor";

$$ = "alert(1)";

$_ = ~[]; // == -1

($_)[$][$]($$)(); // 実行

2010/02/19 35

Page 37: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

ECMAScript 5 で変わったところ(再掲)

Strict Mode

slice[0:1:2]

正式な JSON サポート

JSON.parse

JSON.stringify

配列操作メソッドの追加

forEach , filter , map

その他

getter, setter サポート / エラーの厳密定義 など

2010/02/19 37

Page 38: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

ECMAScript 規格の特徴

既存の実装

たくさんのブラウザ、言語処理系がある

机上の空論じゃない、利用者がいるHTML SGML

後方互換性の維持

予約語、パーサの変更に敏感 ”use strict”;

特定の企業・実装に左右されにくい

仕様を国際規格団体が保守をしてくれる

データの長期保存、オープンな規格

2010/02/19 38

Page 39: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 39

ECMAScript 5

Conformance Suite

Page 40: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 40

Page 41: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 41

Page 42: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 42

Page 43: Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)

2010/02/19 43