科学と工学

関数型の罪

より偏見を伴った話題に話を移しますと, ツール, ソフトウェア開発に使用される言語と方法論は、客観的実在というよりも宗教的な摂理による成果物です。ソースコードは散文のようなものです。誰もが何が良いのかということに対して意見を持っています。時には伝える内容よりも、その伝達方法の方が重要である場合もあります。

我々は、他人には間違っていると受け取られかねないものを選ばなければなりません。しかし、我々の選択の背景には、その判断を正当化するための基盤があります。

カルダノを実行しているプロトコルは、純粋関数型言語であるHaskellで実装されています。ユーザーインターフェイスは、ElectronのフォークであるDaedalusによってカプセル化されています。我々はできるだけWebアーキテクチャモデルを採用し、データベースでKey-Valueパラダイムを取り上げるためにRocksDBを使用しました。

コンポーネントレベルから見れば、この抽象化はメンテナンスがはるかに容易になり、より優れた技術が苦もなく導入され、また我々の技術スタックがGithubとFacebookの開発成果に部分的に結びついていることを意味します。

WebGUIを使用することで、Reactを活用し、フロントエンドの機能を何十万人ものJavaScript開発者が理解できるツールを使用して開発することができます。Webアーキテクチャを使用するということは、コンポーネントをサービスとして扱うことができ、セキュリティモデルが分かりやすくなることを意味します。

プロトコル開発のためにHaskellを採用することは、最も困難な選択でした。関数型言語の世界でも、選択肢は豊富にあります。より柔軟で不純な言語として、Clojure、Scala、F#のようなものがあります。これらの言語は、Javaと.NETエコシステムの膨大なライブラリの恩恵を受けるとともに、機能プログラミングの最良の側面を確保しています。

Agda)やIdrisのような学問指向の言語は、正確性に関して強力な検証を可能にする技術と密接に関連しています。しかし、彼らには手ごろなライブラリや、卓越した開発経験がありません。

カルダノでは、OcamlとHaskellどちらかを選ぶことにしました。Ocamlは、素晴らしいコミュニティ、優れたツール、十分な開発経験、そしてCoqによる正式な検証に関する素晴らしい資産を持つ言語です23。では我々はなぜ Haskell を選んだのでしょうか。


脚注

23: この点に加えて、IOHKは実際にはOcamlでQeditasと呼ばれるプロジェクトを変名Bill Whiteから継承し、実装しています