Skip to content

Instantly share code, notes, and snippets.

@mizunashi-mana
Last active March 16, 2018 02:10
Show Gist options
  • Select an option

  • Save mizunashi-mana/3073431b88f8ca749821139b86caa23d to your computer and use it in GitHub Desktop.

Select an option

Save mizunashi-mana/3073431b88f8ca749821139b86caa23d to your computer and use it in GitHub Desktop.
APIが壊れないプログラミング言語

APIが壊れないプログラミング言語

目的

以下を満たすプログラミング言語を目指す.

  • APIのバージョンをコントロールできる.
  • APIの変更を検査し,変更が破壊的であるかを保証できる.
  • 静的型システムを持ち,コンパイラによってネイティブコードを吐ける.
  • モジュールシステムを持ち,別のモジュールに依存するモジュールは,過去にコンパイルが通ったものは,依存するモジュールにどのような更新があってもコンパイルに通る.

アイデア

  • プログラムは,モジュールの集合

    モジュールはコミットの列で,コミットは以下の組.

    • プレーンテキストの差分
    • 破壊的/非破壊的

    意味論上,モジュールはシグネチャを持つ.

  • 破壊的/非破壊的

    破壊的: シグネチャの更新が部分的でないもの[Clojure Spec-ulation]

    • 既存のAPIの型変更
    • 既存のAPIの削除

課題

    1. プログラムをプレーンテキストだけで管理できるか?

    現状のA. プレーンテキストだけでは管理せず,バージョン管理システムの存在を仮定

    プレーンテキストだけで管理する場合:

    • 過去のバージョンのプログラムを,構文上どのように表すか?
    • 意味論上は,単にモジュールにIDをふって扱えばいい

既存研究

参考文献

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment