by shigemk2

当面は技術的なことしか書かない

Rust入門以前 #kernelvm

Install · The Rust Programming Language

@omasanori

想定

  • C言語が読める
  • OSの構成や役割について知っている
  • 知らない文法のコードが見えても怖気づかない

Rustとは

システムプログラミング言語

資源の制約が厳しい

Rust (プログラミング言語) - Wikipedia

  • アセンブリ言語
  • C言語
  • C++

なぜRustは生まれたのか

Interview on Rust, a Systems Programming Language Developed by Mozilla

他のプログラミング言語の良い所どりをした、いいやつ。

  • 占有ポインタ(ヒープ上の所有権を1つだけ有するstd::unique_ptr)
  • 参照(所有権を持たない)
  • 生ポインタ

owning pointer → owned box

int型の値をヒープ上に確保する

ヒープ領域 - Wikipedia

関数が返ってきても開放されるとは限らない

参照に値を「貸して」いる間は所有権を移動できない

C++のスマートポインタセマンティクスとかそういうアレ

(借り物ポインタ)

リソース制約が厳しい環境では、予測可能性

  • 有効範囲を出た時に解放する
  • 基本はスコープの外に出た時に解放される

const vs mut

  • 再代入、変更を許さないのがC++のconst
  • 再代入、変更を許すのがRustのmut

一方が他方とくらべて圧倒的に優れているということはない

Rust 不要な再代入を避けるようなプログラミングスタイルに誘導してる?

constをつけなくてもいいときにconstをつける

不要なのにmutをつけると警告がいっぱいいっぱい出てくる

  • MLKit(IT Univ. of Copenhagen
  • Cyclone (AT&T)

区間解析

OpenSSL Valhalla Rampage

Cでよくあるミステイクがいっぱい掲載されてれぅ

値や参照の有効範囲

Rustの生存期間

A 30 minute introduction to Rust

fn dangling() -> ~int {
    let i = ~1234;
    return i;
}

fn add_one() -> int {
    let num = dangling();
    return *num + 1;
}

参照は生存期間をパラメータとして取れる

ML(初期の関数型言語のアレ)

「好きな関数はif」

Rubyのifは関数ではないが、全ての言語のifが関数ではないというわけではない

Rustのifも関数ではない

宣言文と式文(式の末尾に;)

式は濫用せんこと

代数的データ型

値の集合としての型(-1,-2,-3)

直和、直積

cでいうところの

直和、共用体(型と型の組) 直積、構造体

Rustは型検査器の支援を受けやすく、より安全に使える

型検査器を欺くのではなく協力する

暗黙のreturnは使わん方がいい

型クラス: 型の分類(classe)

  • トレイトはデフォルト実装
  • シグネチャにトレイトを指定

数値のように○○できるならばそれは数値として扱える

少し変わった標準提供トレイト

Zero→One

単位元 - Wikipedia

メッセージパッシング

使うのは難しくないけど実装するのは難しい

@kumagiにきこう!

compilerのwarningを消す

1.0が出てないから最新版は使えない

不満を抱えたC++開発者がターゲット、らしい