RustのRFC一覧 (~0200)

この記事は古いのでこちらをご覧ください

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

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

メタ

スタイル

  • RFC 0199 似たような動作で、所有権/借用の種別だけが異なるようなメソッドの命名規則を定める

構文

  • RFC 0016 属性を let 文、ブロック、式にも使えるようにする (#![feature(stmt_expr_attributes)])
  • RFC 0049 マッチ腕に属性を使えるようにする
  • RFC 0059 ~T 型と ~x 式を削除し、 Box/box で置き換える
  • RFC 0063 二重インクルードによる混乱を防ぐため、 mod foo; による外部ファイルの読み込みに制限をつける
  • RFC 0068 *T 型を *const T にリネーム
  • RFC 0069 バイトリテラル b'x' とバイト列リテラル b"Foo" の導入
  • RFC 0071 const/static 内でも、一定条件下でブロックを使えるようにする
  • RFC 0085 パターンの位置でマクロを使えるようにする
  • RFC 0087 トレイトオブジェクトの追加の境界を &(Foo : Send + Sync) ではなく &(Foo + Send + Sync) のように指定するようにする
  • RFC 0090/0021 字句解析器をより単純にする
  • 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により廃止: foo[]foo[..] になり、 ..[] と独立な構文になった)

意味論・型システム

  • RFC 0001 構造体フィールドの可視性をデフォルトでprivateにする。
  • RFC 0003 未使用の属性のチェック方法を改善する
  • RFC 0008 extern "rust-intrinsic" の廃止 (破棄)
  • RFC 0019 既定実装 impl Send for .. {}, 否定実装 impl !Send for T {} により Send/Sync をライブラリレベルで実現する (#![feature(optin_builtin_traits)])
  • RFC 0026 enum のバリアントの可視性を常にpublicにし、 priv キーワードを廃止する。
  • RFC 0034/0011 struct/enum の型引数に境界 T: Trait を書けるようにし、それが充足されていることを利用側で検査する。
  • RFC 0048 トレイト周りの整理: self の一般化、coherence条件の整理、トレイト選択アルゴリズムの改善など
  • RFC 0066 一時的な値に対する参照を間接的に取った場合も、直接取った場合と同様にその生存期間を延長できるようにする
  • RFC 0079 #[repr(C)] などで明示しない限り、構造体レイアウトは入れ替えられる可能性がある
  • RFC 0107 パターンマッチのガード内でムーブ束縛された変数を使う (未実装)
  • RFC 0109 バージョン込みでcrateを指定できるcrate idを廃止して、ソースコードレベルではcrateの名前だけを指定するようにする
  • RFC 0111 IndexIndex/IndexMut に分割する
  • RFC 0112/0033 Box<T> から &mut T への型強制の廃止(DerefMut型強制とは別) (RFC 0139も参照)
  • RFC 0114 クロージャの整理: unboxed closureのための Fn/FnMut/FnOnce トレイトの導入、 proc の削除、クロージャ型を削除して |_| -> _ を構文糖衣に変更(構文糖衣は現在は廃止)、キャプチャー方式の指定、レシーバモードの明示(現在は廃止)
  • RFC 0115 整数リテラル型がデフォルトで i32 にフォールバックしないようにする (RFC 0212により廃止)
  • RFC 0116 use/let 等による同レベルシャドウイングの廃止 (現在はglob importの復活により、globのshadowingが可能)
  • RFC 0130 ボローチェッカーにおける Box<T> の特別扱いの廃止
  • RFC 0136 publicな定義の型にprivateな型を使うのを禁止する
  • RFC 0139 Box<T> から &T への型強制の廃止 (Deref型強制とは別) (RFC 0112も参照)
  • RFC 0141 生存期間の省略規則の整理
  • RFC 0151 クロージャref を指定しない限りムーブキャプチャーする (RFC 0231により廃止)
  • RFC 0155 固有実装は該当の型と同じモジュールでのみ可能 (RFC 0735により廃止)
  • RFC 0192 トレイトオブジェクト型の生存期間 (RFC 0599も参照)
  • RFC 0195 関連型・関連定数・関連生存期間 (関連生存期間は未実装)

ライブラリ

  • RFC 0040 libstd の実装を libcore, liballoc, liblibc などのライブラリに分割する。
  • RFC 0042/0007 regex crateの同梱 (現在は同梱されていない)
  • RFC 0050 デバッグモードでのみ有効化される debug_assert!() の導入
  • RFC 0060 StrBufString にリネーム
  • RFC 0093 println!format! から地域化の機能を削除し、構文を整理
  • RFC 0100 PartialOrd::partial_cmp を追加
  • RFC 0123 ShareSync にリネーム

コンパイラ