Rust 0.9リリースノート覚え書き
Rust 0.9が出たので、リリースノートを元に個人的に気になった箇所をメモする。メモ書きなんで、あんまりコンテンツ力考えてないですし、網羅的でもないです。真面目にリリースノート読んだ方がいい。
ちなみにC85で頒布したRust Dojoですが、内容は執筆当時のstableである0.8準拠ですが(ライブ感)、基本的なセマンティクスへの変更は発生していないので、ブルース・リーが『燃えよドラゴン』で語ったように、「考えるな感じろ」の精神で読んでいただければ問題はないはずです。
(Rustのベンキョーカイの幹事やってるけど、平時はどちらかというとServoの人なので、rust-dev MLも一応購読してるけど流し読みだし、Rustの全コミットログを追ってるわけでもないので、リリースノートを用いたウォッチになっているというわけ)
feature gate
- 謎directive増えました。
- crate単位で言語機能を有効にする為のフラグ機能です。
構文からManaged Pointerへの依存が外れつつある
#[feature(managed_boxes)]
が追加されたり、@mut
が消えたり、@fn
が消えたり、std::gc
またはstd::rc
を使えと言われたりしてる。- 現在、
@
はGc
型のwrapperであるとも書かれている。
- 現在、
- 標準ライブラリに格下げされたとしても、極端に使い難くなるとは思わないけれども。
- 割とownedとborrowedとARCで何とかなる
- ちなみにServoではパフォーマンス上の理由もあって、Managed ptrの使用の減少傾向にあります。
クロージャ(ラムダ)とプロシージャの扱いが明確に
~fn
は死んだ。proc
キーワードを用いてproc(args) -> retval { }
のように書くように。
@fn
は死んだ(上にも書いた)。&fn
は死んだ。|args| -> ret
のように書く。
do syntaxは絶滅危惧種だ
do
only works with procs in order to make it obvious what the cost ofdo
is.- Servoでもdo構文使うと「やめろ!そいつは死んだ!」みたいなこと言われて修正を求められます
#[fixed_stack_segment]
, #[rust_stack]
が消えた
消えた
非ascii文字の変数識別子は、feature gatedに
- そんなに使う人いなかったんだろうな……
#[feature(non_ascii_idents)]
コンパイル時検出の強化
- なりました
- リテラルのオーバーフローの検出
- unsafeブロックの検出
- 未知のattributeの検出
- 未知のfeature gatesの検出
- デッドコードの検出
- Using Rust for an Undergraduate OS Courseの成果ページを見ると、この講義クラスからdead code検出のPull Requestが出たっぽい。すごい実践授業だ。
- 関係ないけど上の記事にRust langステッカーが載ってて、すごく欲しいんでMozilla JapanでもMozilla Coorporationでもどっちでもいいので作ってください。
- それともコミケ頒布前提で、コミュニティ(サークル)として「勝手に」作るべきか
リンクの機能強化
静的リンクが可能になった
なりました
#[link_args]
はfeature gateに隠れた
隠れた
Support native OS X frameworks
- あ、はい
- 試してないので詳細知らん
Pod
kindの導入
Pod
kindの導入でmemcpyを介した型コピーが可能になるとの事です
#[thread_local]
- feature gated!
- スレッドローカルな変数の作成が可能に(タスクローカルではない!)
1:1 Schedulingが導入された
- 概略はそのうち書く(たぶん)
- 色々変わった
- OSスレッドを用いたものが"native"と呼ばれる
- 従来のlibuvに依存したスケジューリングを"green"と呼ぶ(残ってる)
- M:Nと1:1を混ぜて使う事はできる(たしか)
標準ライブラリは相変わらずよく変わる
- 変わってる
- いつものことです
extra::sort
は消えた
消えてた
std::comm
が速くなった
- 速くなった
- スライドあったはず
rustコマンドとrustiコマンドは死んだ
メンテナンスされてなかったので死んだ