Rustコトハジメ

プログラミング言語Rustと競プロに関する情報をお届けします。

このブログの目的

ようこそ「Rustコトハジメ.com」へ。

このページでは、私がこのブログを作る目的について説明します。

Rustはめちゃくちゃ難しい

私がRustに出会ったのは、2014年頃で、その頃は本もなく、書きかけのページが残っているドキュメントを読んでなんとなく書くしかないという状況でした。私は新しい言語があれば少し書いてみたいと思うタイプなので、Rustでcoreutilsを再実装するという比較的簡単そうなプロジェクトをみつけて、見よう見まねでコードをさくっと書いて貢献をしました。そのプロジェクトは今や★が4500近い有名プロジェクトになっているので、その中に自分のコードを早い段階で入れられたこと自体は、良い経験になったと思います。

f:id:akiradeveloper529:20181222145856p:plain

https://github.com/uutils/coreutils

ただ、当時はほとんどRustを理解していなかったと思います。理解していなくても、他のプログラムを見て、どういう形で書けばいいのかと見よう見まねで書くだけで、この程度は書けてしまうものです。

私は仕事や趣味で、ストレージソフトウェアやOSを書いてきた経験もありましたし、Rustはシステムプログラミングの次世代を担う言語だという確信がありましたが、仕事ではScalaを書いていましたし、以降しばらくRustには触れることはなく数年が経ちました。

それから、O'ReillyからProgramming Rustが発行されるというので、アーリーアクセス版を購入して、まだ書いてない章がある段階でしたが読みました。初期のバージョンはいくつかの図が手書きだったと記憶しています。それで、今まで分かってなかったことに対して「あーそういうことだったのか」と理解が深まったこともありましたが、やはり「これを今すぐ仕事で使う自信があるのか」と言われると、微妙でした。プロジェクトが一旦走り出してしまえば、その過程で理解が深まっていくかなというくらいの手応えはありましたが、実際には、このようなコンセプト自体が従来の言語とは根本から違うものに対して、それでゴーサインを出せる企業というのはなかなかないでしょう。それは、実装段階での失敗の可能性や、保守できるのかという問題もあるからです。

Rust in TiKV | PingCAP

I have been using many programming languages, like C++, Go, python, lua, etc. and Rust is the hardest language for me to master. In PingCAP, we will let the new colleague spend at least one month to learn Rust, to struggle with the compiling errors, and then to rise above it. This would never happen for Go.

Rustを採用した一例として、PingCAPという、Raftベースの分散KVストアを作っているスタートアップ企業があります。上の記事では、彼らがRustを採用した理由、そして苦労したことを話しています。システムプログラミングというGCによる停止の許されない領域で、広く使われているC++に甘んじずRustを採用することは間違いなく価値がありますが、賭けのようなものだったのだと想像します。

結局、印刷本も買って擦り切れるまで読まなければならないという結論に至り、和訳されたプログラミングRustも購入しました。気になったところを何度も辞書的に調べていくに連れて、自分なりに理解は深まっていったとは思いますが、理解していないことも多いです。それは多くが、Rustでもっとも難しいとされる所有権・参照・可変性など本質的な部分です。

目的1: Rustを学習するモチベーションにしたい

目的の1つは、自分自身がRustを学んでいくモチベーションにしたいということです。

学習したことを記事にしていく

自分自身で調べたことをまとめると、理解が深まるものですし、時には自分が言ってることがおかしいことに気づくこともあります。ライブラリやツールの調査なども行っていこうと思います。

競技プログラミングをRustでやる

Rustを使った競技プログラミングもしていきます。競技プログラミングは自分にとって足りないものだと感じているため、それをRustでやるということは一石二鳥と考えています。いや、私のRustでの競技プログラミング挑戦をみて、自分もRustでやってみようと思う人が増えれば、もう1つの目的であるRustを広めることにもつながるので、一石三鳥といえます。

目的2: Rustを広めたい

もう1つの目的ですが、私は世の中にRustのプロジェクトがもっと増えるべきだと考えているため、Rustを広めたいです。

Rustを広めるに当たっては2つのことが有効だと考えています。

入門の手助けをする

上で話したように、Rustは学習が非常に難しい言語です。PingCAPの例でも、相当に経験のあるソフトウェア開発者が"hardest language for me to master"と言ってるくらいですから、難しいと感じるのは私だけではないはずです。実際にグーグルで検索してみると、Rust特有の概念で躓いてる人が見られます。

私よりRustへの理解が深くて、文章も書ける人はいます。ただ、そういう人は頭が良すぎるとか、もともとC++に習熟していてRustへの乗り換えはそう難しくないといった理由でそもそもほとんど躓いてないのです。記事を書いていてもすごく難しい内容で、入門者にとって必要なものではありません。一方で私は、Rustの学習で躓いていますし、今も理解していないことがあります。自分が今現在わからないこと、過去にわからなかったが今はわかっていることはおそらく他の入門者にとってもわからなくなることであって、記事を書くことで入門の手助けになる可能性が高いのではないかと思います。

Twitterやメールで「なぜこのコードのコンパイルが通らないのかわからない」「このライブラリのことが知りたい」など言っていただければ、それについても記事にしていこうと思います。

Rustを使ってる企業やエンジニアを紹介する

これは企画としてやれたらいいなと思っているだけですが、Rustを使っている企業やエンジニアにインタビューをして、どういう部分にRustを使っているのか、なぜRustを使おうと思ったのか、Rustを使ってどうだったかなどを聞いて、記事にしていけたらと思っています。