ダウンロード サンプルファイル (1.1 MB)
第1回では、Rust 2024で新しく導入されたキーワードgen、プレフィクスのない#"abc"#形式の文字列など新しい構文、never型フォールバックの変更、RPITのライフタイムキャプチャ方法の改善、static mutへの参照の禁止などの構文の変更、preludeに導入されたFuture、IntoFutureトレイトと、スライス型のBoxに実装されたIntoIteratorトレイトなどの、標準ライブラリの変更を中心に紹介します。
はじめに
プログラミング言語Rustは、この2月にRust 2024エディションがリリースとなりました。Rustは、3年おきにエディションをリリースしており、エディションとしては3年ぶりのリリースとなります。Rustは常に改善とリリースを繰り返していますが、エディションのリリースはその大きな節目となります。本連載では、強化・改善された機能から注目度の高いものをピックアップし、その概要を紹介します。
| カテゴリ | 機能 | 概要 |
|---|---|---|
| 文法関連 | genキーワード | 将来のバージョンで実装が予定されているgenブロック(イテレータの生成に使う構文)の実装に向けてgenが予約語に |
| 予約された構文 | プレフィクスのない#"abc"#形式の文字列と、2個以上の#からなる##などの構文が将来のために予約構文に | |
| never型フォールバックの変更 | never型(!)を変換する際のフォールバック先をnever型とするように | |
| RPITのライフタイムキャプチャ方法の改善 | RPIT(Return Position Impl Trait)すなわち関数の戻り値の場所にあるimpl Traitのライフタイムのキャプチャ方法を改善 | |
| static mutへの参照の禁止 | static mutすなわち可変のグローバル変数への参照は既定で禁止されるように | |
| トレイトとライブラリ関連 | Future、IntoFutureがpreludeに | 非同期関数のためのFuture構造体、IntoFuture構造体はpreludeに導入されuse文なしに利用可能に |
| IntoIteratorトレイトがBox<[T]>に追加 | スライス型のBoxにおいて、IntoIteratorトレイトが実装されinto_iterメソッドが利用可能に | |
| unsafe関連 | 新たにunsafeに指定される関数 | 関数std::env::set_var、std::env::remove_var、std::os::unix::process::CommandExt::before_execにunsafeのマークが必要に |
| unsafe_op_in_unsafe_fnの警告 | unsafeな関数内においてunsafeブロックなしにunsafeな操作を行おうとすると既定で警告が発せられるように | |
| externブロックのunsafe化 | externブロックは、unsafeとしてのマークが必要に | |
| Unsafeな属性 | 属性export_name、link_section、no_mangleはunsafeとしてのマークが必要に | |
| ツール関連 | 一貫性のあるCargoテーブル名とキー名 | Cargo.tomlから名称の一貫性を持たせるためにいくつかのテーブル名とキー名が削除され、代替のテーブル名およびキー名を使うことが推奨に |
| Cargo:継承側でのdefault-featuresの拒否 | ワークグループでdefault-features = falseが指定されていない場合に継承パッケージ側でのdefault-features = falseの指定がエラーに | |
| RustFmt:最終引数としてのdelimited exprsの結合 | ※ドキュメントなし。 | |
| RustFmt:生識別子の並び替え | RustFmtが生識別子をr#が除去された状態で適切に並び替えるように | |
| マクロ関連 | マクロのフラグメント識別子の改善 | マクロのフラグメント識別子exprがconstおよび_にも適用されるように |
| マクロのフラグメント識別子がないときにエラー | マクロのパターンにおいてメタ変数があるのにフラグメント識別子がない場合コンパイルエラーに | |
| その他 | RustDoc:ドキュメンテーションテストの結合 | ドキュメンテーションテストにおいて各テスト関数が単一のバイナリにまとめられるように |
対象読者
- Rustの最新の機能を把握したい方
- 他言語の経験者で、Rustに入門したい方
- プログラミング言語の最新パラダイムに関心のある方
必要な環境
本記事のサンプルコードは、以下の環境で動作を確認しています。
-
macOS Sonoma
- Rust(1.85.0)
-
Visual Studio Code 1.97.2(rust-analyzer 0.4.2313)
[NOTE]サンプルの実行
掲載サンプルは、それぞれのパッケージのmain.rsに記述されています。動作確認は、Rust 1.85.0をインストールしたmacOS上で、拡張機能「rust-analyzer」(プレリリース版)をインストールしたVSCode(Visual Studio Code)で行っています(実行はターミナル上でビルド、実行)。
この記事は参考になりましたか?
- この記事の著者
-
WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
