RustのRFC一覧 (~1552)

概要: RustのRFCの一覧を作ろうとしたが、あまりに多いのでとりあえず1552までで公開することにした。なお、単に全てのRFCを列挙したいならばここを見ればよい

このRFCはRustのコミュニティーが管理しているものであり、 “RFC” の元祖であるIETF RFCとは関係ない。いずれもrequest-for-commentの略である。

メタ

  • RFC 0002 Rust RFCの提出プロセスの説明
  • RFC 0531 Rust RFCが関与する範囲を Rust/Cargo/Crates.io/このRFCプロセス自身 の4つに限定
  • RFC 1068 Rust開発者チームの組織構造を文書化したもの
  • RFC 1105 標準ライブラリや crates.io 上のライブラリについて、どのような変更がsemverの major change/minor changeにあたるかの基準を与える
  • RFC 1122 コンパイラのバージョニングについて、マイナーバージョンでの破壊的変更は「コンパイラのバグ」「型システム上の問題」の修正などに留めることを明記。破壊的変更の影響を最小限に抑えるための手続き (crater/cargobombツールの利用、 [breaking-change]タグ、tracking issueの作成、warning cycleの実施など)を策定。

スタイル/慣習

  • RFC 0199 似たような動作で、所有権/借用の種別だけが異なるようなメソッドの命名規則を定める
  • RFC 0236 panic!/Result の使い分けの慣習を定義する、関連するメソッドの命名規則を定める
  • RFC 0240 unsafe の慣習の整理: unsafe 関数をメソッドにする条件の定義、論理的な不変条件を壊すが未定義動作を引き起こさない関数は unsafe ではなく *_unchecked と命名することを定義、その他 unsafe 関数の命名規則の定義
  • RFC 0344 関数/メソッド名が型名に言及する際の命名規則 (Prelude*RFC 0445により廃止され、Rust PR #23104により完全に不要になった)
  • RFC 0430 命名規則のケーシング(snake_case, CamelCase, etc.) と、 unwrap/into_*命名規則を定義
  • RFC 0445 拡張トレイトパターンに使うトレイトの名前を *Ext とする命名規則
  • RFC 0505 doc-commentの慣習の確立: /// を優先的に使う。Markdownを使う

ソースファイル処理と字句

  • RFC 0063 二重インクルードによる混乱を防ぐため、 mod foo; による外部ファイルの読み込みに制限をつける
  • RFC 0069 バイトリテラル b'x' とバイト列リテラル b"Foo" の導入
  • RFC 0090/0021 字句解析器をより単純にする
  • RFC 0326 文字/文字列リテラルにおいて \x00-\x7F に限定し \x80-\xFF を禁止
  • RFC 0342 abstract, final, override をキーワードとして予約する
  • RFC 0446 文字/文字列リテラル\uXXXX/\UXXXXXXXX を廃止し、 \u{XXXXXX} を導入
  • RFC 0463 将来の互換性のために、リテラル直後の識別子の字句規則を変更
  • RFC 0593 Self をキーワードにする
  • RFC 0601 将来の末尾再帰のための予約キーワード be を廃止し、新たに become を予約
  • RFC 0879 2進/8進リテラル直後の数字を禁止する (0b0120b01 2 に分割せずにエラーにする)

構文

  • RFC 0016 属性を let 文、ブロック、式にも使えるようにする (#![feature(stmt_expr_attributes)])
  • RFC 0049 マッチ腕に属性を使えるようにする
  • RFC 0059 ~T 型と ~x 式を削除し、 Box/box で置き換える
  • RFC 0068 *T 型を *const T にリネーム
  • RFC 0071 const/static 内でも、一定条件下でブロックを使えるようにする
  • RFC 0087 トレイトオブジェクトの追加の境界を &(Foo : Send + Sync) ではなく &(Foo + Send + Sync) のように指定するようにする
  • RFC 0092 iffor などのブロックと紛らわしい場面では構造体の {} を禁止する
  • RFC 0132 UFCS (<T as Trait>::sth / <T>::sth) の導入
  • RFC 0135 where 節の導入 (一部未実装)
  • RFC 0160 if let 構文
  • RFC 0164 スライスパターンをfeature gateにする
  • RFC 0168 {mod, ..} によりモジュール自体とその中身を同時にインポートする (RFC 0532により廃止)
  • RFC 0169 use baz = foo::bar; 構文を廃止し use foo::bar as baz; で置き換える
  • RFC 0179 &p パターンを &p&mut p パターンに分割し、参照のミュータビリティーに応じて使い分けるようにする
  • RFC 0184 foo.0 のように、タプル/タプル構造体のフィールドに整数でアクセスできるようにする
  • RFC 0194 #[cfg(...)] の構文の整理
  • RFC 0198 foo[]/foo[n..m]/foo[n..]/foo[..n] のためのトレイト Slice/SliceMut を導入 (RFC 0439とRFC 0702により廃止: foo[]foo[..] になり、 ..[] と独立な構文になった)
  • RFC 0202 [x, ..ys] パターンを [x, ys..] に変更 (#![feature(slice_patterns)]/#![feature(advanced_slice_patterns)] に注意)
  • RFC 0214 while let 構文
  • RFC 0218 空のレコード構造体 struct A {} を許可
  • RFC 0243 e?(do) catch {} 構文によるエラー処理 (RFC 1859も参照。catch構文は#![feature(catch_expr)])
  • RFC 0339 バイト列リテラルの型を &'static [u8] から &'static [u8; N] に変更
  • RFC 0418 enum のバリアントをレコード形式 (enum Foo { Bar {}}) で宣言する機能を安定化
  • RFC 0438 型における &+ の優先順位を変更し、 &(Foo + Bar) のように書くようにする
  • RFC 0450 RFC 0184 (foo.0), RFC 0160 (if let), RFC 0214 (while let) の安定化, TupleN トレイトの廃止
  • RFC 0469 box p パターンをfeature gateにし、安定化するまで使用を禁止
  • RFC 0490 Sized? T 記法を T: ?Sized に変更
  • RFC 0520 配列型と繰り返しリテラルの構文 [x, ..N][x; N] に変更
  • RFC 0522 Selfimpl 内でも使えるようにする (RFC 1647も参照)
  • RFC 0532 use foo::{self, X}; によりモジュール自体とその中身を同時にインポートする。RFC 0168のキーワード置き換え
  • RFC 0534 #[deriving(Foo)]#[derive(Foo)] にリネーム
  • RFC 0544 int/uintisize/usize にリネーム。対応するリテラル接尾辞を is/us に変更 (リテラル接尾辞 is/usRFC 573で廃止)
  • RFC 0558 比較演算子を非結合的にし、 a == b == c をどうしても書きたい場合は (a == b) == c のように書くようにする
  • RFC 0572 将来の後方互換性のために、未知の属性(#[foo]等) をfeature gateにする(stableでの使用を禁止する)
  • RFC 0702 RangeFull とその構文糖衣 .. の導入。 foo[] 記法を廃止して foo[..] に置き換え
  • RFC 0803 型帰属 (type ascription): e: T による型の明示 (#![feature(type_ascription)])
  • RFC 0809 box (place) expr 構文を廃止して in place { block } に置き換える。かわりに box expr 構文を導入する。 (#![feature(placement_in_syntax)], #![feature(box_syntax)], RFC 1228も参照)
  • RFC 0940 crate名のハイフンを禁止(cargoでは許可)し、 extern crate "foo";extern crate foo; に変更
  • RFC 0968 クロージャの戻り値型を指定したときは本体がブロックであることを要請する (|| -> i32 1 とは書けず、 || -> i32 {1} と書く必要がある)
  • RFC 1192区間のための x ... y / x ..= y 構文 (どちらの構文になるかはまだ決定されていない) (#![feature(inclusive_range_syntax)])
  • RFC 1219 use foo::{bar as baz, Bar as Baz}; のように、 {} による複数インポート構文でのリネームを可能にする
  • RFC 1228 配置構文 in place { block } の別構文 place <- expr (#![feature(placement_in_syntax)])
  • RFC 1331 Rustの権威的な文法はrustcの実装ではなく src/grammar 内の形式文法であるとする (未実装)
  • RFC 1492 .. をタプルパターンやタプル構造体パターンの途中で使えるようにする
  • RFC 1506 タプル構造体/ユニット構造体を特殊なレコード構造体とみなし、タプル構造体を A { 0: "foo", 1: bar } のように初期化したり、同様のパターンマッチをしたりする

マクロ

  • RFC 0085 パターンの位置でマクロを使えるようにする
  • RFC 0378 文マクロには {} または ; を必須とし、どちらも持たないマクロは式マクロとして解釈する
  • RFC 0453 マクロのエクスポート (#[macro_export]/#[macro_reexport]/#[macro_use])、 $crate メタ変数、プラグインのための #[plugin] 属性
  • RFC 0550 macro_rules! のマッチャーとして、非曖昧な(おそらくLL(1)な)マッチャーだけを許可する
  • RFC 0873 型の位置でマクロを使えるようにする

モジュール・名前解決・可視性・警告

  • RFC 0001 構造体フィールドの可視性をデフォルトでprivateにする。
  • RFC 0003 未使用の属性のチェック方法を改善する
  • RFC 0026 enum のバリアントの可視性を常にpublicにし、 priv キーワードを廃止する。
  • RFC 0109 バージョン込みでcrateを指定できるcrate idを廃止して、ソースコードレベルではcrateの名前だけを指定するようにする
  • RFC 0116 use/let 等による同レベルシャドウイングの廃止 (現在はglob importの復活により、globのshadowingが可能)
  • RFC 0136 publicな定義の型にprivateな型を使うのを禁止する
  • RFC 0155 固有実装は該当の型と同じモジュールでのみ可能 (RFC 0735により廃止)
  • RFC 0234 enum のバリアントは常に値名前空間と型名前空間の両方に属するようにする
  • RFC 0385 モジュールシステムの整理: use/mod 順の強制を廃止、pub extern crate を許可、 extern crate のブロック内の出現を許可
  • RFC 0390 バリアントを enum名前空間の中に移動する。つまり、 enum Foo { Bar }Bar ではなく Foo::Bar とアクセスする
  • RFC 0459 impl とその中の fn の間での、生存期間変数と型変数のシャドウイングを禁止
  • RFC 0501 #![no_implicit_prelude]#![no_prelude] にリネームし、動作を変更 (RFC 1184も参照)
  • RFC 0735 固有実装は該当の型と異なるモジュールに置いてもよい
  • RFC 0736 構造体の関数型レコード更新記法(FRU) S { x: 42, ..old } において、更新されないフィールドの可視性もチェックする
  • RFC 1023 トレイト実装の一貫性を保つため、orphan規則を厳しくする。 #[fundamental] を導入する
  • RFC 1096 #[static_assert] の廃止 (#[static_assert] は、 bool 型の static アイテムにつけると、その値が false だったときにコンパイルエラーとなる)
  • RFC 1184 #![no_std]#![no_std]#![no_core] に分割した上で、 #![no_std] を安定化する。また libcore の名称を安定化(内容の安定化はしない) (RFC 0501も参照)
  • RFC 1193 #![deny(some_lint)] を設定しているcrateがコンパイラのバージョンアップで破壊された場合に、lint levelを強制的に上書きできるオプション --cap-lints を用意する
  • RFC 1229 static などの定数文脈で、定数式評価の途中でエラーが発生しても、コンパイラは警告を出力して処理を続行する
  • RFC 1270 #[deprecated] をユーザー定義のライブラリ内でも利用できるようにする
  • RFC 1422 pub(restricted) 構文
  • RFC 1445 定数パターンの透明性を高めるための制限と #[structural_match] (網羅性チェックの制限は未実装)

型システム

  • RFC 0019 既定実装 impl Send for .. {}, 否定実装 impl !Send for T {} により Send/Sync をライブラリレベルで実現する (#![feature(optin_builtin_traits)])
  • RFC 0034/0011 struct/enum の型引数に境界 T: Trait を書けるようにし、それが充足されていることを利用側で検査する。
  • RFC 0048 トレイト周りの整理: self の一般化、coherence条件の整理、トレイト選択アルゴリズムの改善など
  • RFC 0111 IndexIndex/IndexMut に分割する
  • RFC 0112/0033 Box<T> から &mut T への型強制の廃止(DerefMut型強制とは別) (RFC 0139も参照)
  • RFC 0115 整数リテラル型がデフォルトで isize にフォールバックしないようにする (RFC 0212により廃止)
  • RFC 0139 Box<T> から &T への型強制の廃止 (Deref型強制とは別) (RFC 0112も参照)
  • RFC 0195 関連型・関連定数・関連生存期間 (関連生存期間は未実装)
  • RFC 0212 RFC 0115をリバートするが、整数型のデフォルトは isize ではなく i32 にする
  • RFC 0213 fn/impl でもデフォルト型引数を使えるようにする。_ を型引数のデフォルト値の意味で使えるようにする (#![feature(default_type_parameter_fallback)])
  • RFC 0241 Deref型強制: &Rc<T>&T に自動変換等 (RFC 0401も参照)
  • RFC 0255 トレイトにobject-safetyを課すようにする
  • RFC 0341 virtual構造体と継承 virtual struct Foo {} struct Bar : Foo {} の削除
  • RFC 0401 型強制とキャストの整理: スライスへの自動参照の削除、生ポインタ型強制、サブトレイト型強制、unsizedタプル型強制、推移的型強制、ユーザー定義型のunsize型強制など (RFC 0241, RFC 0982, RFC 1558も参照; いくつかの機能は未実装)
  • RFC 0447 未使用だったり、一意でないような impl の型引数を禁止
  • RFC 0495 スライスパターン [x, xs..] の変更: [T] にはマッチするが &[T] にはマッチしない。可変借用の分割に対応 (#![feature(slice_patterns)]/#![feature(advanced_slice_patterns)] に注意)
  • RFC 0546 トレイトをデフォルトで ?Sized にする。 Sized なトレイトをobject-safeから外す。
  • RFC 0982 CoerceUnsized によるユーザー定義スマートポインタの型強制
  • RFC 1210 特殊化。 default 弱キーワードの導入と、特定条件下での重複する実装の許可 (#![feature(specialization)])
  • RFC 1214 型システムをよりよくするための3つの変更: 長命(outlives)関係に関する規則を単純化。射影型の規則を整理。型の適格性(well-formedness)を要求する位置を明確化。 (実装途中)
  • RFC 1216 ! をファーストクラスの型に昇格し、様々な位置で使えるようにする。 (#![feature(never_type)])
  • RFC 1268 マーカートレイトに対する実装が重複するのを許す (#![feature(overlapping_marker_traits)])
  • RFC 1504 i128, u128 型の追加 (#![feature(i128_type)])
  • RFC 1522 存在型のための impl Trait 構文を限定的にサポート (#![feature(conservative_impl_trait)], RFC 1951により拡充)

クロージャ

  • RFC 0114 クロージャの整理: unboxed closureのための Fn/FnMut/FnOnce トレイトの導入、 proc の削除、クロージャ型を削除して |_| -> _ を構文糖衣に変更(構文糖衣はRFC 0231により廃止)、キャプチャー方式の指定、レシーバモード |:| |&:| |&mut :| の明示(RFC 0231により廃止)
  • RFC 0151 クロージャref を指定しない限りムーブキャプチャーする (RFC 0231により廃止)
  • RFC 0231 キャプチャーモードの推論方式を変更、 ref || を廃止して move || を導入、 |_| -> _ 型構文を廃止、レシーバモード |:| |&:| |&mut :| を廃止
  • RFC 0587 Fn* 系トレイトの戻り値型を型引数ではなく関連型にする

生存期間/ボローチェッカー/部分型付け/const/mut

  • RFC 0066 一時的な値に対する参照を間接的に取った場合も、直接取った場合と同様にそ の生存期間を延長できるようにする
  • RFC 0107 パターンマッチのガード内でムーブ束縛された変数を使う (未実装)
  • RFC 0130 ボローチェッカーにおける Box<T> の特別扱いの廃止
  • RFC 0141 生存期間の省略規則の整理
  • RFC 0192 トレイトオブジェクト型の生存期間 (RFC 0599, RFC 1156も参照)
  • RFC 0246 staticconst/static に分割
  • RFC 0387 高階トレイト境界 T: for<'a> Trait の導入
  • RFC 0533 配列の特定要素からのムーブと要素ごとの初期化を廃止
  • RFC 0599 トレイトオブジェクト型の生存期間の、外側の型にもとづくデフォルト値 (RFC 1156により上書き, RFC 0192も参照)
  • RFC 0738 部分型付けにおける変性(variance)を推論するようにし、変性のためのラッパー型を削除する。未使用の型引数/生存期間引数(=双変 bivariant な引数)はエラーにする。
  • RFC 0769 ドロップチェッカーの導入により、多相型の Drop を安全に実装できるようにする。 (RFC 1238, RFC 1327により上書き)
  • RFC 0911 const fn による定数関数
  • RFC 1066 safeなプログラムでもデストラクタが実行されないことがあることを明記し、 std::mem::forgetunsafe を外す
  • RFC 1156 トレイトオブジェクト型の生存期間のデフォルト値を定めたRFC 0599を上書きし、関数本体内でのbase defaultの規則を変更する (RFC 0192も参照)
  • RFC 1238 RFC 0769が仮定している型のパラメトリシティーが特殊化によって崩れることを念頭に、ドロップチェッカーの動作を安全寄りに倒す (RFC 1327により上書き、 #![feature(dropck_parametricity)])
  • RFC 1327 RFC 0769とRFC 1238を上書きし、 #[unsafe_destructor_blind_to_params] よりも子細に状況を指定できる #[may_dangle] を導入 (#![feature(dropck_eyepatch)], 利用するには #![feature(generic_param_attrs)] も必要)
  • RFC 1414 &42 など定数参照の生存期間を 'static に延長する (#![feature(rvalue_static_promotion)])
  • RFC 1440 const/static にデストラクタを持つ型を許可する (未実装)

コード生成/ABI

  • RFC 0008 extern "rust-intrinsic" の廃止 (破棄)
  • RFC 0079 #[repr(C)] などで明示しない限り、構造体レイアウトは入れ替えられる可能性がある
  • RFC 0320 構造体等からdrop flagフィールドを削除、変数ごとのdrop flagに移行 (RFC 0533も参照)
  • RFC 0379 ランタイムリフレクションと、それを用いた {:?} の削除、 libdebug/Poly の削除 ({:?}RFC 0504により復活)
  • RFC 1201 関数プロローグとエピローグを省く #[naked] の追加 (#![feature(naked_functions)], RFC 1548も参照)
  • RFC 1240 #[repr(packed)] な構造体のフィールドへの参照の取得は unsafe であると取り決める
  • RFC 1260 ::main()fn main() {} ではなく use foo::bar as main の形で定義されていてもエントリポイントとみなす (未実装, PR 38312も参照)
  • RFC 1300 extern "rust-intrinsic"/extern "platform-intrinsic" は呼び出し側に直接コード生成されるものであり、関数ポインタ化はできないことを明記
  • RFC 1358 アラインメントを指定する #[repr(align = "N")] 属性 (#![feature(repr_align)])
  • RFC 1399 #[repr(packed)] の一般化である #[repr(packed = "N")] の導入 (未実装, おそらく #![feature(repr_packed)] になる)
  • RFC 1444 共用体 union X { .. } (#![feature(union)])
  • RFC 1513 panic 時にunwind(スタックを巻き戻してスレッドを終了)ではなくabort(その場でプログラムを終了)にするオプションを -C panic=abort として安定化し、ユーザー定義のパニック戦略を提供できるようにする (ユーザー定義のパニック戦略は #![feature(panic_runtime)], #![feature(needs_panic_runtime)])
  • RFC 1535 整数オーバーフロー検査を有効化するためのオプションを -C overflow-checks として安定化
  • RFC 1548 関数外でシンボルを定義するための global_asm!() マクロ (#![feature(global_asm)], RFC 1201も参照)

ライブラリ全般

  • RFC 0040 libstd の実装を libcore, liballoc, liblibc などのライブラリに分割する。
  • RFC 0042/0007 regex crateの同梱 (現在は同梱されていない, RFC 1242も参照)
  • RFC 0050 デバッグモードでのみ有効化される debug_assert!() の導入
  • RFC 0060 StrBufString にリネーム
  • RFC 0093 println!format! から地域化の機能を削除し、構文を整理
  • RFC 0100 PartialOrd::partial_cmp を追加
  • RFC 0123 ShareSync にリネーム
  • RFC 0201 std::error::Error トレイトによるエラーの相互変換
  • RFC 0216 HashMap 等でfindの結果を保持する Entry 型の導入
  • RFC 0221 fail!()panic!() にリネーム
  • RFC 0230 標準ライブラリからグリーンスレッド関係の部分を削除
  • RFC 0235 コレクション関連ライブラリの整理と慣例の確立: Cow を導入、 Deque などの抽象化用トレイトを削除し Iterator を中心にした枠組みを整備、各種関数の命名規則を統一 (RFC 0509により上書き, RFC 0580によりリネーム)
  • RFC 0256 Gc<T>/@T (Rc<T> とは異なり、循環参照も解放される) の削除
  • RFC 0356 型名にモジュール名を含めない慣習を定義し、 io::IoErrorio::Error にリネーム
  • RFC 0369 std::num にあった様々な抽象的な数値型トレイトの削除 (現在は Signed も含め大部分が削除され num crateに移管済み)
  • RFC 0380 std::fmt の安定化
  • RFC 0439 std::cmpstd::ops の整理: 演算子オーバーロードトレイトの整理、ヘテロジェニアスな Eq, Slice/SliceMutを削除してRange*型を導入、IndexSetの導入 (IndexSet は実装されていない模様; RFC issue #997 も参照)
  • RFC 0458 Send: 'static を削除、 &T: Send ←→ T: Sync
  • RFC 0461 タスクローカル領域のための std::local_data を整理してスレッドローカル領域のための std::tls を導入 (RFC 0909により、現在は std::thread に統合)
  • RFC 0474 std::path の整理: 正規化の意味論を変更、UTF-8とは限らないパスのために PathBuf/OsPath 型を新たに導入
  • RFC 0486 std::ascii::Ascii 型を削除して ascii 外部crateに分離
  • RFC 0494 std::c_vec を廃止、 std::c_strstd::ffi にリネーム、 CString の所有権の扱いを変更
  • RFC 0503 std::prelude からいくつかの名前を削除し、安定化
  • RFC 0504 ShowString(現在のDisplay)とShow(現在のDebug)に分割し、新しい Show のために {:?} を割り当て (RFC 0565により現在の名前に変更)
  • RFC 0509 コレクション関連ライブラリの整備、RFC 0235の続き。いくつかのコレクションAPIの削除。コレクションAPIの安定化。 (RFC 0580によりリネーム)
  • RFC 0517 std::iostd::os の大改革。 env fs io net os os_str process への分割。アトミック性に関する意味論の整理。非utf-8文字列のサポート。ブロッキングI/Oに注力しつつ、ノンブロッキング/非同期IOのための前方互換性は確保するようにする。など
  • RFC 0526 任意のバイト列を出力できてしまう std::fmt::Formatter::write 関数を削除することで、UTF-8チェックのコストを削減
  • RFC 0528 文字列のパターン検索のための Pattern トレイトを導入
  • RFC 0529 汎用的な変換トレイト AsRef, AsMut, Into, From の導入
  • RFC 0556 from_raw* 系関数のインターフェースを変更し、誤用を防ぐためドキュメントを充実させる
  • RFC 0560 整数演算オーバーフローの意味論を変更し、条件次第でpanicしうるとする。オーバーフロー時に常に巡回させたい場合のためのメソッド wrapping_* を用意する
  • RFC 0565 std::fmt::Stringstd::fmt::ShowDisplay, Debug にリネーム
  • RFC 0574 Vec::drain, String::drain がバッファの一部だけをドレインできるようにする (RFC 1257により上書き)
  • RFC 0580 コレクション関連ライブラリのリネーム (DListLinkedList, RingBufVecDequeなど)
  • RFC 0592 String/str に対して、 CString の対応物である CStr を導入する
  • RFC 0640 {:#?} によるpretty printingの導入と、 Debug の実装のためのヘルパー型の整備
  • RFC 0771 std::iter::oncestd::iter::empty の追加
  • RFC 0823 std::hash の整理: Hasher トレイトと Writer トレイトの統一 write_u*/write_i* メソッドの導入、 reset メソッドの削除
  • RFC 0832 vec![e; n] 記法のための vec::from_elem 関数 (この関数は確かに追加され、現在は alloc::vec::from_elem で公開されているが、 #[doc(hidden)] で隠されている)
  • RFC 0839 どんなコレクションでも、要素が Copy なら参照イテレータから extend できるように Extend を実装する
  • RFC 0840 CString::from_slice, CString::from_vec はpanicせずに Result を返す (実際のRust PR #22482 ではさらに、これらを CString::new に統一している)
  • RFC 0888 コンパイラ用のメモリフェンス指令 std::intrinsics::atomic_singlethreadfence(_rel|_acq|_acqrel)? を追加
  • RFC 0909 std::thread_localstd::thread に統合
  • RFC 0921 コレクションの Entryget メソッドを or_insert/or_insert_with に置き換え
  • RFC 0953 += など複合代入演算子のためのトレイト AddAssign etc. を追加
  • RFC 0979 SliceExt::splitn, StrExt::splitnn の意味を、セパレーターの最大数ではなく要素の最大数と解釈するようにする
  • RFC 0980定量読むまで繰り返す Read::read_exact を追加
  • RFC 1011 プロセスを即座に終了する std::process::exit (Cの_exit相当)を追加
  • RFC 1014 std::io::stdout, std::io::stderr, std::io::stdin は、対応する入出力ストリームがなかった場合にエラーにせずにダミーを返すようにする
  • RFC 1030 Default, IntoIterator, ToOwned をpreludeに追加
  • RFC 1040 Duration を整理し、一部を安定化
  • RFC 1044 std::fs で、プラットフォーム依存のファイル属性を扱えるように std::os::linux::fs::MetadataExt のような拡張トレイトを追加、 FileType 型の追加など
  • RFC 1047 TcpStream, UdpSocket に、タイムアウトを設定するメソッドを追加
  • RFC 1048 プラットフォーム非依存の soft_link を廃止して、プラットフォームごとのシンボリックリンク作成関数のみを提供する
  • RFC 1054 str::words を廃止して、 std::split_whitespace にリネーム
  • RFC 1057 io::Error のカスタムエラーを error::Error + Send から error::Error + Send + Sync にすることで、 io::Error: Sync にする
  • RFC 1058 失敗時にパニックする [T]::init[T]::tail を廃止し、 Option を返す [T]::split_last, [T]::split_first で置き換える
  • RFC 1102 SliceConcatExt::connect を、多くのプログラミング言語と同じ名称である SliceConcatExt::join にリネーム
  • RFC 1119 Result::expect の追加
  • RFC 1123 str::split_at の追加
  • RFC 1131 std::intrinsics::likelystd::intrinsics::unlikely の追加 (#![feature(core_intrinsics)])
  • RFC 1135 生ポインタ (*const T, *mut T) が fat-pointerの場合でも、これらの比較をできるようにする (RFC中では Eq に限定されているが、実際は一般の Ord の関数が動作するようだ)
  • RFC 1152 str[T] の対称性のために、 str::into_stringString::into_boxed_str を追加
  • RFC 1174 IntoRawFd, IntoRawSocket, IntoRawHandle トレイトを追加
  • RFC 1194 HashSetBTreeSetcontains, remove, insert の一般化(削除/発見した要素を返す)である get, take, replace を追加
  • RFC 1212 str::lines, BufRead::lines などの行処理関数の挙動を変更し、LFだけではなくCRLFも改行として扱うようにする
  • RFC 1236 panic! によるunwindをキャッチする std::thread::catch_panicstd::panic::catch_unwind にリネームし、要請するトレイトを Send から新しく導入する UnwindSafe に変更する。これにより std::panic::catch_unwind を安定化する。 (RFC 1328も参照)
  • RFC 1242 regex, uuid など多数の同梱crateを@rust-langから分離、移管する (RFC 1291も参照)
  • RFC 1252 OpenOptions の挙動の明確化とオプションの拡充
  • RFC 1257 RFC 0574を拡充し、コレクションの種類に応じて .drain(a..b) または .drain() を実装する
  • RFC 1288 std::time を拡充し、 Instant, SystemTime, Duration を追加する
  • RFC 1291 libc@rust-lang-nurseryから@rust-langに昇格し、モジュール構造を整理する
  • RFC 1307 OsString/OsStrlen などいくつかのメソッドを追加
  • RFC 1328 パニックハンドラーを指定する std::panic::set_hook, std::panic::take_hook を追加 (RFC 1236も参照)
  • RFC 1359 Unix系特有のプロセス起動オプションを指定するための CommandExt トレイトと、 CommandExt::exec, CommandExt::before_exec メソッドの追加
  • RFC 1398 カスタムアロケーターのためのAPI (#![feature(allocator_api)])
  • RFC 1415 std::os 内のプラットフォーム依存のデータ構造を廃止し、プラットフォーム依存の機能は拡張トレイトにより提供する
  • RFC 1419 memcpy 相当の機能を提供する [T]::copy_from_slice
  • RFC 1432 Vec, String の一定範囲をイテレーターからの値で置き換える splice メソッド (#![feature(splice)])
  • RFC 1434 値が範囲内かどうかを判定するための Range::contains etc. (#![feature(range_contains)])
  • RFC 1443 Atomic* 型に、 compare_and_swap の一般化である compare_and_exchange, compare_and_exchange_weak を追加する
  • RFC 1461 TcpStream, TcpListener, UdpSocket に、ディレイ、TTL, IPv6, ブロッキングなどの設定をするメソッド (net2 crateに既に存在する機能) を追加
  • RFC 1467 std::ptr::read_volatilestd::ptr::write_volatile を安定化
  • RFC 1479 Unixドメインソケットのための std::os::unix::net モジュールを追加
  • RFC 1498 Ipv4Addr, Ipv6Addr[u8; N] との相互変換関数
  • RFC 1521 Copy な型の clone の動作は単純コピーと一致しなければならないことを明記
  • RFC 1542 失敗するかもしれない変換のための TryFrom, TryInto トレイトを追加 (#![feature(try_from)])
  • RFC 1543 AtomicIsize, AtomicUsize の兄弟にあたる AtomicI8, AtomicU8, AtomicI16, AtomicU16, AtomicI32, AtomicU32, AtomicI64, AtomicU64, AtomicI128, AtomicU128 を追加 (#![feature(integer_atomics)])
  • RFC 1552 VecDeque, LinkedList にある要素があるか調べる contains メソッドを追加

コンパイラ/リンカ/Cargo

  • RFC 0086 手続きマクロの登録処理を一般化して、他のコンパイラプラグインの登録にも使えるようにする
  • RFC 0089 リントをコンパイラプラグインとして追加できるようにする
  • RFC 0131 ターゲットアーキテクチャーの指定の要件を緩める
  • RFC 0403 cargo build とネイティブライブラリとの相性を良くする: rustc -l オプションの追加、Cargoマニフェストのキーの追加、build.rs の導入など
  • RFC 0404 デフォルトで動的リンクよりも静的リンクを優先する
  • RFC 0507 stable/beta/nightlyリリースチャンネルの導入、後方互換性のための #![feature] の強化
  • RFC 0563 ndebug コンフィグを削除し、 debug_assertions コンフィグに移行
  • RFC 1183 アロケーターの実装(システムのmallocまたはjemalloc)をリンク時に選べるようにし、システムのmallocをデフォルトにする
  • RFC 1191 高層中間表現HIRの導入。ASTから直接transせずに、AST→HIR→LLVM IRの順で翻訳する (RFC 1211も参照)
  • RFC 1199 SIMDを外部crateで実現するためのコンパイラ側のサポートを整備する (#[repr(simd)] など)
  • RFC 1200 cargo install, cargo uninstall の追加
  • RFC 1211 中層中間表現MIRを導入し、AST→HIR→MIR→LLVM IRの順で翻訳する (RFC 1191も参照)
  • RFC 1241 crates.ioにおいて、 foo = "*" のようなワイルドカード依存関係をもつcrateのアップロードを禁止
  • RFC 1298 インクリメンタルコンパイルの提案
  • RFC 1317 IDEサポートのためのRLS (Rust Language Server) の提案 (実装途中で不安定)
  • RFC 1361 Cargoにおける、 [section.'cfg(..)'] による条件つき設定。Rustの #[cfg(..)] と同じ構文
  • RFC 1510 crate形式として、RustライブラリのCインターフェースをエクスポートするためのcdylib形式を追加
  • RFC 1525 Cargo.toml をプロジェクト内の複数crateで共有するためのworkspace機能を追加