rustをインストールしてみた。例外がない
編集:2022.09.26
GoogleはKotlin という言語や低レベルはrustにシフトしているらしく、GoogleのGo言語は、オワコンらしいのですね。
rustもオワコン説もありますが
開発元がmozillaというのがマイナスイメージ、ダメ実装ポイ雰囲気なので長年無視していましたが、最近大手が基幹システムに採用しているということで再注目を浴びているようなので、地位が確立し当面消滅はしないだろうということで触ってみることにしました。
初見
とにかく、rustの他人のコードは読みにくい。
はぁ? っていう感じですね。変な記号だらけで 頭をグルグル ブドウ糖消費しまくって 考えないと理解不能です。
考案した人パズルが好きなのかな?意地悪い性格じゃないかな?
人が読みやすい、わかりやすい構造考えようよ
mod 普通この分野のmodは 割り算のあまり だろう、 moduleを略すなよといいたい。
fnもそう 普通に functionやfuncでいいのに。
度が過ぎる省略は逆に生産性を低下させる。
変な略しているのに、他はたらたら長文、設計思想がめちゃくちゃ。
変なとこで略すと無意識に頭で変換で脳細胞がいくつかが痛むし養分減るからからほんと勘弁だよ
phpみたいに零細企業のアプリ ハカイダーみたいなのがOSSコード破壊するのがいるので、RUSTだとレベルが一定以上必要になるので
読みにくい考える仕様にすることで結果としてバグが減ることに貢献するとは思う。
ただ度が過ぎるとみんないなくなる。
他人のコード読みにくい = メンテナンス難
気になるところは、go言語と同じく外部ライブラリだよりで、バンドルではないのでライブラリのセキュリティや将来性(アップデート)、安全性に疑問が残ります。
言語の例外を実装しないのが最近の流行り?
webで情報収集して概要はつかんだので
公式のdocを読みます
変数関係はすぐに理解できました。
その他が問題ですね。へんてこりんな記号だらけで、何がしたいのやら。
.is_ok()
.unwrap
Result値がOk列挙子なら、unwrapはOkの中身を返します。ResultがErr列挙子なら、 unwrapはpanic!マクロを呼んでくれます。
は?
そんなもの用意するなら最初から例外実装しなさいよ。
エラーで実行止めるわけないだろ。設計したやつばかか?
アプリ終了か終了おすまでエンドレスだろ普通。
rustのコードみたらunwrapだらけ
delphiだと通常 try exceptで例外起きそうな場合は全部例外封殺するので
個人的には、なくてもいいかもと思ったりもしますが
完全にないとなると気持ち悪いですね。想定外のところをスルーされると怖いですね。
というか戻り値にエラー処理強要するなら例外を実装しろといいたい。
.unwrapとか 苦し紛れに後から実装したのでしょうか?
説明書を見ながら標準ライブラリを何か普通に使おうとしたら
error[E0658]: use of unstable library feature
は? いやいや 仕様 糞すぎるでしょ
コアをフォークして自分色に染めようかと一瞬おもったくらいですよ
それはいいとして
実行ファイルがデカイ!
printしただけで 5MB。
うーん。ですね。
スタンドアロンならいいですが、webだとレスポンスに影響するので読み込みサイズは小さいに越したことはないです。
stripコマンドで少し小さくできるそうです
もやもやしますが SSDの時代なのでこれも気にしないことにします。
ということで、コンパイラをインストールして、サンプルのこんちにはを試して終了となりました。
サンプルだけなら、インストールしなくても 公式サイトのデモページで実行できます。
今のところバッファオーバーランを起こすようなアプリないですし、そういうのは、すべてC#とかdelphiとかスクリプト言語でかけば発生しませんしね。
低レベル操作やREST APIを
クロスコンパイルしたい場合は、便利かもですが、
rustの使い所が現在ないです。
WEBで使いたい場合は、
https://docs.rs/cgi/latest/cgi/
https://docs.rs/cookie/latest/cookie/
https://docs.rs/formdata/latest/formdata/
webフレームワーク を使いたい場合は
axum
actix-web
国際化は
https://docs.rs/rust-i18n/latest/rust_i18n/
や
https://docs.rs/gettext/latest/gettext/
リソース組み込む場合は、
https://docs.rs/resource/latest/resource/
このあたりを使えばサクッとかけるのではないでしょうか。
練習に小さいプロジェクトを移行するのもいいと思いますが
慣れた言語でサクッと短時間で書いたほうがストレスがなくていいですね
Hello world by rust::gettext
use std::fs::File;
use gettext::Catalog;
fn main() {
let mut catalog = Catalog::empty();
let f = File::open("src/ja.mo");
if f.is_ok() {
catalog = Catalog::parse(f.unwrap()).expect("could not parse the catalog");
}
println!("{}", catalog.gettext("Hello, world!"));
}
$ cargo run
こんにちは世界!