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

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

冗長性の無いプログラミング言語を作ろう(3)「コーディング法の必要性について(?)」

 今年後半は司エンジンを使ってゲームを一個作る予定で、次のuniq言語の記事はかなり先になりそうです。今回はメモも兼ねて、そもそもなんで冗長性の無い言語が必要なのかという話。

コーディング法(仮称)

 第1回でも書きましたが、土屋はプログラマは国家認定制度を導入し、原発や銀行、病院など、国民の生命や財産に直結しうる環境で運用されるシステムを開発するプログラマは、免許なしには関われないようにすべきだと考えています。将来的にはAIの開発もこれに含まれるようになるでしょう。

 ここでいう試験というのは現在の情報処理技術者試験などと比較して遥かに厳しい物です。前提として、建築基準法のように、コーディングの記述方式に法的な束縛が設定されている必要があります。ひとまずこれを「コーディング法」と呼びましょう。国家試験では、このコーディング法に従ってコードが書けるかを判定します。

 コーディング法に則ったコードを書いている限りは、運用上の最低限の安定性が法律によって保証されます。もし、コードが原因で何らかの障害が起き、損害が発生したとしても、エンジニアや開発会社は賠償を免責されます(というか、その程度の保証もないのに瑕疵担保責任が課されるとか無茶じゃね?>民法改正(http://www.techvan.co.jp/media/quality/civil-code))。

 かくして、コーディング法の制定と、国家認定プログラマ制度によって、システム開発の安定性が飛躍的に向上する未来が約束されるのです。

コーディング法(仮称)が作れない理由。

 「約束されるのです。」←嘘です。そんな未来は来ません。なんでかと言いますと、現状では「コーディング法」を規定できないからです。

 プログラミング言語やコーディングスタイル規約を指定することは出来るかもしれません。使用するライブラリやテスト内容を義務づけることも出来るでしょう。けれど、それだけでは「高品質なコード」を保証するにはまったく足りません。この程度であれば、情報処理技術者試験でカバーできるでしょう。つまり、現状と変わりません。

 もっと厳密かつ客観的、あるいは定量的に、コードの品質を計測する必要があり、その為にはその計測が可能なプログラミング言語が必要です。というわけで、「こういう仕様の言語であればその計測が可能ではないか?」という思考実験がuniq言語なのです。

コーディングロジック規約(過去の挫折)

 元々土屋は上記のような事をやりたいと考えていて、しかし、プログラミング言語を一から作るのではなく「コードの書き方を厳密にルール化できれば良いのではないか」と考えていました。土屋はこれをコーディングスタイル規約よりずっとロジックよりという意味で「コーディングロジック規約」と呼んでいます。

 これ、割と頑張って作っていたのですが、例えば以下のような2行のコードがあったとして「どちらを先に書くか」を規定することができず、なかなか上手く行きませんでした。

a = b
c = d

 更に考えていくうちに、1行の式ですら、厳密に記述方法を規定するのは困難であることがわかり、自分の中の経験則以上の物にはなりませんでした。

a = b + c //←"a = c + b"とどっちにすべき?

uniq言語

 こういう経緯を踏まえ、つい最近コメントの付け方についての議論を複数のエンジニアさんと話していて、「メソッドを、「式メソッド」と「制御メソッド」の二つに、論理的に分割すれば、この問題を解決できるのではないか」と考えました。式メソッドの中では交換法則が成り立つ物については順番を問わないと規定します(これによって上記の2つの課題は解消される)。uniq言語ではこの発想を起点にどこまで「コードの安全性を定量的に評価可能なプログラミング言語」を設計できるか試してみるつもりです。

 実際ホントに可能なのかはわかりませんし(恐らく無理でしょう)、uniq言語が実用化される可能性は低いでしょう(というかされません)。コーディング法が制定されることは(少なくとも今後10年くらいは)ないでしょう。けれど、エンジニアは思考停止したら負けだというのが、土屋の信条です。