Rust初心者がブロックチェーンとの親和性について考えてみた

Rust初心者がブロックチェーンとの親和性について考えてみた

どうもなまはげです。

最近Rustというプログラミング言語の勉強をぼちぼち始めていて、まだ20~30時間も触れていないピヨピヨですが、ちょっとこれまでの所の感想やブロックチェーンとの親和性を考えて見たいと思います。

Rustとはなんぞや

Rustのなんか成り立ちとかその辺はWikiさんにお任せするとしてどんな言語なのかお話しします。

なんかC++っぽい感じだそうです。(EOSコントラクト以外でC++マトモに書いたことがない)

システム開発にも利用可能な実行速度と何よりC++などよりもずっと安全な挙動をコンパイラが保証してくれるというのが強みだそうです。(まだ初心者なのでわかりきっていない)

この”安全な挙動を保証してくれる”というのがキモになります。

メリット

まず、変なメモリ管理をしていたらコンパイラが怒ってくれるので楽です。僕はC++一瞬で挫折したクチなのですが、ポインタという概念がわからず、というかメモリ解放とかいちいち気を配るのができなくて、結局諦めたのですが、Rustはその辺はあんまり気を配らなくて大丈夫です。というのも「所有権」というシステムがあり、メモリ内にある変数をあれこれできるのはその所有権を持っているやつ一人だけ!みたいなルールがあることで、メモリの確保とか解放はその所有権に気を配っていれば解決できちゃいます。所有権の方が追っていくのは簡単でわかりやすいので楽です。ぬるぽはしたがって(unsafeでない限り)存在しません。

また、変数がデフォルトでイミュータブル(Constって書くアレ)なので自分で変更する可能性のある変数とそうではない変数を意識しながらかけるのは安全でいいなと思います。

未定義動作が発生しないこともいい点としてよく挙げられています。未定義動作というのはきちんと関数が定義されてなくて、挙動がマシンに一任されている、何をやってもいいよ、という動作です。いうまでもなく危険な動作ですがよくやりがちです。これをコンパイラで検出して弾いてくれます。

なのでこれまでコンパイラを通っていたコードが通らなくなることがよくあります。

デメリット

先ほど所有権システムはいいぞ、と言いましたがやっぱり慣れないです。ポインタと違って理解がわかりやすくて助かりますが、独特な制度で慣れは必要だと思います。

いちいちStructとかにトレイトを実装するのがめんどくさい。トレイトを実装することでRustはStructなど各変数に関数を持たせることが可能なのですが、なんか慣れないとめんどくさいです。これは本当にもうめんどくさいという愚痴以外の何者でもないのですが。めんどくさいです。

未定義動作など安全でない動作を許さないので、初めて自分でコードを書いた時、100行のコード書くのに2時間か借りました。いかに自分が普段適当なものを書いているのか、ということですね。それにしても厳しすぎやありませんか?

エラー文がわかりづらいです。よく、「StackOverflow(プログラミング相談サイト)で一位の人気言語!」という宣伝がされますが、そりゃあそうですよ。だって意味わかんないんだもん。エラー文。言ってることと実際の間違いが違う(例えば ; 忘れの時、;忘れではなく違うことをエラーで言ってくる)ことや、エラーの量が多すぎてどこから手をつけていいかわかんないとか、何を怒られているのかエラー文からは判然としない、などなんかもうよくわかんないです。

ブロックチェーンとの相性

結構いいのでは?と思います。

特に変数の所有権という概念によってメモリの安全性が保証されていたり、未定義動作がコンパイラに弾かれる仕組みになっているのはブロックチェーンととても相性がいいです。というのもブロックチェーンは動作を起こすマシンがノードにより異なるので一律ではありません。また、ブロックチェーンはこれまでのソフトウェアと違いなかなかコードをアップデートすることができません。そのため、リリース前にコードの不安点は潰しておかなければなりません。特に仮想通貨など資産を取り扱うので曖昧な動作はハッキングの対象となります。

このように「コードの不安な点は先にコンパイラで潰す」という考え方はブロックチェーンと相性がいいです。実際、現在はC++でのシステム・コントラクト開発が主流であるEOSも徐々にRustのライブラリやコントラクトが増え、主流がそちらに移っている感じがします。というかすでにEOSの公式のライブラリ(クレートと呼ぶ)が存在しています。EOSはC++で定義されるABIの脆弱性などによるハッキングが非常に多く、上記の問題を一番実感しているチェーンです。

また、最近ではシークレットコントラクトを実装するEnigmaというEthereumベースのプロジェクトがシークレットコントラクト用言語にRustを用いており、現在シークレットコントラクトの例を見ることができます。

 

このようにRustの活用そのものはブロックチェーンの業界内で広がっていくと思われます。

ということで今んところは勉強してても損はないと思うよ!だけど時間かかるよ!

という記事でした。