J. 1999 年 1 月におけるモジュール関連の機能に関するコンセンサス

1999 年 1 月 11–12 日の TC39 ワーキンググループ会合では、ECMAScript の将来の版における「大規模プログラミング」のサポートに関する目標と技術的困難について長い議論があった。会合の報告書 [Raggett 1999b] には合意があった次の点が記録されている。

合意があった目標

  • ロバストなライブラリと大規模プログラミング
  • ライブラリ間、および異なるコード単位間では干渉が起きない
  • それなりの効率 ── 事前コンパイルが可能
  • 既存の ECMAScript およびそのユーザーとの連続性 (既存のコードを壊さない)
  • 対象 ── ナイーブなユーザーと経験を積んだスクリプターに適する (例えば非常に重要なバリデーションパッケージに使える)
  • 言語の拡張性
  • 利便性

クラス

  • 継承 (最低でも単一)
  • クラスは型である
  • クラスの構文はフィールド、メソッド、継承関係を宣言する
  • スロットアクセス構文はゼロ引数のメソッド呼び出し構文と等価
  • Herman ならスロットをプロパティと呼ぶだろう (フィールドと呼ぶことになった)
  • メソッドは関数を含んだスロットではない
  • カプセル化 (プライベート、パブリック、パッケージスコープなど)
  • expando
  • 「new」コンストラクタによるインスタンスの作成
  • 「implements」

インターフェース

  • インターフェースを定義するためのクラスに似た構文
  • ゲッターとセッターを含むメソッド
  • インターフェースは型である
  • インターフェースで特定の関数を別の名前で公開する

  • プリミティブ型
  • ローカル変数、フィールド、引数、結果に対する制約を記述する
  • 「any」型
  • 型注釈は省略可能

パッケージと名前空間/バージョン付け

  • パッケージを定義する構文
  • 名前空間の制御 ── パッケージ内にあるものを隠す
  • ソースパッケージごとの修飾子付き識別子
  • インポート

議論したいが合意に達していない事項

  • 全てに対する構文
  • イベント?
  • expando はデフォルトで on か off か
  • *メンバーのスコープ規則
  • 多重継承?
  • インターフェースはフィールド/スロットを含むか?
  • インターフェースの継承
  • インターフェースにおけるメンバーのデフォルト値
  • *静的型と独立した名前の検索
  • 型注釈の構文
  • *キャスト: アサートか、型強制 (coerce) か?
  • 演算子オーバーロード?
  • メソッドオーバーロード
  • 宣言型: アサートか、型強制か?
  • 名前空間の種類はいくつあるのか?
  • *リリース済みのパッケージにメソッド、スロット、あるいはグローバル変数をロバストに追加する手段はあるのか?
  • パッケージにバージョンを付けられるか?
  • *グローバル変数、およびグローバル変数とパッケージの相互作用
  • 言語のバージョン付け (「このパッケージはスタイルルールを使う」など)
  • パッケージのインターフェース

* が付いた事項はショーストッパーの問題とされた。

関連書籍 (Amazon アソシエイト)
プロを目指す人のためのTypeScript入門 安全なコードの書き方から高度な型の使い方まで
JavaScript Primer 迷わないための入門書
JavaScript 第7版
「ものづくり」の科学史 世界を変えた《標準革命》