次の開発プロジェクトに Rust を使用する 7 つの理由

次の開発プロジェクトに Rust を使用する 7 つの理由

あなたはRustを学ぼうとしている開発者ですか?決定を助けるために、この記事では、最も人気のあるシステム プログラミング言語の 1 つである Rust の機能の一部を紹介します。

この記事では、Rust プログラミング言語と、その型システム、メモリ安全性、所有権などの機能について説明します。 Rust の学習に役立つリソースのリストについても説明します。

さぁ、始めよう!

錆とは何ですか?

Rust はシステム プログラミング言語です。これは、開発者であるGraydon Hoareの個人プロジェクトとして 2006 年に始まりました。10 年も経たないうちに、システム プログラミングと関連アプリケーションの頼りになる選択肢に成長しました。 Rustプログラマーの平均給与は約12万ドルです。

したがって、C++ から Rust に切り替えようとしている場合、または新しい言語を習得しようとしている場合、Rust を学習することは素晴らしい選択肢になる可能性があります。 StackOverflow Developer の調査によると、Rust は 7 年連続で最も愛されているプログラミング言語に選ばれています。

画像ソース: StackOverflow
画像-96
画像-96

Rust は、C や C++ などの低レベル システム プログラミング言語の速度と、Python などの高レベル プログラミング言語の安全性を提供します。

Dropbox や Firefox などの著名なプロジェクトから WebAssembly や組み込みプログラミングに至るまで、Rust はソフトウェア開発のあらゆる分野で広く使用されています。 Rust は、Cargo を通じてすぐに使用できるパッケージ管理サポートを提供します。

Cargo: Rust のパッケージマネージャー

Cargoは Rust のパッケージ マネージャーです。カーゴを使用して、Rust パッケージ レジストリであるcratesからパッケージをインストールできます。カーゴは、パッケージの検索、インストール、管理を可能にするパッケージ マネージャーであるだけでなく、テスト ランナー、ドキュメント ジェネレーター、およびビルド システムとしても機能します。

Rust の概要を理解したところで、Rust をシステム プログラミング言語として際立たせ、広く普及している特徴のいくつかを詳しく見てみましょう。

役立つエラーメッセージ

役立つエラーメッセージ
役立つエラーメッセージ

初心者プログラマーは、エラーに遭遇し、コードのデバッグにかなりの時間を費やすことになります。コンパイラによって提供されるエラー メッセージと警告を使用して、これらの問題を解決します。また、役立つメッセージはデバッグを迅速に行うのに役立ちます。

エラーメッセージの例

コードが正常にコンパイルされない場合、Rust は、コード内のどこを修正する必要があるかを説明する役立つエラー メッセージを表示します。

この例では、変数num2関数inner()内で定義されています。したがって、それは関数の範囲に限定されます。関数の外でアクセスしようとすると、コンパイラはエラーをスローします。

 fn main() {
    let num1 = 10;
    fn inner(){
        let num2 = 9; 
    }
    println!("The value of num2 is: {}", num2);
}

エラー メッセージには、修正が必要なものに関する情報が表示されます。

 error[E0425]: cannot find value `num2` in this scope
 --> src/main.rs:6:42
  |
6 |     println!("The value of num2 is: {}", num2);
  |                                          ^^^^ help: a local variable with a similar name exists: `num1`

コンパイル中の警告

コンパイラは、コードの問題に関する役立つ警告も提供します。変数を定義してもプログラムの残りの部分では使用しない場合、Rust は次のような警告メッセージを表示します。

 fn main() {
    let num1 = 10;
    let num2 = 9;
    println!("The value of num1 is: {}", num1);
}

ここでは、変数num2が宣言されていますが、使用されていません。

 warning: unused variable: `num2`
 --> src/main.rs:3:9
  |
3 |     let num2 = 9;
  |         ^^^^ help: if this is intentional, prefix it with an underscore: `_num2`
  |

厳密に型指定された言語

開発プロジェクトに Rust を使用すべきもう 1 つの理由は、その型システムです。 Rust は厳密に型指定された言語であり、型強制をサポートしていません。型強制とは、言語があるデータ型の値を別のデータ型に暗黙的に変換できる場合です。

たとえば、次のコード セルの Python コードはエラーなしで実行されます。これは、Python では、ゼロ以外の数値の真理値はTrueであるため、数値 10 がブール値ではなく整数であっても、if ステートメントはエラーなしで実行されるためです。

 num1 = 10
if num1:
    num2 = 9
print(f"num2 is {num2}")

# Output: num2 is 9

一方、Rust は型を強制しません。したがって、次のコードはエラーをスローします。

 fn main() {
    let num1 = 10;
    if num1{
        let num2 = 9; 
    }
}

このエラーは、ブール値が予期されていたのに整数が見つかった、型の不一致を報告します。

 error[E0308]: mismatched types
 --> src/main.rs:3:8
  |
3 |     if num1{
  |        ^^^^ expected `bool`, found integer

メモリの安全性

メモリの安全性は、プログラマーにとって魅力的な Rust のもう 1 つの機能です。これがどのように機能するかについて、概要を説明していきます。

変数は使用前に初期化する必要がある

Rust では、すべての変数を使用する前に初期化する必要があります。 C などの言語では、 numが初期化されていない次のコードは、エラーなしでコンパイルおよび実行されます。初期化されていない変数の値は、ガベージ値です。

 #include <stdio.h>

int main(void) {
    int num;
	printf("The value of num is %d", num);
	return 0;
}
// Output: The value of num is 0

Rust で同様のことを実行しようとすると、コンパイル時エラーが発生します。したがって、Rust にはガベージ コレクションの概念がありません。

 fn main() {
    let num:i32;
    println!("The value of num is: {}",num);
}
 error[E0381]: used binding `num` isn't initialized
 --> src/main.rs:3:40
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     println!("The value of num is: {}",num);
  |                                        ^^^ `num` used here but it isn't initialized
  | 

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

Rust はコンパイル時にメモリの安全性を確保します。簡単な例を見てみましょう。ここで、 if 条件文のブール値がtrueであるにもかかわらず、つまりnumの値が常に 100 になるにもかかわらず、 numの値を出力しようとするとエラーが発生します。

 fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    println!("The value of num is: {}", num);
}

これは、条件付き評価が実行時に行われ、コンパイラはコンパイル時にnumに値があることを保証できないためです。

 error[E0381]: used binding `num` is possibly-uninitialized
 --> src/main.rs:6:41
  |
2 |     let num:i32;
  |         --- binding declared here but left uninitialized
3 |     if true{
  |        ---- if this `if` condition is `false`, `num` is not initialized
4 |         num = 100;
5 |     }
  |      - an `else` arm might be missing here, initializing `num`
6 |     println!("The value of num is: {}", num);
  |                                         ^^^ `num` used here but it is possibly-uninitialized

エラー メッセージを詳しく見てみると、else ステートメントを使用することで、 num値が確実に含まれることがわかります。したがって、次のコードはエラーなしで実行されます。この方法では、コンパイラはコンパイル時にnumに値があると判断できるため、エラーは発生しません。

 fn main() {
    let num:i32;
    if true{
        num = 100;
    }
    else{
        num = 50;
    }
    println!("The value of num is: {}", num);
}
 The value of num is: 100 

変数の不変性

Rust の変数はデフォルトで不変であることにも注意してください。これは、開発者として、特定の変数の値を誤って上書きすることを心配する必要がないことを意味します。以下に例を示します。

 fn main() {
    let num1 = 10;
    num1 = 5;
    println!("The value of num1 is: {}", num1);
}

num1は 10 に初期化されているため、値 5 を代入しようとすると、「不変変数num1に 2 回代入できません」というエラー メッセージが表示されます。

 error[E0384]: cannot assign twice to immutable variable `num1`
 --> src/main.rs:3:5
  |
2 |     let num1 = 10;
  |         ----
  |         |
  |         first assignment to `num1`
  |         help: consider making this binding mutable: `mut num1`
3 |     num1 = 5;
  |     ^^^^^^^^ cannot assign twice to immutable variable

所有権と借入

所有権によりメモリの安全性が保証されます。機能的には、Rust での所有権は次のように要約できます。

すべてのオブジェクトには唯一の所有者が必要です。所有者がスコープ外に出ると、オブジェクトは削除されます。

簡単な例を見てみましょう。ここでは、文字列str1を初期化し、その値をstr2に移動します。どのオブジェクトも所有者は 1 人だけであるため、 str1オブジェクトはその値がstr2に移動されるとすぐに削除されます。

 fn main() {
    let str1 = String::from("Rust");
    let str2 = str1;
    println!("The value of str1 is: {}", str1);
}
 error[E0382]: borrow of moved value: `str1`
 --> src/main.rs:4:42
  |
2 |     let str1 = String::from("Rust");
  |         ---- move occurs because `str1` has type `String`, which does not implement the `Copy` trait
3 |     let str2 = str1;
  |                ---- value moved here
4 |     println!("The value of str1 is: {}", str1);
  |                                          ^^^^ value borrowed here after move

これは直感的に思えるかもしれませんが、所有権がどのように機能するかをよりよく理解して理解するには、 借用と参照の概念を学ぶことが役立ちます。

迅速な開発

これまで、Rust プログラミング言語のいくつかの便利な機能について説明してきました。いくつかを確認するには:

  • Rust は速度と安全性の両方を考慮して最適化されています。
  • パッケージ管理ツールが組み込まれており、システムを構築します。
  • 豊富な標準ライブラリも備えています。

本質的に、Rust は開発者が求めるすべてを提供します。したがって、Rust を使用すると、最小限のデバッグと高速なビルドでアプリケーションを迅速に開発できます。

クロスプラットフォーム開発

迅速な開発
迅速な開発

Rust を使用すると、選択したプラットフォームで開発することを選択できます。 Rust は、Linux、MacOS、Windows といった最も一般的なプラットフォームをサポートしています。

他のビルドツールや外部コンパイラに依存せずに Rust ソースコードを実行可能ファイルにコンパイルできるため、アプリケーション開発は一般的に簡単です。

協力的なコミュニティ

サポート的なコミュニティは、学習の旅を簡素化するのに大いに役立ちます。 Rust には巨大なユーザーベースがあり、年々増加の一途をたどっています。

StackOverflow 開発者アンケートでの Rust の人気は、大規模なユーザー コミュニティがあり、多くの経験豊富な開発者が知識や専門知識を喜んで共有していることを示しています。

公式ドキュメントに加えて、ユーザー作成のドキュメント サイトやディスカッション フォーラムもあります。関連するディスカッションについては、Rust サブレディットおよび LinkedIn グループをチェックすることもできます。

Rustを始めるための学習リソース

Rustを始めるための学習リソース
Rustを始めるための学習リソース

このセクションでは、Rust を始めるのに役立ついくつかの役立つリソースをリストします。これは完全なリストではありませんが、学習の過程で役立つ推奨されるチュートリアル、コース、書籍がいくつか含まれています。

#1.例による錆び

Rust By Example では、オンライン エディターでコーディングできる一連の例を通じて、Rust の基礎と標準ライブラリを学習します。

取り上げられるトピックには、クレート、カーゴ (Rust 用のパッケージ管理ツール)、ジェネリック、トレイト、エラー処理などが含まれます。

#2.カサカサ音

Rustlings は、Rust プログラミング言語のもう 1 つの公式学習リソースです。例としては Rust に似ています。ただし、これらの概念を学ぶには、ローカル開発環境をセットアップし、サンプル リポジトリを複製し、簡単な問題を解決する必要があります。

#3.エクササイズラストトラック

さび
さび

Rust Track on Exercism には、 Rust の学習と理解をテストするのに役立つ 100 以上の演習があります。 Exercism は、演習を通じてコーディングを行うだけでなく、経験豊富なプログラマーから指導を受けることができる無料のプラットフォームです。

#4.究極のRustクラッシュコース

画像-68
画像-68

Nathan Stocks が Udemy で教えているUltimate Rust Crash コースでは、次の内容がカバーされています。

  • Rust プログラミングの基礎
  • Rustのモジュールシステム
  • データ型と制御フロー
  • 参照と借用
  • 構造体、特性、およびコレクション

#5. Ultimate Rust 2: 中間概念

画像-67
画像-67

Ultimate Rust 2 は、 Ultimate Rust Crash コースのフォローアップ コースで、次のトピックを扱います。

  • クロージャ
  • イテレータ
  • エラー処理
  • 単体テストと結合テスト
  • ロギング、マルチスレッド、チャネル

#6. Rust lang: 完全初心者ガイド 2023

画像-69
画像-69

Catalin Stefan が教えるこのUdemy コースは、 Rust プログラミングに関する包括的なコースです。取り上げられるトピックには次のようなものがあります。

  • Rustの基礎
  • データ型、制御構造
  • 機能・特徴
  • メモリ管理
  • 同時実行性

#7。 Rust のプログラミング: 高速かつ安全なシステム開発

O’Reilly の『Programming Rust』は人気のある Rust プログラミング書籍で、次のことを学びます。

  • 基本的なデータ型
  • 所有権と借入
  • 非同期プログラミング
  • 高速マルチスレッドアプリケーション
  • クロージャ、イテレータ
  • コレクション

#8. Rust プログラミング言語、第 2 版

Rust プログラミング言語は、Rust コミュニティの著名な貢献者によって作成されています。この本では、Rust について知っておくべきことをすべてカバーしています。

  • 所有権と借入
  • ジェネリック、特性
  • スマート ポインター、マルチスレッド
  • テストとエラー処理

#9.完全な Rust プログラミング リファレンス ガイド

Packt の『Complete Rust Programming Reference Guide』には次の内容が含まれています。

  • Rustでのデータ構造の実装
  • Rustで再利用可能でテスト可能なコンポーネントを作成する
  • マルチスレッドアプリケーションの設計アルゴリズム設計と
  • WebAssembly、ネットワーキング、コマンドライン アプリケーションにおける Rust のアプリケーション

#10。 Rust プログラマーのためのクリエイティブ プロジェクト

Rust を学習している経験豊富な開発者であれば、興味のある分野でいくつかのプロジェクトを構築すれば、言語を十分に理解するのに十分です。 Packt の『Creative Projects for Rust Programmers』は、次のようなプロジェクトに適用して Rust を教える本です。

  • Restful Web サービスの構築
  • 2D ゲーム
  • WebAssemblyを使ったWebアプリケーション開発
  • 機械語エミュレータ
  • もっと!

結論

この記事では、メモリの安全性、パッケージ管理の改善などの機能を含む、システム プログラミング言語としての Rust の概要を説明しました。また、Rust を使い始めて実行するのに役立つ学習リソースも列挙しました。

次のステップとして、前述の学習リソースを 1 つ以上選択して、Rust の基本を学ぶことができます。 Rust プログラミングを楽しんでください。

最高の Rust サーバー ホスティング プロバイダーをいくつか検討することもできます。

「次の開発プロジェクトに Rust を使用する 7 つの理由」についてわかりやすく解説!絶対に観るべきベスト2動画

3年過ごした家が強制退去になりました
【重大発表】世界の陰謀、グレート・リセット!