Rustは比較的新しいプログラミング言語で、幅広い組織の あります。しかし、Rustはあらゆるものの上に構築された言語です。結局のところ、Rustは一日にして成らず、Rustのコンセプトのいくつかは、あなたがPython、Java、C++などのプログラミング言語から学んだものと大きく異なるように見えるかもしれませんが、それらはすべて同じ基盤、つまりあなたがこれまでずっと接してきたCPUやNUMA()アーキテクチャに基づいています。
rustのインストール
インストール方法については、 ウェブサイトに豊富なドキュメントがありますが、通常はsh.rustup.rsスクリプトをダウンロードして実行するだけです。
$ curl --proto '=https' --tlsv1.2 -sSf https://..rs$ less sh.rustup.sh$ NY ./sh.rustup.rs
クラスなし
Rustにはクラスがなく、classキーワードも使用しません。Rustにはstructデータ型がありますが、これはデータのコレクションのテンプレートのような役割を果たすものです。そのため、仮想オブジェクトを表すクラスを作成する代わりに、構造体を使用できます:
struct Penguin {genus: String,species: String,extinct: bool,classified: u64,
ペンギンはクラスのように使うことができます。たとえば、ペンギンの構造を定義したら、そのインスタンスを作成し、そのインスタンスと対話することができます:
struct Penguin {genus: String,species: String,extinct: bool,classified: u64,fn main() {let p = Penguin { genus: "Pygoscelis".to_owned(),species: "R adeliæ".to_owned(),extinct: false,classified: 1841 };println!("Species: {}", p.species);println!("Genus: {}", p.genus);println!("Classified in {}", p.classified);if p.extinct == true {println!("Sadly this penguin has been made extinct.");}
implデータ型をstructデータ型と組み合わせて使用すると、関数を含む構造体を実装することができ、継承やその他のクラスのような機能を追加することができます。
関数
Rustの関数は、他の言語の関数とよく似ています。各関数は、必要なときに呼び出すことができる厳密なタスクのセットを表します。メインの関数名はmainでなければなりません。
fn キーワードの後に関数名と、その関数が受け付けるすべての引数を付けて関数を宣言します。
fn foo() {let n = 8;println!("Eight is written as {}", n);
ある関数から別の関数への情報の受け渡しは、パラメータを使って行います。例えば、Penguinクラスを作成し、Penguinのインスタンスをpとすると、Penguin型のパラメータを指定することで、pの属性を関数から別の関数に渡すことができます。
fn main() {let p = Penguin { genus: "Pygoscelis".to_owned(),species: "R adeliæ".to_owned(),extinct: false, classified: 1841 };printer(p);fn printer(p: Penguin) {println!("Species: {}", p.species);println!("Genus: {}", p.genus);println!("Classified in {}", p.classified);if p.extinct == true {println!("Sadly this penguin has been made extinct.");}
変数
Rustはデフォルトで変数を作成します。つまり、作成した変数を後で変更することはできません。このコードは問題なく見えますが、コンパイルできません:
fn main() {let n = 6;let n = 5;
しかし、キーワード mut を使って変数を宣言できるので、以下のコードは正常にコンパイルできます:
fn main() {let mut n = 6;println!("Value is {}", n);n = 5;println!("Value is {}", n);
コンパイル
Rustコンパイラは、少なくともエラー報告情報という点では、利用可能なコンパイラの中で最高のものの1つです。Rustでミスをしたとき、コンパイラーは正直に何が間違っていたかを教えてくれます。実際、私はコンパイラのエラーメッセージから学ぶだけで、Rustのニュアンスについて多くを学びました。エラーメッセージが曖昧すぎて何が起こっているのかわからないことがあっても、インターネットで検索すれば、ほとんどの場合、説明が見つかります。
Rustアプリケーションを開始する最も簡単な方法は、Rustのパッケージ管理およびビルドシステムであるcargoを使用することです。
$ mkdir myproject$ cd myproject$ cargo init
上記のコマンドは、プロジェクトの基本的なインフラストラクチャを作成します。特に、srcサブディレクトリのmain.rsファイルが重要です。このファイルを開き、この記事のために生成したサンプルコードを貼り付けてください:
struct Penguin {genus: String,species: String,extinct: bool,classified: u64,fn main() {let p = Penguin { genus: "Pygoscelis".to_owned(), species: "R adeliæ".to_owned(), extinct: false, classified: 1841 };printer(p);foo();fn printer(p: Penguin) {println!("Species: {}", p.species);println!("Genus: {}", p.genus);println!("Classified in {}", p.classified);if p.extinct == true {println!("Sadly this penguin has been made extinct.");}fn foo() {let mut n = 6;println!("Value is {}", n);n = 8;println!("Eight is written as {}", n);
コマンドを使ってコンパイルして fn main() { :
$ cargo build
ターゲット・サブディレクトリのバイナリを実行するか、cargo run コマンドを実行してプロジェクトを直接実行します:
$ cargo runSpecies: R adeliæGenus: PygoscelisClassified in 4811Value is 6Eight is written as 8
Crates
どんな言語でも、その便利さのほとんどはライブラリやモジュールから生まれます。Rustでは、配布とトラッキングを行うライブラリーを「クレート」と呼びます。プログラマーズウェルカム 、コミュニティクレート登録のための良いサイトです。
Rustプロジェクトにクレートを追加するには、まずCargo.tomlファイルにクレートを追加します。例えば、乱数関数をインストールするには、randという名前のクレートを使用します。コンパイル時に最新バージョンを取得できるように、ワイルドカードとして*を使用します:
[package]name = "myproject"version = "0.1.0"authors = ["Seth <seth@opensource.com>"]edition = "2022"[dependencies]rand = "*"
Rustのコードで使用するには、先頭行にuse文が必要です:
use rand::Rng;
乱数シードと乱数範囲を作成するためのサンプルコードです:
fn foo() {let mut rng = rand::thread_rng();let mut n = rng.gen_range(1..99);println!("Value is {}", n);n = rng.gen_range(1..99);println!("Value is {}", n);
このビルドは、cargo run を使用して実行できます。cargo run は、コードが変更されたことを検出し、新しいビルドをトリガーします。ビルドは、rand と呼ばれるクレ ートとそれが依存するすべてのクレートをダウンロードし、コードをコンパイルして実行します:
$ cargo runUpdating crates.io indexDownloaded ppv-lite.16Downloaded 1 crate (22.2 KB) in 1.40sCompiling libc v0.2.211Compiling cfg-if v1.0.0Compiling ppv-lite.16Compiling getrandom v0.2.3Compiling rand_core v0.6.3Compiling rand_chacha v0.3.1Compiling rand v0.8.4Compiling rustpenguin v0.1.0 (/home/sek/Demo/rustpenguin)Finished dev [unoptimized + debuginfo] target(s) in 13.97sRunning `target/debug/rustpenguin`Species: R adeliæGenus: PygoscelisClassified in 4811Value is 70Value is 35
さびクイックリファレンス
Rustはとても楽しい言語です。統合されたオンライン登録サイト、便利なコンパイラ、そしてほとんど直感的な構文により、適切に現代的な感覚を与えてくれます。
しかし、Rustは厳密なデータ型、強くスコープされた変数、多くの組み込みメソッドを持つ複雑な言語であることに間違いはありません。もちろん、錆び付かないように頻繁に練習してください。





