Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rust ownership from legal perspective

Rust ownership from legal perspective

Rustのownershipは所有権ではなかった件

homuler

May 30, 2016
Tweet

More Decks by homuler

Other Decks in Programming

Transcript

  1. 2. Memory safe • Ownership – 所有権にたとえられる • Borrowing –

    (使用/消費)貸借にたとえられる • Lifetimes
  2. 2. Memory safe • Ownership – 所有権? • Borrowing –

    (使用/消費)貸借? • Lifetimes – 「人が深淵を覗く時、深淵もまた人を覗いている」
  3. 3. OwnershipとBorrowing • 変数宣言に関するルール • ある値に対するownershipを持つ変数(x)がある • 別の変数が同じ値を使う際は、(xの)ownershipをborrowする – この表現がかなりミソ

    • 常にどちらかの状態を維持する – 値を参照するだけの変数(Immutable borrowing)が複数 – 値を変更可能な変数(Mutable borrowing)がただ一つ • 違反するとコンパイルエラー • 実行時のオーバーヘッドはない – コンパイル時チェックのみ
  4. 本当に貸借? borrowingのサンプル // コンパイルエラーになる fn main() { let xs =

    vec![1, 2, 3]; for x in xs { println!("{}", x); } println!("{:?}", xs); }
  5. 本当に貸借? borrowingのサンプル // コンパイルエラーになる fn main() { let xs =

    vec![1, 2, 3]; for x in xs { // move(ownershipが移る) println!("{}", x); } println!("{:?}", xs); // Error }
  6. 本当に貸借? borrowingのサンプル fn main() { let xs = vec![1, 2,

    3]; for x in &xs { // borrowing(ownershipはそのまま) println!("{}", x); } println!("{:?}", xs); }
  7. 本当に貸借? borrowingのサンプル fn main() { let xs = vec![1, 2,

    3]; for x in &xs { // borrowing(ownershipはそのまま) println!("{}", x); } println!("{:?}", xs); } 見せてもらっただけ、だけど一応借りてそう
  8. 本当に所有権? Borrowingのサンプル(mutable)   // 配列を空にする fn emptify(xs: &Vec<usize>) { while

    xs.len() > 0 { xs.pop(); // Error(Immutable!) } } fn main() { let xs = vec![1, 2, 3]; emptify(&xs); }
  9. 本当に所有権? Borrowingのサンプル(mutable) // 配列を空にする  fn emptify(xs: &mut Vec<usize>) { while

    xs.len() > 0 { xs.pop(); } } fn main() { let mut xs = vec![1, 2, 3]; emptify(&mut xs); }
  10. 本当に所有権? Borrowingのサンプル(mutable)   // 配列を空にする fn emptify(xs: &mut Vec<usize>) {

    while xs.len() > 0 { xs.pop(); } } fn main() { let mut xs = vec![1, 2, 3]; emptify(&mut xs); } 中身全部抜いてますけど・・
  11. 5. Borrowing再考 • Immutableのborrowing – 値は見るだけ – 法律行為(契約)でない可能性も • 渋谷駅にある「明日の神話」みたいな

    • 警備員(コンパイラ)に止められるだけ • 入場規制はあるので、微妙なところ – 揚げ足を取るのはやめます
  12. • そういえば、ローマ法にあった – 「権原」 – 所有権の上位概念で、所有権の根拠になるもの – 日本では立法者が理解できなかったので、権原≒所有権 • 所有権だって条件(期限)付き譲渡できる、はず

    – (日本法だと苦しい) – cf. 忘恩行為による贈与取り消し、終期付き譲渡など (東京地裁昭和50年12月25日判決) – 日本法ではなかった • 所有権(ownership)を借りる(borrow)という表現自体がおかしい • 「何か」 = ownership ≒ 権原 ≠ 所有権 Q.E.D 6. Ownership再考