仮想通貨が生まれてからしばらくたち、世界中のメディアで取り上げられてきました。”Blockchain”はその名の通り、デジタル情報を含みハッカーが情報を盗み取るのをblock(阻止)する手段という意味です。
Blockchainのテンプレートは、ビットコインのデータの完全保護を目的に設計されたが、現在ではプログラミング言語のセキュリティが発達し、世界中で最高峰のセキュリティレベルを実現する方法として選ばれています。
この記事では、ビジネス界に旋風を起こしているBlockchainテクノロジーに使用されている6つの人気プログラミング言語を説明します。
C++
C++は様々な開発者に長きに渡り使用されている定番言語です。Staticな(あらかじめ変数や関数の型を定義しておき、その型以外のデータを変数で使用できない)言語で、基本的にはマルチパラダイムプログラミング言語です。複雑さは中級レベルでしょう。
要するに、C++はさほど複雑ではなく効率的で、広く使用されているC言語です。1979年にBjarne Stroustrupが生み出しました。
現代では多くのオペレーションシステム、システムドライバー、ブラウザ、そしてゲームがC++を主要言語として使用しています。このため、C++は現在最も人気の言語の1つです。
C++はプログラミング言語Cからの派生言語ですので、CとC++はC/C++のようによく一括りにされます。
C++は従来のプログラミングから自動プログラミングまで様々な方式に対応しています。C++がプログラミング初心者が初めて使用する言語として選ばれるのは、下記の4つの理由のためです。
- Staticなコンパイラ型言語であるため
- high-level なツールとlow-levelなツールが兼ね備えられているため
- オブジェクト指向であるため
- 標準ライブラリーが使用可能であるため
C++の一番の魅力はおそらくコンパイラでしょう。C++には多数のコンソールコマンドとコンパイラがあります。プログラミングする際は、最初は通常のテキストエディターおよびコンパイラの使用が必要ですが、C++の魅力は使用すればきっと分かるでしょう。
Static言語:この種の言語は、元々の言語Cに似ており比較的分かりやすいです。
またC++は外部言語のインターフェースの造りが見えるので、計算ににおいても本領を発揮します。C言語のライブラリーは無料でC++から呼び出し可能です。条件は伴いますが、C++コードはCコードと差異はなくエクスポートできます。C++コードのおかげでユーザーはコーディング構造全体の管理ができます。またlow levelのメモリーインテラクションに対応しています。
Standard Template Library(STL)により対応する機能、コンテナ、アルゴリズムが見つかる可能性が大きく広がります。C++のSTLはプログラミング言語の中でも有数な性能で知られています。それぞれのコンテナにインテラクショングループがあります。(合計5つ)
つまり、C++はしっかりとしたblockchain基盤を造り出す上で、大変有望な言語なのです。取引回数を最適化することが主な狙いであるならば、C++が選ばれるのは当然でしょう。
C++に関しては、多数の言語で何百冊もの本が書かれてきましたので、勉強がしやすい言語です。その上、前述の通りさほど複雑ではありません。
Simplicity
Simplicityが生まれた背景
-
多数の基本コンポーネントから成るプログラミング言語は習得が難しく、ほとんどのプログラマーはその言語を部分的に習得し使用しています。
-
複雑な言語の場合1つのオペレーションの実行にも複数の方法があります。
-
オペレーターをオーバーロードするとプログラムの意味が不明瞭になってしまうことがあります。
Simplicityは、この記事で取り上げられているほとんどの言語と同じようにオブジェクト指向の言語です。C++は30年以上使用されていますが、Simplicityはまだ生まれて間もない言語です。おそらく新言語の中では一番よく知られているでしょう。Russel O’Connorにより作られ、2017年11月に発表されました。
Simplicityは、スマートコントラクトを明記する際にblockchain業界で最もよく使用されているhigh level(より広範囲に適応する)なプログラミング言語です。比較対象として、Bitcoin ScriptというBitcoin仮想通貨が使用しているスマートコントラクト言語がありますが、こちらはかなりlow levelで、使いこなすにはBitcoinを深く理解している必要があります。
Simplicityは元々既存の仮想通貨言語を改良した理想な言語として企画され、既存言語の問題点を解決し、Bitcoin UTXOモデルにおいて、blockchain上のスマートコントラクトの展望を広げる目的で考案されました。
Simplicityによりセキュリティ強化が可能になります。まず、型付けが正しくされているので安全です。Simplicityはコンビネータ理論を基に、staticな関数型プログラミング言語なのです。またSimploicityの解析性はセキュリティ効果もあります。Simplicityは最終的な計算がプログラミングされスマートコントラクトを実行する機能を確実に生み出しますが、チューリング不完全なので、このサイクル実行の無限化を防ぎ、プログラム実行をせず分析するスタティック解析が可能となります。最後に形式セマンティックスによりあらゆる入力を範疇に入れることができるので、Coqによる性質証明を確実なものにします。
Simplicityは何点かの改善をもたらしました。1点目はスクリプトの完成および強化です。
SimplicityによりMerklized Abstract Syntax Trees(MAST)を統合できるので、既存の暗号通貨言語のアップグレードが図れます。MASTというネイティブプログラミング言語として、Simplicityはtree内にプログラムを整頓し、プログラム実行に必要なパーツのみを表示します。使用しない部分は抜き出されるので、セキュリティ強化およびblockスペースの削減につながります。
Bitcoinスクリプトのlow-levelコンセプトをまとめると、Simplicityの中心機能はHaskellモジュールとして実行されます。このモジュールにより変換なしにHaskellコードのままSimplicity言語を出力し実行することができます。
Javascript
Javascript の特徴
-
コンパイラ型ではなくインタプリタ型言語です。
-
ケースセンシティブです。
-
各Statementはセミコロンで終わらせることもできます。
-
長いStatementは複数行に分けることができます。
-
文字列内以外では空白は無視されます。
2018年の調査によると、JavascriptはGitHub Software developmentとウェブサイトのホスティング目的に最も人気のある開発言語です。JavascriptおよびjQuery, React, Angular, NodeなどのJavascriptライブラリーは現代のウェブ開発で中心的な役割を果たしています。
なぜJavascriptはこんなにも人気があるのでしょうか。その大きな理由は非同期アクションをとてもうまく処理することができる点でしょう。
この機能を持つJavascriptはblockchain運用の理想的な言語です。blockchainに参加しているユーザーが増えるにつれ、何千万というユーザーが同時に取引をする可能性があります。Javascriptはblockchain内の様々なnode間のコミュニケーションをたやすく処理できます。一方で、コンピューターのパフォーマンスを最大化する上では、JavascriptはC++ほどの効果はないことを覚えておく必要があります。
暗号化はクライアントサイドで実行されるためwebサイトのサーバー上で処理されたものをユーザーに送りかえすことでローカルとサーバーの容量を消費する必要がありませので、タスクによっては瞬時に実行が可能です(webページ上でJavascriptを用いるタスクはメモリー紛失を防ぐため単純作業の場合が多いです)。
Javascriptはコンパイラも不要です。ブラウザはJavascriptをHTMLタグとして解釈してくれるので、手続き型言語としての能力をすべて兼ね備えています。つまり、ユーザーがボタンをクリックするかカーソルを物体上に置くだけで、プログラミング内容が実行されます。
Javascriptの使用によりblockchainのプログラミングが、この分野が初めての開発者にとってチャレンジしやすいものになります。
Python
Pythonの特徴
-
インタプリタ型、インテラクティブ、オブジェクト指向です。
-
300以上のライブラリがあるパワフルな言語です。
-
対応ブラウウザの多い言語です。
-
オープンソース言語ですが、著作権制限があります。
-
貴重となっている言語Cを利用するため、ポータブルです。
-
多言語の立証済みコンセプトを取り入れていおり、必要なScaffoldingが少ないので学びやすい言語です。この言語のモットーは、「シンプルなほど良い」または「驚き最小の原則」です。
Javascript同様、Pythonも学びやすく特に科学者やデータ分析家が初めてプログラミングをする際にオススメの言語です。Pythonには現在大規模なコミュニティがありSciPy, NumPy, Pandasなどのライブラリーをリリースしてきました。こういったライブラリーは数学、科学、ITにおける様々なテクノロジーの使用に向けられたものです。
Pythonは幅広いタスクに使えるhigh-levelなプログラミング言語で、30年ほど使用されてきました。今日では、webやdesktopアプリケーション、マシーンラーニング、ネットワークサーバー、blockchainを含む多岐に渡る現場に使用されています。プログラミング技術に関するコミュニティStackOverflowによれば、Pythonは最も急成長中の言語で、トラフィック予測によると2018年にはJavaの使用率を追い抜くとのことです。
実際、世界中の仕事が検索できるある求人検索エンジンによると、Pythonは最も稼げる言語ランキングの世界第3位になっています。当然Pythonを習得し使用する開発者が増えていくでしょう。
特に、Pythonは数字処理能力に優れており、大量のデータを受け入れて、クレンズし、処理し、分析し、可視化することができます。そのためPythonは金融やloTなど大量のデータを扱う業界にぴったりです。
カードサイズのマイクロ・コンピュータRasberry Piが登場したことで、Pythonの使用率は前例のない高さまで伸びています。
PythonはWebプログラミングを柔軟化するフレームワークを多く備えています。Djangoはウェブ開発用の最も有名なPythonのフレームワークです。
大規模なコーディングが必要ないので、開発プロセスはとても速く進みます。人数が少ないチームでもPythonなら効率的に作業ができます。
Pythonはどんな複雑なアプリケーションでも容易に処理能力や性能などの調整ができます。その上、Pythonはテスト環境が組み込まれており、デバッグ・タイムを設定し、作業フローを迅速化することができます。
こういった機能に加え、Pythonはblockchainの作成にもスマートコントラクトの作成にも利用できる多目的言語です。
Solidity
Solidityの強み
Solidityは貴重なプログラミング言語で、誰もがアセットなどの真価をより多く保管できる複雑なインセンティブ構造を作り出すことができます。最高のセキュリティレベルが必要な開発では、SolidityとEVMがピッタリでしょう。
Solidityの主な使用用途はEthereumベースのblockchains用のスマートコントラクトの作成です。SolidityのシンタックスはJavascriptを基本としているので言語の選択が簡単で、その上C++やPythonとコンセプトが共通しています。
強みはSimplicityの強みに類似していますが、SolidityはEtherum blockchainネットワーク専用に構築された言語です。Solidityを使用しhigh-levelコードを出力後、low-levelなマシーン言語に変換することができます。
SolidityはEtherumにてSolidityの翻訳を行うEtherum virtual machine(EVM)上での使用目的に創り出された言語で、Ethereum のデジタルレジのユーザーがスマートコントラクトを作ることができます。大抵の場合、Solidityなどのコントラクト指向のプログラミング言語は、その前身であるオブジェクト指向の言語から派生しています。C#やC++などの言語がスマート短縮の処理を行うことができるので、Solidityのような言語は必要ないという意見がありました。しかし、COP言語の使用により、スマートコントラクトを更に改良することが可能なのです。
Solidityは他のプログラミング言語のように他の言語を継承していることが強みの一つでしょう。このおかげで、継承元の言語と共通する定義により上位クラスを作成することができます。また、hierarchical imagingへの対応やオブジェクトやクラス内でのメンバ変数を使用することができます。前もって定義つけられた変数を様々な目的に使用し、目的を達成できるので、コントラクトのコーディングの読み込みが削減されます。
Solidityは実はABIを使用します。ABIは2つのバイナリープログラムやアプリケーション間のコミュニケーションを円滑化するたけのインターフェースです。blockchainアプリケーション間の情報交換において橋渡しをするバイナリーフォーマットや、データ送信に必要な機能などの要素を認識してくれます。ABIによりよりユーザーは入手したデータがシンタックスとセマンティックスの観点で正しいものかを判断することができます。この機能は、コントラクトのプログラム定義の正確性を確実にしセキュリティの円滑化を図り、セマンティックス的にも性格なプログラミングの実行をコンパイラチェックに即して行うという、大変重要なスマート短縮です。
Rholang
Rholangはスマートコントラクト用のパラレル言語です。これまでに挙げたオブジェクト指向の5言語と異なり、Rolangは関数型の言語です。
関数型プログラミングは全く別の考え方によるプログラミングです。プログラミング中に変数を使用し値を状態管理したり値を変化させたりするのではなく、プログラミングを一連の数学的機能として順番に見ていくのが関数型プログラミングです。
RholangにはSimplicty やSolidityと同じ機能も多くありますが、Rholangは特に関数を用いた環境の中で使用されます。Rholangを使用したプロジェクト関数型開発環境を好む開発者に向いていると言えます。
Rholangはプロセス指向の言語で、全ての計算がメッセージ送信により行われます。メッセージの送信はチャンネルを通して行われ、このプロセスはメッセージキューに似ていますが、キューというよりアセットのように機能します。
Rolangは、開発者がチャンネルからメッセージを解読しそれに対応することが可能ですが、受信完了後に対応することはできないため完全に非同期の言語と言えます。この記事では「名前」と「チャンネル」は同じ意味で使用されています。これは「名前」という言葉はRholangの基礎となっているrho-calculusで使用されていて、「名前」に関する情報の送受信が可能であるため、意味的にはチャンネルと類似しているからです。
リフレクションとは今ではblockchainのプログラミング言語の主要機能として広く知られており、通称は「メタプログラミング」です。リフレクションはプログラムを利用可能なデータに変換し、変換したデータを新たなプログラムへと戻す正規手法です。Java#, C#, Scalaがそういった機能を担うようになり、OCamlやHaskellもリフレクション版を開発しました。その理由は単純です。商業規模での利用では、プログラマーがプログラムを使って行うことは出力であり、リフレクション無しでは、高度な商業用プログラムを作り出すのに時間がかかりすぎるからです。
Blockchain Projectの事例
- Blockchain ARKはJavasriptで出力され、Javascript, Go, Python, C#, Typescript, Kotlin, Ruby, Swift, PHPに対応しています。コンセンサスプロトコルはDPosです。
- Blockchain ETHEREMはGo, C++, Rustで出力され、Solidityに対応しています。コンセンサスプロトコルはPoW/PoS. Ethereumです。
- Blockchain EOSはC++で出力され、WebAssembly, C, C++に対応し、コンセンサスプロトコルはDPoSです。
- Blockchain HYPERLEDGER FABRICはGo, Java, JavaScript, Pythonで出力され、Go, Java, Kotlinに対応しています。コンセンサスプロトコルはありません。
- Blockchain LISKはJavascript, Node.jsで出力されます。Javascriptに対応していて、コンセンサスプロトコルはDPoSです。
- Blockchain QTUMはC ++、Python, TypeScriptで出力されC++, Python, Rust, Go, Luaに対応しています。コンセンサスプロトコルはPoSです。
- Blockchain STRATISはC++、C#で出力され、C#に対応しています。コンセンサスプロトコルはPoSです。
まとめ
上記6つの言語について読んでみて、きっとどの言語が自分のプロジェクトにあっているか悩むことでしょう。どれを選ぶかは成果物や使用するネットワークによって決まります。また、Hyperledger Fabricに関してもぜひお読み下さい。
仮想通貨を新たに作りたいならSimplicityから始めるのが良いでしょう。Bitcoinはテストワーク付きのblockchainを基にしているので、Simplicityの使用により仮想通貨を創り出すことが可能です。もしくは、Solidity言語を使用し、すでにインストール済みのEthereum blockchainから作業を始めてもいいでしょう。
一方で、自分のblockchainの作成をしっかりと管理したいなら、C++, システム構築とカスタマイズに向いているJavascript, Rholang、Pythonのような言語が良いでしょう。