以下を満たすプログラミング言語を目指す.
- APIのバージョンをコントロールできる.
- APIの変更を検査し,変更が破壊的であるかを保証できる.
- 静的型システムを持ち,コンパイラによってネイティブコードを吐ける.
- モジュールシステムを持ち,別のモジュールに依存するモジュールは,過去にコンパイルが通ったものは,依存するモジュールにどのような更新があってもコンパイルに通る.
プログラムは,モジュールの集合
モジュールはコミットの列で,コミットは以下の組.
- プレーンテキストの差分
- 破壊的/非破壊的
意味論上,モジュールはシグネチャを持つ.
破壊的/非破壊的
破壊的: シグネチャの更新が部分的でないもの[Clojure Spec-ulation]
- 既存のAPIの型変更
- 既存のAPIの削除
- プログラムをプレーンテキストだけで管理できるか?
現状のA. プレーンテキストだけでは管理せず,バージョン管理システムの存在を仮定
プレーンテキストだけで管理する場合:
- 過去のバージョンのプログラムを,構文上どのように表すか?
- 意味論上は,単にモジュールにIDをふって扱えばいい
- [Clojure Spec-ulation]: Clojure Language Update 2017#後方互換性について, https://qiita.com/athos/items/e01f08e3698bac02da07#%E5%BE%8C%E6%96%B9%E4%BA%92%E6%8F%9B%E6%80%A7%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6