RustのRFC一覧 (~1240)
概要: RustのRFCの一覧を作ろうとしたが、あまりに多いのでとりあえず1240までで公開することにした。なお、単に全ての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進リテラル直後の数字を禁止する (
0b012を0b012に分割せずにエラーにする)
構文
- 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
ifやforなどのブロックと紛らわしい場面では構造体の{}を禁止する - 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
Selfをimpl内でも使えるようにする (RFC 1647も参照) - RFC 0532
use foo::{self, X};によりモジュール自体とその中身を同時にインポートする。RFC 0168のキーワード置き換え - RFC 0534
#[deriving(Foo)]を#[derive(Foo)]にリネーム - RFC 0544
int/uintをisize/usizeにリネーム。対応するリテラル接尾辞をis/usに変更 (リテラル接尾辞is/usはRFC 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 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 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
IndexをIndex/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 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
staticをconst/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::forgetのunsafeを外す - RFC 1156 トレイトオブジェクト型の生存期間のデフォルト値を定めたRFC 0599を上書きし、関数本体内でのbase defaultの規則を変更する (RFC 0192も参照)
- RFC 1238 RFC 0769が仮定している型のパラメトリシティーが特殊化によって崩れることを念頭に、ドロップチェッカーの動作を安全寄りに倒す (RFC 1327により上書き、
#![feature(dropck_parametricity)])
コード生成/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 1240
#[repr(packed)]な構造体のフィールドへの参照の取得はunsafeであると取り決める
ライブラリ全般
- RFC 0040
libstdの実装をlibcore,liballoc,liblibcなどのライブラリに分割する。 - RFC 0042/0007
regexcrateの同梱 (現在は同梱されていない) - RFC 0050 デバッグモードでのみ有効化される
debug_assert!()の導入 - RFC 0060
StrBufをStringにリネーム - RFC 0093
println!やformat!から地域化の機能を削除し、構文を整理 - RFC 0100
PartialOrd::partial_cmpを追加 - RFC 0123
ShareをSyncにリネーム - 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::IoErrorをio::Errorにリネーム - RFC 0369
std::numにあった様々な抽象的な数値型トレイトの削除 (現在はSignedも含め大部分が削除されnumcrateに移管済み) - RFC 0380
std::fmtの安定化 - RFC 0439
std::cmpとstd::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_strをstd::ffiにリネーム、CStringの所有権の扱いを変更 - RFC 0503
std::preludeからいくつかの名前を削除し、安定化 - RFC 0504
ShowをString(現在のDisplay)とShow(現在のDebug)に分割し、新しいShowのために{:?}を割り当て (RFC 0565により現在の名前に変更) - RFC 0509 コレクション関連ライブラリの整備、RFC 0235の続き。いくつかのコレクションAPIの削除。コレクションAPIの安定化。 (RFC 0580によりリネーム)
- RFC 0517
std::ioとstd::osの大改革。envfsionetosos_strprocessへの分割。アトミック性に関する意味論の整理。非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::Stringとstd::fmt::ShowをDisplay,Debugにリネーム - RFC 0574
Vec::drain,String::drainがバッファの一部だけをドレインできるようにする - RFC 0580 コレクション関連ライブラリのリネーム (
DList→LinkedList,RingBuf→VecDequeなど) - RFC 0592
String/strに対して、CStringの対応物であるCStrを導入する - RFC 0640
{:#?}によるpretty printingの導入と、Debugの実装のためのヘルパー型の整備 - RFC 0771
std::iter::onceとstd::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_localをstd::threadに統合 - RFC 0921 コレクションの
Entryのgetメソッドをor_insert/or_insert_withに置き換え - RFC 0953
+=など複合代入演算子のためのトレイトAddAssignetc. を追加 - RFC 0979
SliceExt::splitn,StrExt::splitnのnの意味を、セパレーターの最大数ではなく要素の最大数と解釈するようにする - 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::likely、std::intrinsics::unlikelyの追加 (#![feature(core_intrinsics)]) - RFC 1135 生ポインタ (
*const T,*mut T) が fat-pointerの場合でも、これらの比較をできるようにする (RFC中ではEqに限定されているが、実際は一般のOrdの関数が動作するようだ) - RFC 1152
strと[T]の対称性のために、str::into_stringとString::into_boxed_strを追加 - RFC 1174
IntoRawFd,IntoRawSocket,IntoRawHandleトレイトを追加 - RFC 1194
HashSetやBTreeSetのcontains,remove,insertの一般化(削除/発見した要素を返す)であるget,take,replaceを追加 - RFC 1212
str::lines,BufRead::linesなどの行処理関数の挙動を変更し、LFだけではなくCRLFも改行として扱うようにする - RFC 1236
panic!によるunwindをキャッチするstd::thread::catch_panicをstd::panic::catch_unwindにリネームし、要請するトレイトをSendから新しく導入するUnwindSafeに変更する。これによりstd::panic::catch_unwindを安定化する。
コンパイラ/リンカ/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も参照)