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

Rust ownership from legal perspective

Rust ownership from legal perspective

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

Avatar for homuler

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再考