• HUNNY

【翻訳文字起こし全文】IOHK PlutusFest 2018|Marlowe - Simon Thompson インタビュー


Simon Thompsonがドメイン固有言語であるMarloweの利点について2018年にインタビューされたときに語ったものです。


以下の文章は、IOHKのYouTube動画「IOHK PlutusFest 2018|Marlowe - Simon Thompson インタビュー」(2019/1/14)を翻訳文字起こししたものです。



HUNNYプールにステーキングしましょう!


HUNNY:ff5eb7a210b3b322271da7f17753a06d107bda666f34be10017ad723

PoolToolで詳細を見る:こちら




私は数学の学位と博士号を取得しました 


そして 「自分のやっていることは楽しい」と思うようになりました 


でも それはごく一部の人たちにしか影響を与えないだろうと思いました 


その頃 コンピュータ業界では面白いことが起こっていました 


そこで私は 関数型プログラミングで何が起こっているのかを知りました 


1980年代の初めのことです 


当時英国にいたとき 関数型プログラミングが世界中で大きな話題になっていました 関数型プログラミングがエキサイティングな技術であることも理由の1つです 


また 当時は「コンピュータの速度が限界に達する」「ムーアの法則が破綻する」と考えられていましたが それも間違いでした 


そこで彼らは 並列計算をしなければならないと考えました 


そのためには汎用の言語が必要です 


それを関数的にやろうというわけです 


このようにして 多くのエキサイティングな研究が行われました 


しかし その後のプロセスはどんどん速くなっていきました 


そのため 関数型プログラミングの研究は脇に追いやられてしまったのです 


関数型プログラミングについては 大きな話題になっていましたね 


Haskellの前身であるMirandaという言語を開発したDavid Turnerと一緒にケント大学にいたのですが 彼は多くのアイデアをまとめて 遅延型 強い型付け化しました 


しかし それは独自仕様の言語でもありました 


ある意味 Haskellはその反動で 人々は研究の基盤としてもっとオープンな言語を求めていたのです 


だから私も最初の頃に参加して 入力と出力に関する研究をしました 


関数型言語が何をしているのか 人々が理解し始めた頃でした 


それ以来 さまざまな側面から研究を続けています 


ここ数年は特に 関数型言語でリファクタリングがどのように機能するかを調べています 


しかし 私がIOHKに参加したきっかけは ご存知の通り Charlesが関数型プログラミングのコミュニティの人々と話したいと思ったからです 


また 私は20数年前に建設的型理論についての本を書いていましたが これは非常に流行していました 


しかし 私が執筆した頃は 数理論理学の中でもかなり曖昧な分野に過ぎませんでした 


私が書いた本は1500部ほど売れ 当時としては悪くなかったのですが その後絶版になり 今では自由に入手できるようになりました 


それが曲を更新する方法なのです Charlesもこれを読んで ああ この人は面白い 話を聞いてみようと思ったのではないでしょうか 


それで IOHKがまだ小さな会社だった頃 私は少なくとも3年は話をしていたと思います 


それでここにたどり着いたわけです 


そしてCharlesは 「じゃあ どんなことが興味深いのだろうか?IOHKは汎用的な関数型言語に興味があるのだ」と言い 他の人々を巻き込んでいったのですね 


しかし ドメイン固有言語を書くことは 私にとって興味のあることだと思っていました 


そして それを実行してきたのです 


スクリプトもそうですが 特に金融契約を作成するための特別な目的を持った言語に注目しています 


MarloweとPlutusは補完関係にありますが それぞれ異なることをします 


Plutusは主力製品ですね 


これは ブロックチェーン上に置かれるものであり 拡張UTXOモデル上に置かれるものであり ブロックチェーン取引のための非常に無駄のない 非常に精密で明確なモデルです 


Plutusはコントラクトを書くための汎用関数型言語ですが これはプログラミング言語でもあります 


ラップトップなどで動作する一般的なプログラムを書こうと思ったら JavaやHaskellなどを学ばなければならないように コーダーでなければならないのです 


Plutusでも同じです 


Haskellや関数型プログラミングを知っていれば とても簡単なものになりますが それを扱うにはコーダーにならなければなりません 


しかし いったんコーダーになれば 指先にすべての力が備わっているので 何でもプログラミングできるようになります 


しかし 世の中には コーディングにはあまり興味がなく ただ特定の種類のものを書くことに興味があるという より大きなクラスのユーザーがいます 


そのようなカテゴリーや分野の1つに 金融契約の作成があります 


関数コミュニティではかなりの作業が行われています 


投資銀行の業界では 金融契約を記述するためにドメイン固有言語を使った関数型言語を使用しています Marloweで行ったことは これらの言語の1つをブロックチェーン上に置いたらどうなるか ということです ユーザーについて考えてみると ここには素晴らしいアナロジーがあります 


世界最大のプログラミング言語 世界最大の関数型プログラミング言語のユーザー数は Excelだと言われています 


人々はExcelを書くことができ Excelでスプレッドシートを作り 数式を書いてちょっとした計算をすることができます 


しかし 彼らは自分たちのことをコーダーとは思っておらず ただのExcelユーザーです 


私たちは Marloweのユーザーを同じように見ています 彼らは 自分が何を書きたいかを知っていて 多くの人が以前に書かれたものと似ているものを使って 小さな契約を結ぼうとするでしょう 


しかし 私たちは彼らがそれを形式化することを許可します 


そして それをブロックチェーン上で実現する 


つまり Plutusで書くような一般的なコーダーとはまったく異なる 大きなユーザー層が存在する可能性があるのです 


実際 私たちのMarloweはPlutusの上に実装されています 


つまり Plutusの上のレイヤーなのです 


つまり Marloweが他の言語とどのような関係にあるのかを説明することができます 


ブロックチェーン上にあるときの違いの1つは 契約書を書くことだと思いますが もし私がRichardと契約を作るとしたら 何かを書き留めます 


もし従わなければ どちらかがもう一方を訴えます 契約が履行されているかどうかを確認するために 法制度があります 


そして 誰かが契約のルールに従わなかった場合には 救済措置があります 


ブロックチェーンの世界では 少なくとも私たちが考えている世界では 法制度がありません 


ですから ブロックチェーンは契約を履行するものでなければなりません 


そのためには 自分で強制力を持つような契約の設計を考えなければなりません 


そのためには 契約の書き方を変えなければなりません 


例えば 私がRichardにいくらかのお金を支払うという契約の場合 私がいくらかのお金を前もって約束しなければ その契約を成立させることはできません 


前もってお金を約束しなければ 契約が正しく行われることを保証できません 


このように 私たちはコミットメントという概念を持っています 


しかし 例えば 私が「契約にお金をコミットしてください」と言ったとしても あなたは何もせず 立ち去ることができます 


もし私がすでに契約にお金をコミットしていたら 私のお金は永遠にロックされてしまいます 


なので コミットだけでなく タイムアウトも考えなければなりません 「さあ リチャードは次の10ブロック以内にこのお金をコミットしてください」と言わなければなりません 


それができなければ すべては水の泡となり 契約を撤回します 


だからこそ この緊急性についてを考えて 物事を強制的に進めていかなければならない 


それまでに何もしなければ 何らかの対策を講じるというタイムアウトを設けることで 物事を進めていくのです 


つまり タイムアウトを入れることで 物事を進める強制力をもたせたのです 


コミットメントを追加したのです 


そして この2つの要素に加えて 原油価格以外のものの価値を観察してある期間を待ったりするといった より一般的な「意志」や「物事」を契約の言葉で表現することで ユーザーに1つの選択肢か別の選択肢かを判断してもらうのです 


これらの要素を組み合わせることで 小さな言語でありながら さまざまな契約を表現することができるようになりました 


つまり この言語にはいくつかの構成要素があり それらを組み合わせることでさまざまな契約を構築することができるのです 


契約の作成を支援するために 「Meadow」というツールを用意しました 


ブロックチェーン上で実行することなく 実際のお金を投入することなく 契約を段階的に実行して 各ブロックで何が起こるかを確認することができます 


そして ユーザーの入力や観測値をシミュレートしたりして コントラクトがどのように展開するかを確認することができます 


このように 実際に稼働させることなく コントラクトを試したり さまざまな選択肢を試したりすることができるので コントラクトがどのように振る舞うのかという感覚を得ることができます 


また 比較的制約の多い言語なので Plutusのような汎用性の高い言語ではありませんが いくつかの悪い点はデフォルトで除外されています