Rust勉強備忘録Part1

RustのEcosystemについて

  • rustc
    Rustのコンパイラ

  • cargo
    Rustの依存関係マネージャーとbuildtool

  • rustup
    Rustツールチェーンとインストーラーとアップデーター
    `rustc`および`cargo`のインストールと更新
    また複数バージョンをインストールして切り替えすることもできる

そもそもRustとは

Rustは新しい言語として、2015年に1.0バージョンがリリースされた
Rustは静的にコンパイルされた言語で、C++と同様の役割を果たす

Rustは多くのプラットフォームとアーキテクチャをサポートしている

そして、Rustは幅広いデバイスで使われている

Rustの世界

  • 関数はfnで定義する

  • CやC++のように中括弧でスコープが区切られる

  • main関数はプログラムのエントリーポイント

  • Rustの文字列はUTF-8でエンコードされ、任意のUnicode文字も含めることができる

Rustのユニークな特徴

  • コンパイル時のメモリ安全性

  • 未定義の実行動作がないこと

  • モダン言語機能

コンパイル時の保証

  • 初期化されていない変数がないこと

  • ほとんどの場合メモリリークがないこと
    技術的にはRustでもメモリリークさせることは可能。
    ただこれは故意的におこない限り発生はし得ない。
    そのため、Rustの「メモリリークが発生しない」は「偶然のメモリリークがほとんどない」という意味で理解するのが良い。

  • 二重開放がないこと(freeの2度目以降呼び出しができないこと)

  • 開放後は使用できないこと

  • NULLポインタがないこと

  • Mutexの解除忘れがないこと

  • スレッド間のデータ競合ないこと

  • interiorの無効化が行われないこと

Rustの混ぜ合わせたType定義

  • let mut a: [i8; 10] = [42; 10];
    ↑はi8型で配列の要素数10個入れられるArray型に42という数値ですべての要素(10個)を初期化していることになる

  • let t: (i8; bool) = (7, true);
    これはindex0にi8型、index1にbool型が入るtuplesを定義していることになる

Rustはダングリングポインタを禁止している

そもそもダングリングポインタとは

ダングリングポインタとは、無効なメモリ領域を指すポインタ。
すでに開放されているポインタを参照し続けているポインタのことをいう。
例えば、寿命を迎えたオブジェクトを参照し続けているポインタもダングリングポインタになる。

Rustでは

Rustではそれを禁止しており、例えば無効になったスコープ内からスコープ外に参照を渡して、その参照をスコープ外から使用するとエラーが発生する。

Rustの2つのstring型について

&str

文字列スライスへの不変な参照

String

変動可能な文字列バッファ

Rustは型に対して関数を定義することができる(kotlinでいう拡張関数てきな?)

struct hogehoge
というように型を定義したときに
impl hogehoge
と型と同名のimplスコープを定義して、その中に、
fun hoge() { … }
として関数を定義すると、
hogehoge.hoge()
というように使用することができるようになる

Rustでは関数のオーバーロードが禁止

Rustでは関数のオーバーロードが禁止されているため、1つの関数で1つの実装しかもつことが許されていない
また、デフォルト値の設定もサポートされていない(代替はマクロを使うとか)
その代わり、ジェネリックが使えるため、それで複数型の関数を作ることはできる

Rustでの暗黙的キャストについて

Rustでは自動的に暗黙的キャストを行わない
そのため、例えばi16型を要求しているところに対し、i8型を入れると同じintegerなので、C言語では暗黙的キャストが行われそのまま実行できるが、Rustではエラーが発生する。
これを回避する方法として、integer型にはFrom<T> and Into<T>が実装されており、これを使用することで、他の方からキャストさせることができる。
上記の例の場合、i16::from({i8型で定義した数値})とすることでi16型にキャストすることができる
これをもっと簡単にする方法としては、{i8型で定義した数値}.into()とすることで自動的に必要となる型へキャストしてくれる

参考

この記事が気に入ったらサポートをしてみませんか?