ECMAScript 4 の概要
ECMAScript Edition 4 の language overview whitepaper が出てる。
Proposed ECMAScript 4th Edition Language Overview
簡単に言うと、既存のスクリプト言語にできることは全部詰め込んだ感じ?
Python, VB Script 辺りは確実に意識してて、それに C/C++ 系の {} 文化を盛り込んだら C# 3.0 っぽい雰囲気も出てきたような。それから、(JavaScript は元々結構そうなんだけど)関数型言語的な機能も少々。
正直、詰め込みすぎ感が否めない。
いろんな言語の面白そうな機能を取り込んでるのはよさそうなんですけど、ところどころ、あんまりいい感じに統合できてるようには思えないんですよね。クラス関係の仕様はかなりいい感じだと思うけど、例えば、var と let、for-in と for-each-in みたいに違いの微妙な構文もあって混乱しそう。それに、for-in ループの終了条件を、StopIteration 例外を throw する形で実装するってのが嫌。
あと、とにかく言語仕様が馬鹿でかいのが不安。ユーザが使いこなせるのかって意味でも、こんなのがブラウザに載るのかって意味でも(サポートされる率的にも互換性・性能的にも)不安。
新規の仕様が多すぎて、これを ECMAScript って名前で出すのも微妙な感じ。いっそ、JavaScript ベースじゃなくて、Dynamic C# みたいな言語作った方が多くのプログラマにとっては幸せな気もする。まあ、用途を考えると JavaScript の正統後継者って路線が一番普及を見込めるんだろうけど。
以下、ざっと overview.pdf を眺めてみたのをまとめてみる。
- (静的言語と比べて動的言語では遅れてる)構造化・OOP 機能の充実
- 可能な限り静的型付け(+型推論)、必要に応じて動的型付け
- イテレータ
- 関数型言語的機能
- var v = function fact(n) n < 2 ? n : n * fact(n-1)
- 値を返す1文だけの関数は {} と return を省略可能
- closure がちゃんと再帰呼び出し可能
- tail call の最適化がかかる
- 変数の型に基づいて条件分岐する switch type
- var v = function fact(n) n < 2 ? n : n * fact(n-1)
- その他
- {x, y} みたいな感じでレコード(匿名クラス、tuple)を作れる
- 変数宣言時、変数名の後ろに ! をつけると、常に非 null を保証(non-nullable)
- 逆に、? をつけると nullable に
- ... で可変長引数
- ...args とすると、args が可変長引数を受け取る配列型の変数に
- VB っぽい with statement あり
- array comprehensions
- [i * i for (i in naturals(10))] みたいなやつ
- Destructuring assignment (配列代入)
- [x, y] = [y, x + y] で、x1 = y; y1 = x + y; x = x1; y = y1 扱いの代入
- let キーワードは、関数型言語みたいな immutable 変数定義じゃなくて、単に変数のスコープをブロック内に限定するキーワード