Rust 2021 EditionがRust 1.56.0と合わせて、予定通り10月21日にリリースされた。最新バージョンにはディスジョイント・キャプチャ(disjoint capture)のサポート、マクロ規則のor
パターンなどが含まれている。
InfoQでは5月の最初の発表時にも、Rust 2021 Editionについて報告した経緯がある。その時には、後方互換性を維持しながら改善を可能にするメカニズムメカニズムとして、同言語の進化におけるエディションの重要性について論じた。
2021 Editionの新機能の中で特に注目されるのは、クロージャのディスジョイント・キャプチャ、マクロ規則としてのor
パターンの導入の2つである。
ディスジョイント・キャプチャはクロージャ内の値ないし参照に対して、より精細なキャプチャを可能にする。例えば、クロージャが構造体のひとつのフィールドのみを使用している場合、Rust 2021では構造体全体ではなく、従来はできなかった、そのフィールドのみのキャプチャが可能になっている。
//-- this is now allowed, whereas previously you had to capture
//-- the field separately using let y = &a.y
let c = || print!("{}", aStruct.y);
マクロ使用時、'|
'演算子を使ってor
パターンを記述することが可能になった。これまでのバージョンではSome(1)|Some(2)
という表記を使用する必要のあったものが、Some(1|2)
と記述できるようになる。これは、マクロで使用されている"$_:pat
"指定子が、これまでは"|
"にはマッチしなかったものが、マッチするようになったことによる。
2021 Editionで大きく変わったRust構文のもうひとつは、配列の反復処理に使用可能なinto_iter
に関するものだ。array.into_iter()
は、これまでは参照で配列要素を走査するものだったが、値によって走査するようになった。array.into_iter()
という構文は、以前のバージョンでは、後方互換性を確保するために(&array).into_iter()
と解釈されている。
SentryのエンジニアリングディレクタであるArmin Ronacher氏に、Rustの現在の状況について聞く機会があった。
InfoQ: あなたは少なくとも2015年から、Rustの開発に携わっていますが、現在の仕事とRustに関する経験を手短に説明して頂けますか?
Armin Ronacher: Rustを最初に知ったのは2012年、1.0リリースの数年前でした。言語のコンセプトにとても興味を持ちましたし、ロードマップやコミュニティ、背景にある思想にも感銘を受けました。Sentryで働き始めてからは、適当な場所を探して少しずつRustを導入するようにしてきました。それが今では、Senttyの中核的な言語になっています。
**InfoQ: あなたは人気の高いPythonのFlaskフレームワークの作者として有名ですが、同一人物の名前があがる対象として、RustとPythonという組み合わせは非常にまれだと思います。このような二刀流をどうやって実現したのですか?
Ronacher: 私自身は、今日のPythonとRustはとても緊密な関係にあると思っています。Pythonの開発者は長い間、CやC++、Cythonなどでエクステンションを書いてきました。彼らの中の一部がRustに興味を持つようになったのです。PyO3でも分かるように、PRustは、ythonのエクステンションモジュールをライブラリとして書く上で、非常に優れた言語です。Rustコミュニティとのやりとりも、初期のPythonのような強い感情を与えてくれました。
**InfoQ: Rust 2021 Editionが開発者に提供する機能の中から、最も魅力的なものを3つ選ぶとすれば何ですか?
Ronacher: 2021 Editionには大きな進化ははありません。これは極めて意図的なものです。コードをより現代的なものにして、後方互換性を損なう可能性のある問題をクリーンアップすることが、このエディションの目的なのです。その例のひとつが配列のイテレータです。以前は後方互換性のある方法では不可能だったものです。新機能の大部分は、古いエディションのコンパイラを使っている場合でも利用できます。その意味では、大きな変化はないと思います。その一方で、2021 Editionには、将来的な機能を見込んだ多くのものを用意しています。特に私が期待しているのは、フォーマット文字列が実装されることです。
InfoQ: Rustの現在と将来についてお聞きします。この言語は現在、どのような位置にあると思いますか?
Ronacher: Rustはすでに多くの分野、特にパフォーマンスを必要とする分野では、確固たる地位を築いているのですが、Webサービスではそれほどではありません。サービスに最適な言語になるには、Rustにはまだ不足している機能がたくさんあります(コンパイル時間の遅さ、比較的貧弱なHTTPエコシステム、改善の余地の残る非同期IO処理)。一方で、これらの分野でも着実な開発が行われていますから、これらの面でRustが大きく改善されるのは時間の問題でしょう。Rustの魅力は、未熟な環境でもコンスタントに取り上げられながら、比較的多くのユーザによって成熟を重ねていると思われる部分です。このような状況を、モバイルデバイスやIoTデバイス、セットトップボックス、WASM、コンピュータゲーム、サーバレスなどで見てきました。これほど幅広い環境を取り入れている言語は、C++以外にはほとんどありません。
Rust 2021 Editionはここで紹介した以外にも多くの機能が含まれている。詳細は公式発表を確認して頂きたい。