Devsumi2010 Ecmascript5 (ISO/IEC JTC1/SC22)
- 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
- 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
- 15. 【最新】 プログラミング言語の国際標準化動向
1. C++0xの概要
高橋 晶
2. ECMAScript 5th Edition
竹迫 良範
3. Ruby国際標準化
前田 修吾
2010/02/19 15
- 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
- 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
- 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