Rustに入門してみた その1

ふと思い立ってRustを触ってみることにした。

そこまで強い目的意識は無いが、FaaS/サーバーレス環境で起動のオーバーヘッドが少ない言語の選択肢を持っておきたいという気持ちはある。Goも使ってはいるが、いまいち肌に合わないというかフラストレーションが溜まるポイントがいくつかあるので、Rustに目を向けてみたという経緯だ。

とりあえず書籍『実践Rustプログラミング入門』の内容を一通り試すことを目標にした。正直どの本が良いか皆目分からなかったけど、手を動かすこと優先の構成は自分に合っていると思う。

www.shuwasystem.co.jp

環境構築

公式ページのコマンドでRustツールチェインを一発でインストールできる。(Mac OS)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

はじめに - Rustプログラミング言語

本に記載の通り、 cargo new でプロジェクトを作成して cargo run で実行してみる。なおcargoはRust標準のパッケージマネージャー兼ビルドツールとのこと。ビルドツールがいまいちで乗り換えもできないとその言語を使う気持ちが削がれるが、手軽さ考えると言語標準があったほうが良いとは思う。

$ cargo new hello
     Created binary (application) `hello` package
$ cd hello/
$ cargo run
   Compiling hello v0.1.0 (/~~~/hello)
    Finished dev [unoptimized + debuginfo] target(s) in 4.22s
     Running `target/debug/hello`
Hello, world!

本の指示の通りcargo-editを入れることに。cargo-editはパッケージの追加・削除・アップグレード等をコマンドで実行できるツール。

インストール時に以下の記事と同じ問題が発生したが、opensslをインストールすることで解決。 cargo-editインストール時のエラー

$ brew install openssl
$ cargo install cargo-edit
(中略)
   Installed package `cargo-edit v0.12.2` (executables `cargo-add`, `cargo-rm`, `cargo-set-version`, `cargo-upgrade`)

IDEIntelliJ IDEAにRustプラグインを入れて使うことにした。Ultimateライセンスをすでに持っているのもあるが、Language Serverを入れるのが面倒というのが大きい。(初学者なのに周辺ツールの問題でつまづきたくない)

文法(基本的な型、制御構文)

文法に関しては感想だけ。

  • Tuple, Option, ResultなどScalaとかでよく見たやつがあるのは嬉しい
  • 可変長のリストの名前がVec(ベクタ型)なのはJavaVectorを思い出してしまいちょっとだけ混乱する
  • 固定サイズの値はスタックに格納できるが、可変サイズの場合は Box 型を使って明示的にヒープに置く必要がある。文法レベルでメモリ管理と言った低レイヤのことを意識しないといけない。

今日はここまで。