読者です 読者をやめる 読者になる 読者になる

Rust 0.9リリースノート覚え書き

Rust

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 of do 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コマンドは死んだ

メンテナンスされてなかったので死んだ