kieran

Kieran‘s Blog

The world will be better?
github

包括的なRustチュートリアル

第一日:朝#

1. Rust とは何か#

Rust は、C++ と同様の機能を持つ静的コンパイル言語です。

  • rustc は、バックエンドとして LLVM を使用しています。
  • Rust と C++ は似たようなシナリオに適しています。
    • 非常に高い柔軟性。
    • 高度な制御能力。
    • マイクロコントローラなどの非常に制約のあるデバイスにもスケーリングダウンできます。
    • 実行時やガベージコレクションはありません。
    • パフォーマンスを犠牲にすることなく、プログラムの信頼性と安全性に焦点を当てています。

2. Rust を選ぶ理由#

Rust のいくつかの特徴:

  • コンパイラによるメモリ安全性
  • 実行時の未定義動作がありません
  • モダンなプログラミング言語の特徴

2.1 コンパイル時の保証#

コンパイル時の静的なメモリ管理:

  • 初期化されていない変数は存在しません。
  • メモリリークはありません。
  • "ダブルフリー" はありません。
  • "解放後の使用" はありません。
  • NULLポインタはありません。
  • 忘れられたミューテックスはありません。
  • スレッド間のデータ競合はありません。
  • イテレータの無効化はありません。

2.2 実行時の保証#

Rust には実行時の未定義動作がありません:

  • 配列アクセスには境界チェックがあります。
  • 整数オーバーフローは定義されています(パニックまたはラップアラウンド)。

2.3 モダンな特徴#

言語の特徴:

  • 列挙型とパターンマッチング
  • ジェネリクス
  • 追加のオーバーヘッドのない FFI
  • ゼロコスト抽象

ツール:

  • 強力なコンパイラエラーメッセージ
  • 組み込みの依存関係マネージャー
  • UT の組み込みサポート
  • 優れた言語サービスプロトコルの実装

3. 基本構文#

3.1 スカラー型#

リテラル
符号付き整数i8i16i32i64i128isize-1001_000123_i64
符号なし整数u8u16u32u64u128usize012310_u16
浮動小数点数f32f643.14-10.0e202_f32
文字列&str"foo""two\nlines"
Unicode スカラー型char'a''α''∞'
ブール値booltruefalse
各型のサイズは次のとおりです:
  • iNuNfNは_N_ビットを占有します。
  • isizeusizeはポインタサイズのスペースを占有します。
  • charは 32 ビット幅です。
  • boolは 8 ビット幅です。

3.2 複合型#

リテラル
配列(Arrays)[T; N][20, 30, 40][0; 3]
タプル(Tuples)()(T,)(T1, T2), …()('x',)('x', 1.2), …
配列の代入とアクセス:
fn main() {
	let mut a: [i8; 10] = [42; 10];
	a[5] = 0;
	println!("a: {:?}", a);
}

タプルの代入とアクセス

fn main() {
    let t: (i8, bool) = (7, true);
    println!("t.0: {:?}", t.0);
    println!("t.1: {:?}", t.1);
}

3.3 参照#

Rust は参照型も提供しています

fn main() {
    let mut x: i32 = 10;
    let ref_x: &mut i32 = &mut x;
    *ref_x = 20;
    println!("x: {x}");
}

let mut ref_x: &i32let ref_x: &mut i32の違いに注意してください。前者は可変参照を宣言しており、この参照がバインドされている値を変更することができます。後者は可変変数への参照を宣言しています。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。