Tambourine作業メモ

主にスキル習得のためにやった作業のメモ。他人には基本的に無用のものです。

Rustではもうtryしなくていいらしい

ニセtailコマンドを作ってみたところ、るいも師匠から「try!は?演算子に置き換わったらしい」と教えてもらった。

https://blog.rust-lang.org/2016/11/10/Rust-1.13.html

Seasoned Rustaceans may recognize that this is the same as the try! macro that’s been available since Rust 1.0. And indeed, they are the same.

Seasonedって言い方するんですね。英語難しい。Google翻訳にぶっこんだ。

熟した錆びた人は、これがRust 1.0以来利用可能だったtryマクロと同じであることを認識するかもしれません。 そして確かに、彼らは同じです。

「熟した錆びた人」ワロタ。

私の知っている範囲でも、Swiftの?や、C#の??、Rubyの&.など、演算子で(つまりコア言語機能で)似たような機能の対応をしている言語もいろいろ出てきている中、「マクロ実装だったけど良い機能であることは広く認められたし、コア言語機能に取り込んでもいいんじゃないのー」っということなのではないかと理解した。ユーザーとしても、できるだけマクロじゃない方が嬉しい。try!の戻り値って何?というところで引っかかったことでもあるし(まあ、メソッドではそれがうまく表現できないからマクロなんだけども)。

マクロ話を続けてしまうと、マクロがあることは知っていたが、私はいきなりHello, Worldするところでprintln!を使うので、「この!はなんじゃい」と面食らうことになった。まあ、「おまじないです」でスタートして、後でなぜこれがマクロでなければならないかがわかるんだけども、C言語を囓っていれば「可変長引数を扱うC言語のprintf()は、可変長引数を許さないRustでは素直に実装できないので、黒魔術でカバー」と聞けば、わかったとは言えないまでもまあそんなものかなと思えるので、いきなり説明してもいいんじゃないかと思う。

というわけで、C言語を知っているとRustの学習のうちのいくらかは「あー、あれね」と思えるので楽である。低水準言語なので仕方が無いんだけども、ファイルディスクリプタやポインタ、スタックについて「知っているよね?」という前提でRustのドキュメントも書かれている。というか、そういうものを意識しなくていい世界に生きているのであればRustなんて使う必要はなくて、もっと高水準な言語はいくらでもあるわけで、Rustを使いたい以上知ってるだろうという前提は正しい。

C言語なー。私がコンピューターに接し始めた20数年前は、アプリケーション開発にまともに使える言語はC言語しかなくて、低水準のことをまったく意識しなくてもいいようなものまでC言語で書かれていた。Cがアプリ開発の最前線から後退する兆しが見えたのはLinuxOSSが当たり前になり、サーバサイドJavaが生まれ、LAMPなんて言葉が出てきてからである。

しかし、その時代からも15年以上が経ち、この10年ぐらいの間にシステム開発の現場に出てきた若手にとってC言語はおそらくほとんど縁のない言語だろうと思う。そういう人がRustを学んだとき、「んぉー、わからんわー」といいながらK&Rを読んでいた20年前の私のように、ついには習得するのだろうか。ちなみに断っておくけど、私もC言語が扱っているものの構造や概念をちゃんと理解した自信はあるんだけども、Cの開発経験はまったくないし、ちゃんとバグのないプログラムが書けるかというと甚だ自信はない。Cの仕様には罠がありすぎで、そういうものが全部頭に入っているかといえば全部どころか全然入ってないから。

しかし、思い返せば私も、UNIXシステムコールや8086などについて、実際に触らないまでも本は読んだり、話は聞いたりした。そこから巡り巡ってC言語が何を扱っているのか「まあ、わかった」と思えているわけで、Rustから低水準プログラムを勉強しはじめた人も結局はCの本は読むことになるのかもしれないなと思ったり。まあ、つまるところ、RustはC++とはまったく違う方向性での"better C"であり、「そうそう、これこれ。こういうのが欲しかったんだよ」というCプログラマは大勢いるだろう。というか、Rustが嬉しいのは「良くも悪くもCがCであるから」で、C言語を知らないと(そして痛い目にあっていないと)ありがたみがよくわからないんじゃないかな。Qiitaなどに上がってるSwiftのOptionalの解説記事に「なるほど、使い方はよくわかりました。で、Optionalって何が嬉しいんですか?」というコメントが複数ついてるのもむべなるかなである。

と、ポエムなら表のブログに書けばよいのだった。このぐらいにしておく。