土屋つかさの技術ブログは今か無しか

土屋つかさが主にプログラミングについて語るブログです。

冗長性の無いプログラミング言語を作ろう(1)

 土屋はプログラミング言語の設計と実装が趣味です(この2年間くらい、本業以外で飽きもせずやっているのがこれだけだから趣味なんだと思う)。これまで作っていた司エンジン( http://d.hatena.ne.jp/t_tutiya/20170212/1486903365 )が、実用性はともかく(!)、そろそろ言語仕様レベルでは完成に近づいてきたので、そろそろ次の言語の設計を始めます。

冗長性の無いプログラミング言語を作りたい

 定期的に書いていますが、土屋は「一意なルールでバグのないコード書き、それによって生産を向上させたい」のです。この一意なルールというのは一般的なコーディングルール的な物ではなく「ある要求仕様をコーディングする際に、そのアルゴリズムが一意に定まる」くらいの物です。

 土屋は、現在のプログラミン言語は冗長性が高すぎて、そのためにレビュー効率が落ち、バグの発生を助長していると考えています。これも定期的に書いてますが、本来プログラマは医者や弁護士と並んで国家試験が必要な職業で、原発/病院/銀行など、生命に関わるシステムの開発は、国家認定プログラマ以外は関われないようにすべきです。

 しかし、現行のプログラミング言語は冗長性が高すぎるため、ある仕様を記述するのにいくらでも書きようがあるため、優れた(≒バグが実用レベルで少ない)コードの書き手を機械的に評価する方法がないので、実用的な国家認定試験は成立しないでしょう。

 そこで今回は、冗長性をできるだけ抑え、その上で生産性の向上が狙えるプログラミン言語を考えてみます。

トランスパイラのビルド&スクラップ

 司エンジンはRubyの内部DSLとして実装しました。今回はC#のトランスパイラとして新言語を設計&実装します(言語を作りたいのであって、コンパイラを作りたいわけではないので)。なので基本的にはC#の言語仕様を拡張する形になります。

 司エンジンは「仮説として言語仕様設計する」→「設計に基づいて実装」→「サンプルコードを書いてみる」→「仮説が不成立であれば作り直し」というサイクルを繰り返しました。今回もこれを踏襲します。ただし、司エンジンでは完成形がある程度見えていのたで実装が割と早かったのですが、今回はまだ仕様自体がぼんやりしているので、暫くは設計が続く予定です。

 途中で諦めるかもしれませんが、アイデアレベルでブログに記事を書いていくので、どうぞよろしく。