Rust Kansai Meetup Osaka #2 に 参加しているので感想を書いていきます 参加したので感想を書きました
Rustで学ぶHaskell
actix-webが死んだ…作者が疲れたらしい→https://github.com/actix/actix-web
Haskellは1年前くらいに書籍を読んだけど、崇高すぎて諦めた。
WikipediaいわくRustはHaskellに影響されているらしい
RustとHaskellでの型はi32とかも含めほとんど同じ
Genericsもパターンマッチングもほぼ同じ
Rustでいうenumは、Haskellの場合メイビーモナドというものがあって書き方が結構違う
RustでいうトレイトはHaskellでは型クラス。根本的な違いがあるが両者が相互作用するために見た目は似ているらしい
Rustを関数型言語というかどうかと言う話が出たけど、確かに関数型言語かどうかの基準自体は結構緩そう
計算機科学において、第一級関数(だいいっきゅうかんすう、英: first-class function、ファーストクラスファンクション)[1]とは、関数を第一級オブジェクトとして扱うことのできるプログラミング言語の性質、またはそのような関数のことである。その場合その関数は、型のある言語では function type(en:Function type)などと呼ばれる型を持ち、またその値は関数オブジェクトなどになる。具体的にはプログラムの実行時に生成され、データ構造に含めることができ、他の関数の引数として渡したり、戻り値として返したりすることのできる関数をいう。この概念はメタプログラミングとは異なり、コンパイラ呼び出しやeval関数によって生成された関数は含まれない。無名関数も参照。 https://ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E9%96%A2%E6%95%B0
思ったこと・調べたこと
actix-webは社内ツールで一度使ったことがあって結構便利だったなぁと思っていたので悲しい 😭
Haskellは遅延評価・GC があるのでそこが決定的に違いそう。
HaskellのGC(正確にはGHCのGC?)は従来のGCよりとても簡素。デフォルトで世代別GCを使うらしい。
メイビーモナドをWikiで調べてみたけど、RustでいうOption型に近い?
data Maybe t = Just t | Nothing
rustlingsとevcxrでRustを学ぶ
rustlings
https://github.com/rust-lang/rustlings
Rustについて学習できるリポジトリ↑
コマンドラインツールのrustlingsを使って、未完成のrustファイルを正しく動くように修正していき、学習するサービス
rustlings watch
で変更を検知して再コンパイルしてくれてる
evcxr
https://github.com/google/evcxr
Rustを対話的に実行できるツール。
どうやってやってるか、読んだけど仕組みはよくわからない。 https://qnighy.hatenablog.com/entry/2018/09/29/190000
あまりREPLでやる機会がなかったけどみなさんはPlayGroundを使うことが多いらしい
思ったこと・調べたこと
rustlingsを試してみた。
✅ Successfully compiled exercises/variables/variables1.rs!
🎉 🎉 The code is compiling! 🎉 🎉
You can keep working on this exercise,
or jump into the next one by removing the `I AM NOT DONE` comment:
7 | // feel ready for the next exercise, remove the `I AM NOT DONE` comment below.
8 |
9 | // I AM NOT DONE
10 |
11 | fn main() {
終わったら // I AM NOT DONE
をコメントアウトしていくらしい
rustlings
急遽 rustlingsをみんなで同時に行うイベントが始まりましたw。
結果、僕は1時間で exercises/test4.rs までクリアしました。その後日も進めて今はstandard_library_typesまでクリアしました。
僕の解答はこちらにpushしています
macroとmoduleを今まで避けてきたためググりまくる羽目になった、が、macroも仕組みはただのパターンパッチングみたい。完全に理解した()
以下、勉強になった問題
exercises/test2.rs
"nice weather".into()
は推論してくれるらしい。なぜ??
string_slice("blue");
string("red".to_string());
string(String::from("hi"));
string("rust is fun!".to_owned());
// intoはStringも&strも通る。
string("nice weather".into());
string(format!("Interpolation {}", "Station"));
string_slice(&String::from("abc")[0..1]);
string_slice(" hello there ".trim());
string("Happy Monday!".to_string().replace("Mon", "Tues"));
string("mY sHiFt KeY iS sTiCkY".to_lowercase());
exercises/enums/enums3.rs
パターンマッチングの問題。 Message::Move{x, y}
の場合だけ {..}
と書くのにハマった。エラー内容に書いてあったからきちんとエラーは読まないといけない(戒め
match message {
Message::ChangeColor(x, y, z) => {
self.change_color((x, y, z));
},
Message::Move{x, y} => {
let position = Point {
x: x,
y: y
};
self.move_position(position);
},
Message::Quit => self.quit(),
_ => println!("#")
};