読者です 読者をやめる 読者になる 読者になる

未来の大統一言語を妄想する

未来では全てのプログラミング言語が1つになる? : ギズモード・ジャパン

これ読んでwyvern調べてみたけどJVM言語ですごいがっかりした。wyvernlang/wyvern

そういえば昨日LLDiverっていう軽量言語のイベントに出て喋ったりしてたんだけど、大統一言語ってどうよ?って話があって、まあ現時点じゃよくわかんないよねって感じだった。

「俺が考えた最強の言語」

以下、自分の理想です。現実は甘くないのはわかってる。妄想なのでマジレスは控えるように。

  • 内部表現はLispのS式で、文法拡張マクロを持つ
  • 意味的論型システムと、機械的なバッファサイズとしての型システムは分離
    • 定理証明とか型理論とかは隔離しないと永遠に(議論もコンパイル時間も)終わらない気がする
    • 推論器とかどうするんだって気はするが…
    • ATS言語とかそうなんだっけ?
  • 最適化レベル/ランタイム方式/意味論的型システム/文法マクロによってサブセット言語が定義される
  • 一番甘いオプションでは型アノテーションが省略可能(OptionalTyping)でJITで動的型付き言語として走るが、AOTするには型推論含めすべて型が決定される必要がある
  • 言語内軽量スレッドはたぶんある

オブジェクト指向とか関数志向とかインターフェース志向とかは、単に箱(コンテキスト)の話なのでまあなんか勝手にやってくれって感じはある。

達成されてほしいもの

  • 動的型言語のノリでプロトタイプを書いたのを、徐々に型付けして高速に動作するようにする
  • 自分より厳密なオプションでビルドされたものは読み込める

現時点でこれに近いのはLLVMベースで内部表現がS式のSwiftか(-dump-astでコンパイルすればわかる)、xランタイムが型システムと切り離されたOptionalTypingを持つDart

自分がTypedCoffeeScriptを作ってた理由はスーパーセット/サブセット関係で、最適化されないにしても型システムを切り替えられるようにしたかったというのがある。無限に時間があればLLVM baseのランタイム作りたいですね(最近更新してないのはモチベーションが他にあるので察してください)

結局多様性を否定することは出来ないので、サブセット言語同士の親子関係でエコシステムが構築できるってのが自分の理想です。