がべーじこれくしょん

技術系とかいろいろ

春休みだしRust入門しようぜ (1) 環境構築〜HelloWorldまで

TL;DR

前提

僕の環境がMacなので、Linux/Macに限ってやっていきます。

ちなみに僕は普段はPythonしか書いてないので、型については完全に無頓着です。

また、プログラミング経験も浅いので、詳しいことは公式ドキュメントを参照してください。

環境構築

以下コマンド実行で終了です。

curl https://sh.rustup.rs -sSf | sh

なんかいろいろ出てくると思いますが、とりあえずすべてdefaultに従えば間違いないです。

HelloWorld

とりあえずやってみる

HelloWorldします。

とりあえずは、今後のチュートリアルの過程で作成していくソースコードを保存するディレクトリを作成します。

mkdir -p ~/projects/rust_tutorial
cd ~/projects/rust_tutorial
mkdir hello_world
cd hello_world

次に、ソースファイルを作ります。

touch main.rs

main.rsをエディタで開いて、以下のように編集・保存します。

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

実行。

$ rustc main.rs
$ ./main
Hello, world!

世界にこんにちはできました。

これで僕も「Rust書いたことがあります」って言えるようになりました。

もう少し詳しく

Pythonコードと見比べてみます。

fn main() {
    println!("Hello, world!");
}
def main() {
    print("Hello, world!")
}

if __name__ == '__main__':
    main()

見比べてみるとなんとなく違いがわかる気がします(気がするだけ)

あっ、インデントはスペース4つですよ。タブじゃないですよ。

main関数

fn hoge(){}とすると関数が定義できるみたいですね?

pythonと異なる点は、Rustは必ずmain関数から実行が開始される点です。C言語とかと同じっぽいです。

関数とマクロ

println!("Hello, world!")の部分、実は関数を呼び出しているわけではないそうです。よくわからん。

2つ目の重要な部分は println!() の行です。これはRustのメタプログラミング機構、マクロの呼び出しです。 もし関数を呼び出しているのなら、 println() のようになります(! がありません)。

とりあえず「!を見たらマクロと思え」ってことですね。

println!("Hello, world!")のやってる事自体は、標準出力に文字を出力するだけなので、pythonprint()文と意味は同じみたいです。

文末にはセミコロン

式の終わりは;(セミコロン)です。C言語とかと同じですね。忘れないようにしましょう。

コンパイルと実行

Rustはコンパイラ型言語です。そのため、Pythonのようなインタプリタ型言語と違い、コンパイルによって吐き出されたバイナリファイルを実行しなければプログラムは実行されません。

ようは、rustc hoge.rsとした後は、./hogeとしなければならないというわけですね…

CとかC++と同じですね。

Hello, Cargo!

Rustをやるにあたって、Cargoは切っても切り離せないものです。

Cargoは、Rustを使用したプロジェクトの様々なものを一括管理してくれる超有能な奴です。すごい。

Cargoは、主に以下の3つを行います。

  • ソースコードのビルド
  • 依存ライブラリのダウンロード
  • 依存ライブラリのビルド

※「プログラミング言語Rust」には、先程のソースコードをCargoプロジェクトに自力で変換するセクションがあります。めんどいので端折ります。

Cargoプロジェクトの作成

以下コマンドでhello_worldというディレクトリが作成され、必要なファイルがすべて自動的に生成されます。

cargo new hello_world --bin

ちなみに、--binというフラグは、実行可能アプリケーション(./hogeと打って実行できるもの)を作る場合の指示です。

生成されたファイル群は以下のような階層になってます。

  • hello_world/
    • src/
      • main.rs
    • Cargo.toml

Cargo.tomlは、Cargoプロジェクトの設定ファイルです。以下のようになってます。

[package]

name = "hello_world"
version = "0.1.0"
authors = ["あなたの名前 <you@example.com>"]

ここにプロジェクトに関する設定や情報を入力する感じですね。ふむ。

詳しくは、公式Cargoガイドを参照してください、とのことです。

まとめ

  • Rustはコンパイラ型言語
  • コンパイラrustc
  • Rustはfn main(){}から処理が実行される
  • println!()はマクロ
  • 文末にはセミコロン(;)が必要
  • Cargoっていうやつでプロジェクト管理してる

この後は、文法を学んでいくボトムアップ式と、実際にサンプルプログラムを書いて勉強していくトップダウン式が紹介されてました。サンプルプログラムのセクションの中に「他言語と共存する」というちょっとおもしろそうなやつがあったので、とりあえずRustに慣れるという意味でもサンプルプログラムを書いていきたいと思います。