冥冥乃志

ソフトウェア開発会社でチームマネージャをしているエンジニアの雑記。アウトプットは少なめです。

follow us in feedly

Rustの勉強(その1)

とりあえず、VSCodeで開発環境作り直しましたのでね、ようやく公式チュートリアルに沿ってRustの勉強を始めてみます。

www.rust-lang.org

最初はThe Rust Programming Languageを読めと書いてあるので素直に従いましょう。それによるとRustは3つのゴールにフォーカスを当てたシステムプログラミング言語であると書かれています。

  • 安全性
  • スピード
  • 並列実行

ガベージコレクタなしにこれらを実現するとあるんですが、その仕組みはこの段階では書かれていません。おいおいわかることじゃないかと思います。

ちなみに、VSCode上でCargoプロジェクトのディレクトリは開いてるけど、プロジェクト内のファイルを一つも開いてない状態でビルドしようとすると、エラーになりました。ターミナルだと別に問題なかったので、VSCodeのプラグインはオープンしているファイルから判断しているんでしょうね。

基本的な言語仕様

チュートリアルやりながら気づいたところをメモっていきます。言葉の使い方がRustによってないのはJavaとかから入ってるんで勘弁してやってください。

関数の定義

fn main() {
  println!(“Hello, world!”);
}

main 関数は特別で、すべてのRustプログラムは main 関数から始まるとのこと。まあ、Javaな人にはいつもの話しなのであまり問題ないのではないかと。当然、上記の例は引数なしなので、引数を持つ関数での書き方はまた別途。

println!() はマクロ *1 で関数を呼ぶ場合は ! なしです。

また、行末にはセミコロンが必要です。セミコロンレスRustとかやっている人がいるかどうかは不明です。

また、上記は戻り値の型を指定していません。この場合のデフォルトは、空のtupleになるはず、と書かれてありました。

変数宣言

let ステートメントを使います。変数はデフォルトではイミュータブルなものとして扱われるっぽいです。

let hoge = “hoge”;

let mut fuga = “fuga"; // ミュータブルに宣言する場合

上記サンプルである通りコメントは // です。

ライブラリの利用と関数の利用

例えば文字列インスタンスの生成は以下のようなコードになります。

let mut guess = String::new();

Stringは文字列型の標準ライブラリ名で、可変長のUTF-8文字列です。で、この :: なんですが、他のサンプルを見るとメソッドやフィールドの呼び出しなんかが . となっているので、明確な意味の違いがあるようですね。 :associated function とあって、型そのものと紐付いているという記載があるので、クラスメソッドインスタンスメソッドの違いが今の所一番イメージに近いと言っていいのではないかと。

ライブラリの読み込み

ソース内で利用するライブラリは use ライブラリ名 で読み込みます。Javaでいう import と同じ。

use std::io

これだけ?

以下次号。

*1:マクロ自体は後で説明とある