blog.tmp.tokyo

No Promises Await at Journey's End

Rust再学習の記録(1)

序。

本業はプログラマなのでたまにはそれっぽい記事も書いておこうかと思います。仕事の内容とは全然違って趣味で勉強しているプログラミングの話です。

仕事ではJavaをメインにWebアプリケーションの開発をしていたり、それを若手に教育したりしていますが、元々はプログラマという職業に憧れてネイティブで動くC/C++などが好きで勉強していました。

一時期、仕事でもC/C++を使っていた時期があり、その頃は忙しくて毎日終電とか休日出勤ばかりだったのですが、プログラミングに没頭できていて変なマネジメントなんかは考えなくて良い立場だったので本当に毎日楽しくて仕事が充実していました。

www.blog-tmp.tokyo

そんな楽しい楽しいC/C++言語ですが、その後継とも言われるRustが近年話題です。前回記事はもう4年前です。少し勉強してコロナ禍でゲームとかにハマって今に至る(雑)のでHello, Worldを表示させるあたりで終わってますが、今回はその先へ行きます。

環境

  • MacBook Pro(2018年モノ)
  • macOS 13 Ventura

Rust環境のインストールについては上の記事参照です。作業は基本Terminalでやってます。このあたりがわからない人は別途学習してから参照してください。

ご無沙汰なので

ということですが、久々なので前にセットアップした環境もだいぶ古くなっています。まずはアップデートして最新の環境に。

$> rustup update

これで最新化できます。ちょくちょくやっていればすぐ終わるのかもしれませんが、私の場合は「超」久しぶりだったため結構時間かかりました。

[tomohiko : /Users/tomohiko]$ rustup update
info: syncing channel updates for 'stable-x86_64-apple-darwin'
732.1 KiB / 732.1 KiB (100 %) 319.7 KiB/s in  2s ETA:  0s
info: latest update on 2023-04-20, rust version 1.69.0 (84c898d65 2023-04-16)
info: downloading component 'cargo'
  4.8 MiB /   4.8 MiB (100 %) 518.4 KiB/s in 10s ETA:  0s
info: downloading component 'clippy'
  2.1 MiB /   2.1 MiB (100 %) 618.8 KiB/s in  3s ETA:  0s
info: downloading component 'rust-docs'
 13.4 MiB /  13.4 MiB (100 %) 294.4 KiB/s in 51s ETA:  0s
info: downloading component 'rust-std'
 26.3 MiB /  26.3 MiB (100 %)   1.6 MiB/s in  4m 45s ETA:  0s    
info: downloading component 'rustc'
 53.6 MiB /  53.6 MiB (100 %)   1.3 MiB/s in 47s ETA:  0s 
info: downloading component 'rustfmt'
  1.6 MiB /   1.6 MiB (100 %)   1.5 MiB/s in  1s ETA:  0s
info: removing previous version of component 'cargo'
info: removing previous version of component 'clippy'
info: removing previous version of component 'rust-docs'
info: removing previous version of component 'rust-std'
info: removing previous version of component 'rustc'
info: removing previous version of component 'rustfmt'
info: installing component 'cargo'
info: installing component 'clippy'
info: installing component 'rust-docs'
 13.4 MiB /  13.4 MiB (100 %)   5.6 MiB/s in  2s ETA:  0s
info: installing component 'rust-std'
 26.3 MiB /  26.3 MiB (100 %)  14.8 MiB/s in  1s ETA:  0s
info: installing component 'rustc'
 53.6 MiB /  53.6 MiB (100 %)  16.9 MiB/s in  3s ETA:  0s
info: installing component 'rustfmt'
info: checking for self-updates
info: downloading self-update

  stable-x86_64-apple-darwin updated - rustc 1.69.0 (84c898d65 2023-04-16) (from rustc 1.54.0 (a178d0322 2021-07-26))

info: cleaning up downloads & tmp directories

プロンプトについては PS1 の環境変数をいじってるので変更されています。その辺に興味あればLinuxとかUnixのコマンドを調べてみてください。記事の内容からは外れるので割愛します。

バージョンの確認は以下の通りです。

[tomohiko : /Users/tomohiko]$ cargo --version
cargo 1.69.0 (6e9a83356 2023-04-12)
[tomohiko : /Users/tomohiko]$ rustc --version
rustc 1.69.0 (84c898d65 2023-04-16)
[tomohiko : /Users/tomohiko]$ rustdoc --version
rustdoc 1.69.0 (84c898d65 2023-04-16)

これ実行したのは5月の末なのですが、翌日別の端末でやったら 1.70.0 でした。ちょうど次のアップデートが出る直前にやっていたようです。

プログラムを作って動かす

ということで、プログラム作ります。

[tomohiko : /Users/tomohiko/Documents/data/rust_projects]$ cargo new list21
     Created binary (application) `list21` package
[tomohiko : /Users/tomohiko/Documents/data/rust_projects]$ cd list21/
[tomohiko : /Users/tomohiko/Documents/data/rust_projects/list21]$ ls
Cargo.toml  src
[tomohiko : /Users/tomohiko/Documents/data/rust_projects/list21]$ subl src/main.rs 

簡単に解説すると、cargo new list21list21 というプロジェクトを作ります。その中にある src フォルダの中に main.rs というコードがあるので、それをエディタで開いています。

私はmacではsublimeというテキストエディタを使っており、subl コマンドはコマンドライン上からテキストを開くコマンドです。

fn main() {
    let x = 100;
    let y:i64 = 200;
    let z = x + y;
    println!("{} + {} = {}", x, y, z);
}

これを動かすのは、

[tomohiko : /Users/tomohiko/Documents/data/rust_projects/list21]$ cargo run
   Compiling list21 v0.1.0 (/Users/tomohiko/Documents/data/rust_projects/list21)
    Finished dev [unoptimized + debuginfo] target(s) in 0.43s
     Running `target/debug/list21`
100 + 200 = 300

という感じです。簡単ですね。ここまでは。

結。

今回はここまで。

前の記事と似たような感じですが、思い出すには良い内容かと思います。次回からは具体的にRustのプログラムについて自分なりに理解した内容を備忘録代わりに書いていこうと思います。

全ての内容を網羅するわけでもなく、私が勉強して気になったところを徹底的に調べてプログラムを動かして検証して書いていきます。