J. 1999 年 1 月におけるモジュール関連の機能に関するコンセンサス
1999 年 1 月 11–12 日の TC39 ワーキンググループ会合では、ECMAScript の将来の版における「大規模プログラミング」のサポートに関する目標と技術的困難について長い議論があった。会合の報告書 [Raggett 1999b] には合意があった次の点が記録されている。
合意があった目標
- ロバストなライブラリと大規模プログラミング
- ライブラリ間、および異なるコード単位間では干渉が起きない
- それなりの効率 ── 事前コンパイルが可能
- 既存の ECMAScript およびそのユーザーとの連続性 (既存のコードを壊さない)
- 対象 ── ナイーブなユーザーと経験を積んだスクリプターに適する (例えば非常に重要なバリデーションパッケージに使える)
- 言語の拡張性
- 利便性
クラス
- 継承 (最低でも単一)
- クラスは型である
- クラスの構文はフィールド、メソッド、継承関係を宣言する
- スロットアクセス構文はゼロ引数のメソッド呼び出し構文と等価
- Herman ならスロットをプロパティと呼ぶだろう (フィールドと呼ぶことになった)
- メソッドは関数を含んだスロットではない
- カプセル化 (プライベート、パブリック、パッケージスコープなど)
- expando
- 「new」コンストラクタによるインスタンスの作成
- 「implements」
インターフェース
- インターフェースを定義するためのクラスに似た構文
- ゲッターとセッターを含むメソッド
- インターフェースは型である
- インターフェースで特定の関数を別の名前で公開する
型
- プリミティブ型
- ローカル変数、フィールド、引数、結果に対する制約を記述する
- 「any」型
- 型注釈は省略可能
パッケージと名前空間/バージョン付け
- パッケージを定義する構文
- 名前空間の制御 ── パッケージ内にあるものを隠す
- ソースパッケージごとの修飾子付き識別子
- インポート
議論したいが合意に達していない事項
- 全てに対する構文
- イベント?
- expando はデフォルトで on か off か
- *メンバーのスコープ規則
- 多重継承?
- インターフェースはフィールド/スロットを含むか?
- インターフェースの継承
- インターフェースにおけるメンバーのデフォルト値
- *静的型と独立した名前の検索
- 型注釈の構文
- *キャスト: アサートか、型強制 (coerce) か?
- 演算子オーバーロード?
- メソッドオーバーロード
- 宣言型: アサートか、型強制か?
- 名前空間の種類はいくつあるのか?
- *リリース済みのパッケージにメソッド、スロット、あるいはグローバル変数をロバストに追加する手段はあるのか?
- パッケージにバージョンを付けられるか?
- *グローバル変数、およびグローバル変数とパッケージの相互作用
- 言語のバージョン付け (「このパッケージはスタイルルールを使う」など)
- パッケージのインターフェース
* が付いた事項はショーストッパーの問題とされた。