Mozillaプロジェクトによって創設され、現在は独立した非営利団体であるRust Foundationの支援を受けて開発されているプログラミング言語Rust 1.94がリリースされました。この言語はメモリ安全性を重視し、タスク実行の高度な並列性を実現するためのツールを提供します。ガベージコレクタとランタイムは使用しません(ランタイムは標準ライブラリの基本的な初期化とメンテナンスのみに縮小されます)。
Rustのメモリ管理手法は、ポインタ操作におけるエラーを排除し、解放後のメモリへのアクセス、ヌルポインタの逆参照、バッファオーバーランなど、低レベルのメモリ管理に起因する問題から保護するように設計されています。このプロジェクトでは、ライブラリの配布、ビルドの円滑化、依存関係の管理を目的としたCargoパッケージマネージャーを開発しています。crates.ioリポジトリは、ライブラリのホスティングのために維持されています。
Rustでは、参照チェック、オブジェクトの所有権の追跡、オブジェクトの有効期間(スコープ)の追跡、コード実行中のメモリアクセスの正確性の評価を通じて、コンパイル時にメモリの安全性が提供されます。 Rust は整数オーバーフローに対する保護も提供し、使用前に変数値の初期化を必須にし、標準ライブラリでエラーをより適切に処理し、デフォルトで不変参照と変数の概念を適用し、論理エラーを最小限に抑えるための強力な静的型付けを提供します。
主な革新:
- スライス型に array_windows メソッドが追加されました。このメソッドは、固定サイズのウィンドウ内のスライスを走査するための反復子を作成し、一度に 1 つの要素を進めます。以前の windows メソッドとは異なり、array_windows は定数のウィンドウ サイズで動作し、反復処理ごとに未定義サイズのスライス (&[T]) ではなく、固定サイズの配列 (&[T; N]) への参照を返します。配列のサイズはコンパイラによって事前にわかっているため、反復処理の各段階で境界チェックを回避することでパフォーマンスを向上させることができます。let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]);アサート!(iter.next().is_none());
- Cargo パッケージ マネージャーの構成ファイル (.cargo/config.toml) は、他のファイルの内容をその場で挿入できる "include" ディレクティブを実装しています。include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
- TOML 1.1マークアップ言語の新バージョンが、マニフェストファイルと設定ファイルに追加されました。この新バージョンでは、複数行の埋め込みテーブル、16進バイト表現を挿入するためのエスケープシーケンス「\xHH」、および「\u001B」を表すエスケープシーケンス「\e」のサポートが追加されました。また、最後の要素の末尾にカンマを付けたり、時刻値の秒数を省略したりする機能も追加されました。serde = { version = "1.0", features = ["derive"] } は、serde = { version = "1.0", features = ["derive"], } に置き換えることができます。
- API の新しい部分は、安定化された特性のメソッドと実装を含め、安定化のカテゴリに移動されました。
- <[T]>::array_windows
- <[T]>::要素オフセット
- LazyCell::get
- レイジーセル::get_mut
- レイジーセル::force_mut
- レイジーロック::get
- レイジーロック::get_mut
- レイジーロック::force_mut
- TryFromの実装使用のため
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- x86 avx512fp16 命令の組み込み関数
- AArch64 NEON fp16命令の組み込み関数
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- 「const」記号は関数で使用されます。
- f32::mul_add
- f64::mul_add
- riscv64im-unknown-none-elf プラットフォームはサポート レベル 3 に移動されました。サポート レベル 3 には基本サポートが含まれますが、自動テスト、公式ビルド リリース、ビルド検証は含まれません。
さらに、最近発表された Rust 関連のプロジェクトやイベントについても紹介したいと思います。
- RustコンパイラにSony PlayStation 1プラットフォームのサポートを実装し、FreeBSDをApple Siliconチップ搭載コンピュータに移植したAyrton Muñoz氏は、FreeBSD向けにRustでカーネルコンポーネントとデバイスドライバを記述する機能を実装しました。FreeBSDカーネルでRustコードの使用を可能にするKPI(カーネルプログラミングインタフェース)バインディングのセットがテスト用に提供されています。また、virtioサウンドドライバ(virtio_snd)、M2 MacBookキーボード用のDockChannel HIDドライバ、そしてApple Siliconチップ搭載Macコンピュータサブシステム用の低レベルドライバも提供されており、これらはすべてこれらのバインディングを使用して作成されています。
Rustバインディングの作業は2024年後半から継続されています。現在、バインディングはC言語のKPIの一部しか実装しておらず、不安定とされていますが、今後はC言語の同様のインターフェースと同等の安定性を実現する予定です。例として提案されているvirtio_sndドライバは、QEMUでの音楽再生に適しています。2026年までにRustバインディングは十分に安定し、興味のある開発者がコード作成に使用できるようになると予想されています。
- NetBSD 開発者の Benny Siegert 氏は、Rust サポートが NetBSD カーネルに含まれない理由として、次のように説明しています。NetBSD は Rust が利用できないアーキテクチャーをサポートしている。pkgsrc で既存の Rust ツールチェーンを保守するのは大変な作業であり、少数の開発者によってのみサポートされている。Rust のカーネル サポートには、Rust コンパイラーをベース システムに含める必要がある。NetBSD で Rust をブートストラップするにはレガシー バイナリ パッケージを使用するが、これはソースとして配布される自己完結型ディストリビューションでは受け入れられない。Rust のリリース サイクルは、レガシー ブランチの NetBSD の開発およびサポート サイクルと互換性がない (たとえば、2020 年にリリースされた NetBSD 9 は引き続きサポートされますが、これには 6 年前の Rust コンパイラーの出荷とサポートが必要になります)。
- Опубликован выпуск встраиваемой в приложения СУБД Turso 0.5, написанной на языке Rust и совместимой с SQLite на уровне диалекта SQL, формата файлов БД и C API. Из расширенных возможностей отмечается механизм CDC (Change data capture) для отслеживания изменения БД в реальном времени, использование io_uring для асинхронного ввода/вывода в Linux, поддержка векторного поиска, наличие выражения ALTER для изменения схемы БД, возможность шифрования данных в БД, режим инкрементальных вычислений, конструкция «BEGIN CONCURRENT».
- GPU 側のプログラムで Rust 標準ライブラリを使用できるようにするプロジェクト。
- Emuko — эмулятор RISC-V, написанный на Rust, способный загружать Linux, поддерживающий JIT-компиляцию, способный сохранять и восстанавливать снапшоты состояния.
- RustConn (flatpak) は、SSH、RDP、VNC、SPICE、Telnet、Serial、Kubernetes、Zero Trust、SFTP をサポートする、他のホストへの外部ネットワーク接続を管理するためのグラフィカルインターフェースです。コードは RUST で記述されており、GTK4 と Wayland を使用しています。
- zlib-rs 0.6プロジェクトの新しいブランチがリリースされました。これは、zlib C APIと完全に互換性があり、zlibの透過的な代替として適した最初の安定版です。このプロジェクトは、zlibデータ圧縮ライブラリの安全な代替手段の開発を目指しています。開発は、zlibの高性能版を開発するzlib-ngプロジェクトを参考に進められています。
- VCADプロジェクトは、Rustで記述され、MCPプロトコルを使用してAIエージェントと統合されたパラメトリックCADシステムの開発です。3Dモデリング、シミュレーション、2Dスケッチ、コンポーネントアセンブリ、STEPインポート、STL/GLB/STEP/DXFエクスポートをサポートしています。
- Mistral Voxtral Mini 4BのリアルタイムAIモデルとBurn機械学習フレームワークを活用した、Rustで記述された音声認識システムが公開されました。このプロジェクトは、ライブストリーミングの文字起こしのためのオンザフライ音声認識に焦点を当てています。
- c2rust 0.22ツールキットがリリースされました。これは、Cコード(C99)を元のCコードに構造的に類似した、安全でないRust表現に変換するために設計されています。このツールキットは、慣用的なRustへの段階的な移行と、安全でないブロックの削除に使用できます。
出所: オープンネット.ru
