yak shaving life

遠回りこそが最短の道

Rust勉強にっき(1)

前回のは(0)ということで(1)から始めることにした。やっぱ数字は0から始めないとね。

というわけで Rust The Programming Language 通称 the book のChapter 1, 2をやって、Chapter 3の途中で終わった。進み遅っ。2章のハンズオンが楽しいし分かりやすいしプログラムを少しずつ作って進化させていく過程を初心者に教えるのにいいんじゃないかと思った。あまりの出来のよさに感動してしまい、全てのプログラミング言語がこのChapter 2のクローンを作れば全初心者が幸せになれるのでは…!?などと思ったり、早速Rubyバージョンを書いてみたりしていた。結果的には多少アレンジが必要そうなので途中で保留中。

そんなこんなでChapter 3を終わらせられなかった。くそう。何となく基本中の基本は分かった気がするけど。GWのうちになるべく進めたい。

例によってDiscordのコピーをペースト俗にいうコピペをしておく。意味あんのかなこれ。Twitterで連ツイとかにしとけば見やすいんだろうけど、いちいちツイートするのは正直面倒。。まあいいか。

朝Rustしよ
Hello Cargoする。.tomlってなんだ?みたことない
cargo newで勝手にgitの設定されるのか。
crate:果物・ガラス器具・家具などの運送・荷造りに用いる)わく箱,竹かご
Cargo.lockとかもあるしGemは本当偉大だな。Gemが発祥なのかどうか知らないけど。
cargo runはgo runと同じ感じか
ソースに変更がなければ再コンパイルしない。賢い
Hackmdのコードブロックがrustに対応していた
素晴らしい
intricate:(構造・模様など)こみ入った / 分かりにくい
やっとChapter 1が終わった。Chapter 2はハンズオンらしいので楽しみ
Vimで書いてたけど良い加減IDE使うか。とりあえずVSCodeかな
RustとBetter TOMLという拡張を入れた
VSCodeってauto saveの設定できるのか。知らなかった。もっと早くやっておけばよかった
std::preludeってなんかかっこいいな。名前が。プレリュード
変数はdefaultでimmutable!最高!
growableってどういう意味だろう?
 String is a string type provided by the standard library that is a growable, UTF-8 encoded bit of text.
static method呼び出しは:: ね。言語によってまちまちだからいつも忘れる。Javaで:: とかやると悲惨
& は参照。今のところC言語ファミリーっぽい記法だ
参照もデフォでimmutableなので、&hoge をmutableにするには &mut hoge
io::Result がErr の時、そのままクラッシュさせたければ expect() を使うっていうのがなんとなくわかりにくい気がするのは気のせいだろか。expectというメソッド名微妙では…?exitっぽい気がする
crab pincers:カニのハサミ
時間切れー

諸事情により再開
rand crateはlibcに依存してるのね。Cに依存ってのはこういうことか
Crates.io はRubyGems.orgとかMavenCentralとかnpmみたいなやつだな。多分
cargo doc, 便利だしおしゃれだしイケてる感あるなこれ
この2章まじで今まで見たチュートリアルの中でも最高クラスに最高だな…
タスクばらしとインクリメンタルな開発のお手本中のお手本という感じだし。プログラミング自体の入門にも良さそう。2章の丸コピRuby版でも作ろうかな
あーでも静的型付けじゃないと内容が結構変わってしまいそうだな。うーむ

integerのデフォルトは32bit。ふぅん
Chapter 2が終わった。素晴らしかった。
Ruby版の作成はまた後日。。
Chapter 3は変数、データ型、関数、コメント、制御フロー
rustc --explain E0384 でなんか色々教えてくれるの面白いな
そういやJSとかSwiftとかRustとか変数の宣言にlet を使うのってなんでだろ、letってどういう意味?と思って調べたらすぐ答え出てきた。インターネットすごい
http://piyopiyo-singapore.hatenadiary.jp/entry/2016/07/03/Swift_%E3%81%AE%E5%AE%9A%E6%95%B0_let_%E3%81%A3%E3%81%A6%E3%81%AA%E3%82%93%E3%81%A6%E4%BD%95%E3%81%AE%E7%95%A5%E8%AA%9E%EF%BC%9F
Lispなんだなー。いやBASICなのか。どっちもわからんけど。
Goはvar を選択したけど、Rustはlet を選んだ。ES6とSwiftのどっちが先にlet を使い始めたのか知らないけど、このどちらかがRustに影響を与えてるのは間違いない気がするな。いや知らんけど
Goはvar を省略できるけどRustは let を省略できないっぽい。
Goで省略できるのは初期化を伴うときだけだっけか。Goもまともにやってないからもう忘れた。
あーletがあるから再代入とshadowingを区別できるんだー。なるほどなあ
mutable variableは型を変えられないけどshadowingなら型も変えられる
two's complementって何かと思ったら2の補数か
お、float/doubleじゃなくてf32 , f64 なのね。わかりやすい良かった良かった
doubleってなんやねんっていう、ね
charはシングルクオート、stringはダブルクオート。javaと同じか