テストステ論

高テス協会会長がテストステロンに関する情報をお届けします。

LinuxコミュニティはRustを受け入れた

私が最近注目しているプログラミング言語がある. Rustだ. Rustとは, 錆のことである. 何が錆なものか. JJだ.

RustはMozillaが開発しているプログラミング言語である. 恥ずかしいことに私はRustの存在をつい最近まで知らなかった. 私がRustの存在を知ったのはkernelvmでのことである. 発表をustで聴いたあと自分で調べるとなるほどこれは私の望んでいた言語だと思った. そしてそれは, Linuxコミュニティが望んでいた言語でもあったのだ.

昨今, Go言語なるものが流行っている. 猫も杓子もDockerの実装言語として採用されているためだ. しかし, Goは私のテイストに合わない. プログラミング言語というのは, 異性のようなもので, 一目見ただけで良いとか悪いとか感じるものである. これがまさにテイストということであり, 言語にこだわりがないなんて人は, 「誰でも良い」と言ってるようなものである. 性の乱れだ.

私はRustのコードを見た瞬間に恋をした. あらゆる点とまで調べたわけではないが,

  • Haskellのテイストを取り込んでいる: パターンマッチ, 型クラスとか
  • Rubyのテイストも取り込んでいる: クロージャとか
  • メモリ安全について集中している: 所有権とオブジェクトの寿命を言語レベルで徹底している
  • Cの構造体との親和性を重視している: メモリ配置とか
  • 静的言語である. 型推論もある
  • Servoというソフトウェアの実装言語としてドッグフーディングしている

ぱっと見素晴らしい言語だと思った. Linuxコミュニティが好む理由も分かる.

昨今, 他のあらゆる分野の例外ではなく, Linuxコミュニティにおいても優れたプログラマは関数型を好む. 事実, 私が尊敬するJoeはHaskellプログラマである. 彼らは普段Cによって抑圧されているが, 本心は関数型言語を書きたい.

また, OSSコミュニティの「他人がパッチを送ってくる」という特性上, きちんとした静的チェックが行われることは, 一人で開発している時より重要度が増す. 言うまでもなく, コンパイルした時点でバグがないことが分かるならばそれは何よりも優れた特性だが, 現実的にはそんなことはファンタジーだ. 現実的には, コンパイル出来ることが正しさの有力な保証となるのであれば素晴らしいくらいのものであるが, OSSコミュニティはその保証すらなしに危険な橋を渡り続けているのが現状である.

パッチを投げられたことがある人間として, 私がパッチを取り込む/取り込まないの感覚は,

  1. 既存の挙動を壊さないのであればまぁいい. コードにバグはつきものであるが, あとで発覚して直せるのであれば, 別に取り込んでもいい.
  2. どうやってテストするのか分からないものは嫌だ.

仮に, そのパッチがコンパイル出来ており, それによって余計なランタイムエラーを引き起こさないことがまぁまぁ保証出来るのであれば, そして今後もコンパイルすることが一定のテストになるのであれば, 取り込む上で大きな確証になる. 現実のソフトウェアは, 純粋なアルゴリズムのように入力と出力が定義されていてシンプルなテストが書けるものばかりではないが, 小さな変更がすべてを壊すこともあるので, 静的チェックによってくだらないエラーを可能性から取り除けることはとても良い特性だ.

また, コードを読む観点からも優れている. コードを読む時, Rubyのようなスクリプト言語だと, くだらないエラーが入り込んでいないかのチェックを脳内でやり続ける必要がある. Rubyはコードがシンプルだが, 結局このようなくだらないことのせいで, 本当に正しいかどうかを吟味するのは思っているほど楽ではない. テストは常にあるものではないし, あったとしても信用出来るかどうかはソフトウェアによる. なんとなくこんな感じかと思ってカジュアルに読むのと, 本当に正しいことを確信出来るレベルで読むのとは大きな差がある.

Rustはこういった事情から, Linuxコミュニティに受け入れ始められた. 私は, 将来的に, Linuxに関するツールのすべてはRustで書かれるものと確信した. PerlPythonも, 駆逐される. LVMもRustでrewriteされるに違いない.

DMメンテナのMikeがGithub上でフォークしているカーネルツリーはdpcという人のものであるが, なんとこの人は生粋Rustプログラマである. ポーランド出身で今はサンノゼに住んでいると書いてある. シリコンバレーにはRustの仕事がある. https://github.com/dpc このdpcが関わっているプロジェクトの一つが, coreutilsである. https://github.com/uutils/coreutils このプロジェクトの目的は, GNU coreutilsをrewriteすることであると書いてある. 素晴らしい. LinuxカーネルのメンテナがフォークしたLinuxツリーを持っているシリコンバレーの人間がRustをやっているのだから, これはもう, LinuxコミュニティはRustを受け入れたと言っても過言ではない. だから私は言い切っている.

私は今後, このcoreutilsに関われるように努力しようと思う. Rustを始めるには良いスタートだと思う. 基本的なコードが書けるようになったら, どの一つかを開発すると手を挙げて, あとは没頭するつもりだ. まともに書けるようになり, 仕事でも使っていきたいと思っている.

Rust Languageに興味のある人は, まずチュートリアルを読もう. http://doc.rust-lang.org/tutorial.html