Rust (プログラミング言語)
![]() Rustのロゴ | |
パラダイム |
システムプログラミング、関数型プログラミング、並行計算、ジェネリックプログラミング、命令型プログラミング、オブジェクト指向プログラミング ![]() |
---|---|
登場時期 | 2010年7月7日 |
設計者 |
グレイドン・ホアレ ![]() |
開発者 |
Mozilla、グレイドン・ホアレ、Rust Foundation ![]() |
最新リリース | 1.79.0 / 2024年6月13日[1] |
型付け | 静的型付け、強い型付け、型推論、構造化データ |
主な処理系 | rustc |
影響を受けた言語 |
Alef、C++、C Sharp、Cyclone、Erlang、Haskell、Limbo、Newsqueak、OCaml、Ruby、Scheme、Standard ML、Swift ![]() |
ライセンス |
Apache-2.0、MIT License ![]() |
ウェブサイト | |
拡張子 |
rs ![]() |
開発体制
設計と特徴
パラダイム
基礎文法
{ ... }
、if
, else
, while
などの制御フローキーワードを持つ。
全てのC言語やC++のキーワードが実装されているわけではなく、一方で幾つかのRustの制御命令︵パターンマッチのためのmatch
︶はそれらの言語を習得したプログラマにとっては馴染みが少ないものも存在する。Rustの命令文は、表面的なC言語やC++との文法の類似性にもかかわらず、意味論的にはML系言語の命令式に近く、関数本体のほぼ全ての部分は制御フロー演算子でさえ﹁文︵statement︶﹂ではなく﹁式︵expression︶﹂である[28]。例えば普通のif
式もC言語で言う所の条件演算子であり、if
式の結果として返り値を返す。
ブロックコード内の命令文のセパレータにはセミコロン︵;
︶を用いるが、C言語のそれと異なりRustのセミコロンは直前の命令文がブロックコードで括られる式の途中式であることを宣言するためのものである。セミコロンを末尾に置かない命令文はブロックコードの最終的な評価式として扱われ、その式の結果がブロックコードの外へ戻り値として返される[29]。これは関数定義であれば、結果を返す箇所にはセミコロンをつけない。結果が不要ならばセミコロンによって明示的に捨てるのである。そして結果を返さないならば、それは文と呼ばれる。
Hello World
「Hello, world!」を標準出力に出力するHello worldプログラム。
fn main() {
println!("Hello, world!");
}
階乗
階乗を求めるプログラム。if
式の結果として1
もしくはn * fac_recursive(n-1)
を返し、関数の結果としてif
式の結果を返す。
fn fac_recursive(n: u32) -> u32 {
if n <= 1 {
1
} else {
n * fac_recursive(n-1)
}
}
変数
let
キーワードで定義され、不変︵イミュータブル︶である[30]。変数への再代入はコンパイルエラーとなる[31]。
可変変数を扱いたい場合、変数宣言時にmut
キーワードを利用して可変であることを明示しなければならない[32]。この機能は例えば巨大構造体のコピーを避けながら一部を変更するために有効活用できる。
またRustはシャドーイング︵同名変数の複数回定義︶に対応している[33]。シャドーイングにより一時的な変数の変更や変数型の変更が可能になる[34]。
変数とは別にconst
キーワードで定義される定数を持つ。定数は常に等しい値を持つ︵mut
やシャドーイングに対応していない︶。
型とポリモーフィズム
この言語の型システムではHaskell言語に倣い「型クラス」を用いることができる。これはアドホックな多相性を容易にするものであり、可変型宣言により実現されるものである。高カインド多相性[35]など、Haskell言語にある他の特徴はサポートされていない。
型システム
型推論
variable = val
ue
︶、変数の型を値の型に基づき型推論する。変数の宣言には必ずしも型を決定するための初期値を必要としない。変数の宣言時に初期値が与えられた場合は﹁変数の型﹂は﹁初期値の型﹂であると型推論がなされるが、初期値が与えられなかった場合は以降のブロックコード中のその変数へ値が初めて代入された時に﹁左辺の変数の型﹂は﹁右辺の代入する値の型﹂であると型推論がなされる。変数への代入が型不一致により失敗した場合にはコンパイル時にエラーを検出する[37]。
ポリモーフィズムの実現
リソース管理
所有権
unique_ptr
の振る舞いに似ている。
参照
&e
xpr
︵英: borrow expression︶という[45]。型・演算子は以下である。
参照型(英: reference type)[46] | 借用演算子(英: borrow operator)[47] |
---|---|
共有参照型 &T (英: shared reference type)[48]
|
共有借用演算子 & (英: shared borrow operator)[49]
|
可変参照型 &mut T (英: mutable reference type)[50]
|
可変借用演算子 &mut (英: mutable borrow operator)[51]
|
&
を用いた式 &expr
の評価により型 &
T
の値が得られる。&mut
でも同様である。
共有参照型は参照先の読み取りのみが可能で書き換えができないが、値が不変であるため同じ値を指す複数の共有参照が生成できる[52]。参照はCopy
トレイトによりムーブでなくコピーで渡される[53]。可変参照型は両方が可能であるが、値が可変であるため同じ値を指す他の参照が生成できない[54]。ゆえに参照は Copy
トレイトを持たずコピーでなくムーブで渡される[55]。
ボローチェッカー
特異なリソース型
Box
やVec
などの特定の型のみで限定的に利用されている。
コンパイル時に型のサイズが決定できない可変長配列を表すような型はヒープメモリを利用するBox
型を使用してリソースを管理する。Bo
x
リソース自体はスタックメモリで管理されるが、Box
リソースが所有権を持つ実体のリソースはヒープメモリで管理される。標準のヒープメモリ確保にはシステムアロケータを利用するが[56]、対象プラットフォームやビルド時の指定により他のメモリ確保APIを利用することもある。ヒープメモリはスタックメモリに比べて速度性能が落ちるため、必要時にのみ限定的に利用されている。
境界チェック
Rustは実行時に境界チェックをおこなう。これによりバッファオーバーランをはじめとしたメモリアクセスに対する安全性を得ている。この機能はゼロコスト抽象化でなく実行時の命令であるため、安全性と引き換えにいくらかの性能オーバーヘッドが発生している。他のシステムプログラミング言語として代表的なC言語やC++は境界チェックを強制しないため、Rustの特徴の1つとなっている。
ライフタイム
'lifetime
の形式で記述する。ライフタイムを参照型に付加する場合は&
の直後、それ以外の型に対してはジェネリック型として付加する。この他、別のジェネリック型に対してライフタイムを付加することもできる。特に、あるライフタイムに対して別のライフタイムを境界条件として与え、どちらか片方がもう片方よりも長く生存することを要求することができる。[58]
ボローチェッカーはライフタイムを持つ変数に対し、その変数が指す参照先やリソースの生存期間がライフタイムにより要求される生存期間を満たしているかどうかをチェックする。チェックに失敗した場合はコンパイルエラーとする。注意すべき点として、ライフタイムを与えることにより参照先やリソースの生存期間を延長することはできない。それらの生存期間はあくまでそれらを定義および使用するスコープによって決まるため、ライフタイムのチェックでエラーが出た場合は参照先の生存期間を修正する必要がある。
関数やメソッドの定義にあっては、付加すべきライフタイムに、ある特定のパターンが存在することが知られている。そのようなパターンの通りにライフタイムを指定したい場合は、ライフタイムの手動付加を省略し、コンパイラにライフタイムを自動付加させることができる。この機能はライフタイムエリゾン︵英: lifetime elision︶[59]と呼ばれる。ライフタイムエリゾンのパターン以外のライフタイムが必要な場合はライフタイムエリゾンは使用できず、ライフタイムを明示的に付加しなければならない。
関数の型を定義する際、その引数や返値が参照を含む場合はしばしばライフタイムが必要となるが、そのライフタイムが指し示す生存期間が関数の型だけでは決められず、その型に含まれる関数やクロージャを実際に定義しないと生存期間も決まらないことがある。このような場合、関数の型にて用いるライフタイムを、関数型としては任意の生存期間を持って構わないと定めることができる。そのようなライフタイムは高階トレイト境界︵英: higher-rank trait bound、HRTB︶[60]として定義する。HRTBを用いて定義した関数型は単一の型ではなく、ライフタイムが取り得る限りの場合の数だけある型の集まりとなり、理論上﹁関数の集まり﹂になることに由来している。
移動
Box<T>
型︵T
は型、以下同様︶のようなスマートポインタ、およびVec<T>
型のように可変長データを指すポインタの場合、ポインタが指しているデータは通常は移動しないが、ポインタそのものは移動する。すなわち、ポインタの値を受け渡しする挙動となる。
変数の移動を防止したい場合は、一般にはPin<P>
型︵P
はトレイトPointer<T>
を持つ型、典型的にはスマートポインタ︶を使用する。この型はBox<T>
型や&mut T
型の取得を禁止しており、これによりPin<P>
型が指すデータの移動を防ぐ。なお、Pi
n<P>
型からPin<&mut T>
型を得ることは可能で、これを用いてデータの移動を防ぎつつ変更することは可能である。また、Pi
n<P>
型そのものを値受け渡しなどにより移動することもできる。
Rustにて変数の移動を防ぐ必要がある状況としては、主に以下がある。
- 構造体型にて、自身ないしはそのフィールドへのポインタを持つ。[62]
- 変数のアドレスをRustの外のライブラリなどへ渡す。
ライブラリ
rlib
︶で出力することも可能である。
コアライブラリ
標準ライブラリ
外部ライブラリ
開発ツール
Rustの開発ツールは独立したソフトウェアとして提供されているが、Rustの公式なインストール方法に従えば、以下のツール一式が手に入る。
rustc
Cargo
最新版 |
1.62.0 / 2022年6月8日[75] |
---|---|
リポジトリ |
github |
プログラミング 言語 | Rust |
種別 | ビルドツール、パッケージ管理システム |
公式サイト |
doc |
rustup
開発元 | Rust Project Developers |
---|---|
初版 | 2016年4月15日 |
最新版 |
1.24.3 / 2021年5月31日 |
リポジトリ | https://github.com/rust-lang/rustup/ |
プログラミング 言語 | Rust |
対応OS | Windows, Linux, macOS |
公式サイト | https://www.rustup.rs |
rustupはツールチェーンの管理ソフトウェアである。ツールチェーンのダウンロードとインストール、ソフトウェアバージョンの管理、コンパイルターゲットの切り替えの機能を提供する[79][80]。
機能
歴史
Rust 1.13版以前はシェルスクリプトで実装されたrustup.sh
が公開されていた[81]。これと並行してRust言語で実装された同等機能を提供するrustup.rs
の開発が進められており、Rust 1.14版でrustup.sh
は非推奨となり[82]、Rust 1.14版以降はrustup.rs
が公式リリースとして提供されている[83][84]。
評価
歴史
誕生
0.x版
check
文を使用してプログラム文の前後での型決定をモデル化した。C言語やC++コードでのアサーションの場合と同様に、プログラム実行中ではなくコンパイル時に型不一致を検出する。型状態の概念はRust特有のものではなく、NILで採用されていたものである[103]。実際にはほとんど使用されていなかったため型状態は削除されたが、ブランディングパターンで同じ機能を実現できる[104]。
オブジェクト指向のシステムは、0.2版から0.4版にかけて大きく変わっていった。0.2版で初めてクラス︵class︶が導入され、0.3版でインターフェース︵interface︶を通したデストラクタとポリモーフィズムが追加され、0.4版で継承を提供する手段としてトレイト︵trait︶が追加された。インターフェースはトレイトに一部の機能が統合されて、異なる不要な機能として削除された。クラスもまた削除され、構造体とトレイトを使用したミックスインに置き換えられた。
コアのメモリモデルは、0.9版から0.11版の間、2つのビルトインのポインタ型︵ヒープメモリ型~
とガベージコレクション型@
︶を機能を単純化するために用意していた。それらは、標準ライブラリのBo
x
型とGc
型で置き換えられ、Gc
型は最終的には削除された[105]。
2014年1月、Dr. Dobb's Journalの編集長アンドリュー・ビンストックはD言語やGo言語、Nim言語と同様にC++の競争相手になる機会を得たとコメントした。ビンストックによると、Rustは非常にエレガントな言語として広く見られているが、バージョン間で繰り返し大きく変更されたため普及が遅れているという[106]。
1.x版
2018年版
cargo fix
でトランスコンパイルできる[114]。
2021年版
Rustで実装されたソフトウェア
学習用参考図書など
英語の読める読者ならば、rustup doc コマンドを用いる事で以下の文献をオフラインで閲覧可能。また、日本の有志によってRust By Exampleなどが翻訳されており︵ただし部分訳︶、公式サイトなどを参照されたい。 ●The Rust Programming Language ●Rust By Example ●Rustlings ●The Standard Library ●The Edition Guide ●The Rustc Book ●The Cargo Book ●The Rustdoc Book ●Extended Error Listing ●The Reference ●The Rustonomicon ●The Unstable Book ●The
rustc
Contribution Guide
●The Embedded Rust Book
出典
mut
in front of the variable name." The Rust Programming Language
(33)^ "you can declare a new variable with the same name as a previous variable, and the new variable shadows the previous variable." The Rust Programming Language
(34)^ "By using let, we can perform a few transformations on a value but have the variable be immutable after those transformations have been completed. ... The other difference between mut and shadowing is that because we’re effectively creating a new variable when we use the let keyword again, we can change the type of the value but reuse the same name." The Rust Programming Language
(35)^ 英: higher-kinded polymorphism
(36)^
“Type coercions”. The Rust Reference. 2024年3月27日閲覧。
(37)^ Walton, Patrick (2010年10月1日). “Rust Features I: Type Inference”. 2011年1月21日閲覧。
(38)^ 英: monomorphization
(39)^ Aaron Turon (2015年5月11日). “Abstraction without overhead: traits in Rust - The Rust Programming Language Blog”. 2018年2月4日閲覧。
(40)^ ab"A reference represents a borrow of some owned value." Primitive Type reference. The Rust Standard Library. 2022-12-24閲覧.
(41)^ "A reference ... to access the data stored at that address; that data is owned by some other variable." References and Borrowing. The Rust Programming Language. 2022-12-24閲覧.
(42)^ "A reference cannot outlive its referent" References. The Rustonomicon. 2022-12-24閲覧.
(43)^ "A lifetime is said to “outlive” another one if its representative scope is as long or longer than the other." Primitive Type reference. The Rust Standard Library. 2022-12-24閲覧.
(44)^ "The issue ... we have to return the String
to the calling function so we can still use ... . Instead, we can provide a reference" References and Borrowing. The Rust Programming Language. 2022-12-24閲覧.
(45)^ "Syntax BorrowExpression" Operator expressions. The Rust Reference. 2022-12-24閲覧.
(46)^ "Primitive Type reference ... References, &T
and &mut T
." Primitive Type reference. The Rust Standard Library. 2022-12-24閲覧.
(47)^ "Borrow operators" Operator expressions. The Rust Reference. 2022-12-24閲覧.
(48)^ "shared reference type is written &type
" Pointer types. The Rust Reference. 2022-12-24閲覧.
(49)^ "The &
(shared borrow) ... operators" Operator expressions. The Rust Reference. 2022-12-24閲覧.
(50)^ "A mutable reference type is written &mut type
" Pointer types. The Rust Reference. 2022-12-24閲覧.
(51)^ "&mut
(mutable borrow) operators" Operator expressions. The Rust Reference. 2022-12-24閲覧.
(52)^ "When a shared reference to a value is created, it prevents direct mutation of the value." Pointer types. The Rust Reference. 2022-12-24閲覧.
(53)^ "The following traits are implemented for all &T
, regardless of the type of its referent: C
opy
" Primitive Type reference. The Rust Standard Library. 2022-12-24閲覧.
(54)^ "if you have a mutable reference to a value, you can have no other references to that value." References and Borrowing. The Rust Programming Language. 2022-12-24閲覧.
(55)^ "&mut T
references get all of the above except Copy
and Clon
e
(to prevent creating multiple simultaneous mutable borrows)" Primitive Type reference. The Rust Standard Library. 2022-12-24閲覧.
(56)^ “jemalloc is removed by default”. 2020年6月12日閲覧。
(57)^
“Validating References with Lifetimes”. The Rust Programming Language. 2024年1月2日閲覧。
(58)^
“Trait and lifetime bounds”. The Rust Reference. 2024年1月2日閲覧。
(59)^
“Trait and lifetime bounds”. The Rust Reference. 2024年1月2日閲覧。
(60)^
“Higher-Rank Trait Bounds (HRTBs)”. The Rustonomicon. 2024年1月2日閲覧。
(61)^
“Module std::pin”. The Rust Standard Library. 2024年1月2日閲覧。 “By default, all types in Rust are movable. Rust allows passing all types by-value, ...”
(62)^
“Module std::pin, Example: self-referential struct”. The Rust Standard Library. 2024年1月2日閲覧。
(63)^ Rust Team. “Working with an unpublished minor version”. 2018年1月28日閲覧。
(64)^ Rust project developers. “core- Rust”. 2018年1月28日閲覧。
(65)^ Rust project developers. “std- Rust”. 2018年1月28日閲覧。
(66)^ Brian Anderson (2017年5月5日). “The Rust Libz Blitz - The Rust Programming Language Blog”. 2018年2月4日閲覧。
(67)^ The Rust Project Developers. “rand - Cargo: packages for Rust”. 2018年1月28日閲覧。
(68)^ The Rust Project Developers. “regex - Cargo: packages for Rust”. 2018年1月28日閲覧。
(69)^ Kang Seonghoon. “chrono - Cargo: packages for Rust”. 2018年1月28日閲覧。
(70)^ The Rust Project Developers. “libc - Cargo: packages for Rust”. 2018年1月28日閲覧。
(71)^ The Rust Project Developers. “log - Cargo: packages for Rust”. 2018年1月28日閲覧。
(72)^ Blandy, Jim (2017). Programming Rust. O'Reilly Media, Inc. p. 285. ISBN 1491927283
(73)^ Brian Anderson (2016年5月13日). “Taking Rust everywhere with rustup”. 2018年1月28日閲覧。
(74)^ “Rust Platform Support · The Rust Programming Language”. 2018年2月4日閲覧。
(75)^ “Releases · rust-lang/cargo · GitHub”. 2022年7月10日閲覧。
(76)^ Yehuda Katz (2016年5月5日). “Cargo: predictable dependency management - The Rust Programming Language Blog”. 2018年2月4日閲覧。
(77)^ Alex Crichton (2014年11月20日). “Cargo: Rust's community crate host”. 2018年1月28日閲覧。
(78)^ livioribeiro (2015年10月15日). “Cargo-readme: generate README.md from doc comments”. 2018年1月28日閲覧。
(79)^ “RustUp aka How to install rust the convenient way” (2016年6月2日). 2018年2月4日閲覧。
(80)^ Brian Anderson (2016年5月13日). “Taking Rust everywhere with rustup - The Rust Programming Language Blog”. 2018年2月4日閲覧。
(81)^ vanjacosic (2016年9月27日). “rust/getting-started.md at 1.13.0 · rust-lang/rust”. 2018年2月4日閲覧。
(82)^ “rust-lang-deprecated/rustup.sh: The rustup.sh script for installing Rust from release channels”. 2018年1月28日閲覧。
(83)^ vanjacosic (2016年12月17日). “rust/getting-started.md at 1.14.0 · rust-lang/rust”. 2018年2月4日閲覧。
(84)^ “rust-lang-nursery/rustup.rs: The Rust toolchain installer”. 2018年1月28日閲覧。
(85)^ Klabnik, Steve (2014年10月24日). “Interview with Steve Klabnik: How Rust Compares to Other Languages and More”. codementor. 2018年2月4日閲覧。 “Rust has a significant lack of resources because it’s so new, and so it’s much harder as a first language.”
(86)^ “book/references-and-borrowing.md at master · rust-lang/book” (2017年5月10日). 2018年2月4日閲覧。 “Many new users to Rust experience something we like to call ‘fighting with the borrow checker’”
(87)^ Ivan Sagalaev (2016年11月2日). “Why Rust's ownership/borrowing is hard”. 2018年2月4日閲覧。
(88)^ Aaron Turon. “Rust should have a lower learning curve”. 2018年1月28日閲覧。
(89)^ “Miscellany: C++ design goals in the context of Rust”. 2018年1月28日閲覧。
(90)^ “Frequently Asked Questions · The Rust Programming Language - How fast is Rust?”. 2018年1月28日閲覧。
(91)^ “Web Framework Benchmarks - Round 15 2018-02-14”. Framework Benchmarks Google Group. 2018年3月4日閲覧。
(92)^ “Web Framework Benchmarks - Round 15 2018-02-14”. Framework Benchmarks Google Group. 2018年3月4日閲覧。
(93)^ 英: Graydon Hoare
(94)^ “Project FAQ” (2010年9月14日). 2012年1月11日閲覧。
(95)^ “Future Tense” (2011年4月29日). 2012年2月6日閲覧。 “At Mozilla Summit 2010, we launched Rust, a new programming language motivated by safety and concurrency for parallel hardware, the “manycore” future which is upon us.”
(96)^ rustlangの2017年3月12日のツイート、2018年2月4日閲覧。
(97)^ abHoare, Graydon (2010年10月2日). “Rust Progress”. 2013年10月22日時点のオリジナルよりアーカイブ。2010年10月30日閲覧。 “the second version of the compiler, written in Rust and compiled with the bootstrap compiler”
(98)^ Hoare, Graydon (2011年4月20日). “rust-dev] stage1/rustc builds”. 2011年4月20日閲覧。 “After that last change fixing the logging scope context bug, looks like stage1/rustc builds. Just shy of midnight :)”
(99)^ Chris Double (2011年3月31日). “A Quick Look at the Rust Programming Language”. 2018年2月4日閲覧。 “The rustc compiler lives in stage0/rustc. The output of this compiler is LLVM bytecode which must then be compiled using LLVM tools.”
(100)^ catamorphism (2012年1月20日). “Mozilla and the Rust community release Rust 0.1 (a strongly-typed systems programming language with a focus on memory safety and concurrency)”. 2012年2月6日閲覧。
(101)^ Jelliffe, Rick (2010年11月8日). “Vale Java? Scala Vala palava”. 2012年3月29日閲覧。 “… It is just plain ignorant to say that non-English programmers always write with ASCII. (Just as it would be ignorant to say that they never do.) It is that kind of rather blithe dismissal that foreign cultures and languages need to be supported that creates extra unnecessary barriers. That argument ran out of legs in the early 1990s: all platforms have well -established Unicode libraries with serviceable properties for this…”
(102)^ “Commit dabccadd3202513ab0bcb424e2c62c90ab23062d” (2011年2月26日). 2012年1月11日閲覧。
(103)^ Strom, Robert E.; Yemini, Shaula (1986). Typestate: A Programming Language Concept for Enhancing Software Reliability. IEEE Transactions on Software Engineering. ISSN 0098-5589 2010年11月14日閲覧。.
(104)^ Walton, Patrick (2012年12月26日). “Typestate Is Dead, Long Live Typestate!”. Pcwalton.github.com. 2018年9月5日閲覧。
(105)^ Walton, Patrick (2013年1月2日). “Removing Garbage Collection From the Rust Language”. Pcwalton.github.com. 2018年9月5日閲覧。
(106)^ Andrew Binstock. “The Rise And Fall of Languages in 2013”. 2018年9月5日閲覧。
(107)^ The Rust Core Team (2015年5月15日). “Announcing Rust 1.0 - The Rust Programming Language Blog”. 2018年2月4日閲覧。
(108)^ Alex Crichton (2014年10月27日). “rfcs/0507-release-channels.md at master · rust-lang/rfcs”. 2018年2月4日閲覧。
(109)^ Aaron Turon (2014年10月30日). “Stability as a Deliverable - The Rust Programming Language Blog”. 2018年2月4日閲覧。
(110)^ “Scheduling the Trains”. 2017年1月1日閲覧。
(111)^ “Firefox リリースノート Firefox 48.0”. Mozilla Foundation (2016年8月2日). 2016年8月3日閲覧。
(112)^ “Firefox に組み込まれた Rust”. Mozilla Foundation (2016年8月2日). 2016年8月3日閲覧。
(113)^ “Rust meets Fedora”. fedoramagazine.org (2016年9月21日). 2016年10月6日閲覧。
(114)^ ab“Announcing Rust 1.31 and Rust 2018”. 2018年12月17日閲覧。
(115)^ “The Plan for the Rust 2021 Edition | Rust Blog” (英語). blog.rust-lang.org. 2021年9月19日閲覧。
(116)^ Dave Herman. “Shipping Rust in Firefox”. 2018年1月28日閲覧。
(117)^ Serdar Yegulalp. “Mozilla's Rust-based Servo browser engine inches forward”. 2018年1月28日閲覧。
(118)^ David Bryant. “A Quantum Leap for the Web”. 2018年1月28日閲覧。
(119)^ Salim Alam. “Habitat at RustConf”. 2018年1月28日閲覧。
(120)^ Salim Alam. “The Epic Story of Dropbox's Exodus From the Amazon Cloud Empire”. 2018年1月28日閲覧。
(121)^ Serdar Yegulalp. “The Epic Story of Dropbox's Exodus From the Amazon Cloud Empire”. 2018年1月28日閲覧。
(122)^ Steve Klabnik. “intermezzOS: a little OS”. 2018年1月28日閲覧。
(123)^ “Red Hat deprecates BTRFS, is Stratis the new ZFS-like hope?”. Marksei, Weekly sysadmin pills. 2018年1月28日閲覧。
(124)^ “Building a Container Runtime in Rust”. (2017年6月29日) 2017年7月8日閲覧. "Why Rust? (…) Rust sits at a perfect intersection of [C and Go]: it has memory safety and higher-level primitives, but doesn't sacrifice low level control over threading and therefore can handle namespaces properly."
(125)^ “グーグル、Rust採用で﹁Android﹂のメモリーに関わる脆弱性が激減”. ZDNet Japan. 2022年12月6日閲覧。
(126)^ “﹁Linux﹂、バージョン6.1でRustを導入へ--トーバルズ氏が明言”. ZDNET. 2022年10月18日閲覧。
(127)^ “グーグル、Rustで書かれたセキュアなOS﹁KataOS﹂を発表”. CNET Japan. 2022年10月18日閲覧。
(128)^ “Microsoft、Windows 10の一部をRustへ書き換えてセキュリティ強化狙う”. マイナビ. 2022年12月7日閲覧。
(129)^ Valery Vavilov. “As Blockchain Changes The World, Bitfury’s New Platform Exonum is About to Change Blockchain”. 2018年1月28日閲覧。
(130)^ Balbaert, Ivo. Rust Essentials. Packt Publishing. p. 6. ISBN 1785285769 2016年3月21日閲覧。
(131)^ “Using HyperLogLog to Detect Malware Faster Than Ever”. OpenDNS Security Labs. 2016年3月19日閲覧。
(132)^ “ZeroMQ: Helping us Block Malicious Domains in Real Time”. OpenDNS Security Labs. 2016年3月19日閲覧。
(133)^ “Piston A modular game engine written in Rust”. Piston.rs. 2017年8月1日閲覧。
(134)^ Joseph Birr-Pixton. “ctz/rustls: A modern TLS library in Rust”. 2018年2月4日閲覧。
(135)^ “Remacs:Re-Implementing Emacs In Rust”. phoronix.com (2017年1月11日). 2017年1月19日閲覧。
(136)^ “Pijul”. pijul.org. 2017年7月8日閲覧。
(137)^ Google. “xi-editor”. 2018年1月28日閲覧。
(138)^ Andrew Gallant (2016年9月23日). “ripgrep is faster than {grep, ag, git grep, ucg, pt, sift}”. 2018年1月28日閲覧。
(139)^ Xiph.Org Foundation. “rav1e: The fastest and safest AV1 encoder.”. 2018年5月1日閲覧。
(140)^ Parity Technologies. “Parity’s Polkadot Dev Update #2”. 2018年12月5日閲覧。
(141)^ “mirakc: A Mirakurun-compatible PVR backend written in Rust”. 2020年8月10日閲覧。
(142)^ “Dropbox、4年をかけてRust言語で再構築された新しい同期エンジン﹁Nucleus﹂をリリース”. Impress. 2022年12月7日閲覧。