タグ

ブックマーク / qnighy.hatenablog.com (3)

  • Rustの型推論の概略 - 簡潔なQ

    概要: Rustの型推論の大枠を説明する。 なお、筆者もRustの型推論の動作を詳細に把握しているわけではない。 短くまとめると Rustの型推論はHindley-Milner型推論ベースである。したがって後方の式や文の内容から手前の型が推論されることもある。しかし以下に挙げるようなRust独自の特徴をもつ。 型推論は原則として関数定義の中で閉じており、関数の引数型や戻り値型は推論されない。これは、関数を抽象化の境界とするための意図的なものである。この意味で「局所的」というのであれば間違いではない。 ただし、let多相を含む型推論を避ける意図もあるかもしれない。 関数呼び出しや一部の演算子などは、その部分の制約を立てる段階で、型の一部分が判明している必要がある。この動作は推論順序の影響を受ける。 トレイトによりオーバーロード可能になっている関数や演算子は、射影型を使っている場合、ボトムアッ

    Rustの型推論の概略 - 簡潔なQ
  • Rustのパニック機構 - 簡潔なQ

    概要: Rustのパニック機構は異常終了の処理を安全に行うためにある。この動作を詳しくみていく。 パニックとは何か Rustには2つの異なる例外処理機構があります。 発生源 対処方法 例 パニック プログラミングエラー 原則として捕捉しない assert!() 境界外参照 Result 例外的な入力 必要に応じて捕捉 I/Oエラー (File::read) パースエラー (str::parse) パニックとResultの関係についてはTRPL第2版第9章、未定義動作とパニックの関係についてはRustonomiconのUnwindingの章などが参考になります。 パニックを想定した安全性 Rustではたとえパニック状態でも未定義動作だけは絶対に避ける必要があります。そのため以下の関数は不健全 (unsound)です。 use std::ptr; // この関数はRustではunsound (

    Rustのパニック機構 - 簡潔なQ
  • Rustコンパイラのコンパイルの流れ - 簡潔なQ

    Rustコンパイラは同梱のrustbuildというツールでビルドされる。これはRustPython2で書かれている。 README.md にも説明が書かれているが、ここで改めて説明をしてみる。 ./x.py は src/bootstrap/bootstrap.py にリンクされている。これは次のような動作をする。 設定ファイル (config.mk または config.toml) を読む。 bootstrap.py はTOMLパーサーを持たないため、この時点では config.toml はアドホックな方法で解析される。したがって、 vendor, locked-deps, cargo, rustc, build キーの記述には気をつける必要がある。例えば cargo = ".." を cargo=".." と書くと認識されない。 必要なら、 src/stage0.txt を読み、インタ

    Rustコンパイラのコンパイルの流れ - 簡潔なQ
  • 1