Rust Part7
■ このスレッドは過去ログ倉庫に格納されています
お前らってRust使って何作ってんの?それともただの言語マニア? jsで15分でできるようなものを3時間かけて作るバカ >>625
三時間ならマシ
コンパイラと格闘して一日つぶれるとかザラ 開発サイクルが遅くなってデメリットが上回る
仕事で使うアホはいないと思う wasmて
ウェブブラウザアプリでRust的な安全性ガッツリ必要なことあるの? てかメモリ安全なスクリプト言語さえまともに使えないやつに限ってrustとか騒いでんだよね。。
バカバカしい。。 コンパイラより自分の腕を信じるって…
やっぱりジャップにはかなわねえや てか で始める
限って によるガバガバなレッテル貼り
クソバカ Cなら3で済みことを馬鹿に合わせてRustで20かけて作ることの意味があるのかどうかが問題だ イニシャルコストだけ論じても意味ないしょ
作って終わりの製品もあるのは確かだだけど >>641
ランニングコストも同じだよ
何をするにもコンパイラの機嫌伺いから入る必要があるんだから そんなこと言うなよ
コンパイラちゃんはどこが悪いかいつも教えてくれてるんだぞ
コンパイラちゃんの気持ちも考えろよ Item1とItem2で同じ構造しててそれぞれに似たような処理をしているのにItem2にだけCloneつけろとエラー出るんですが
理由がわかりません
エラーが出るコード
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=39e9b4899374d1aca90c64836d71c161
Item2にだけCloneつけて動くコード
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=568c3f827c59a417f8d1c0f91b6bc9e4 >>645
vec!マクロで要素数指定する形はその型がClone実装してないとだめ
Item1も要素数指定すればCloneを要求される
let mut vs = vec![Item1 {a: 0, b: 0};10]; >>646
説明ありがとうございます
理解しました! >>643
そんな短絡的なことを言っているんじゃないよ コンパイラがやかましければプログラムの質が上がるっていう
短絡的なこと言ってるのはどっちだか 安全な言語を開発するようメーカーの方に心がけていただき、
kidsが安心してプログラムできるような、コンパイルできるような世の中になってほしい。 「Rust言語」をWindowsプロジェクトに適用してみた、Microsoftの事例
https://www.atmarkit.co.jp/ait/articles/1911/12/news050.html
欲しい機能がまだまだある、Rustコミュニティーとも協調
Rustは比較的歴史が浅いため、Microsoft社内の開発に使うことを考えると、よく使う言語機能であっても欠けているものがあるという。
その最たるものは、安全な変換(“プレーンな古いデータ”型をrawバイトと間で相互に安全にキャストする)やCスタイルの共用体の安全なサポート、誤りを許容する割り当て(割り当ての失敗でパニックに陥らず、所定の手順で停止する)だ。
Cargoには優れた単体テスト機能が組み込まれているため、開発者が本番コードと同じファイルにユニットテストを記述して、開発中に簡単に実行することができる。だが、Microsoft社内の大規模で複雑なビルドシステムでは、Cargoをビルドツールとして利用できない。
そこでCargoチームとの間で、複雑なビルドシステムを持つ大企業がCargoを利用できるようにするための話し合いを開始している。 「誤りを許容する割り当て」ってなんだ?
malloc失敗した時になんか処理したいって話? >>652
fallible allocation (fail gracefully from allocation failure, rather than panic).
https://msrc-blog.microsoft.com/2019/11/07/using-rust-in-windows/ >>649
そんな短絡的なことを言っているんじゃないよ 口で説明できないことは
大体は説明するとすごくろくでもないことだ おまえが理解してると信じ込んでるものが真実だという保証は一切ない 欠点を論うだけの雑魚に対し、フィードバックして改善しようとするMS様は立派だな
現場でも文句ばかり垂れてるお爺さんいるよな 何にも言わないで偉そうにしてるだけのやつが言うセリフじゃねえええええええ > 何にも言わないで偉そうにしてるだけ
なぜバレた!? MSはCargoでどういう場合困るんだろ
小さいものしか作ったことないし技術力も低いからわからない… GoogleのBazelみたいな分散環境でスケールする独自のビルドシステムを持ってるから
cargo testとかやった時にcargoのインクリメンタルビルドの仕組みじゃなく
自分たちの仕組みと連携させたいってことなんじゃないかと >>651
「使ってみたけどやっぱダメだったわ」をオブラート10枚くらいに包んだ
奥ゆかしい日本語の記事って感じだな Copyトレイトはプリミティブ型のように値としてコピーされるのが自然な型に付ける
コピーされるのは自然でない型でコピーをしたい場合にCloneトレイトでコピーを行なってると明示できるclone()メソッドを使ってコピーする あっちの企業って大企業でもOSSプロジェクトが使えると判断されたら支援もするけど日本じゃさっぱりだよな >>665
ほとんど英語記事の翻訳なんだが日本語訳された結果も
配慮してくれるなんてすごいな〜 近いうちにマイクロソフトはMustを発表するんだろ >>666
せめてCopyトレイトのドキュメントぐらい嫁や 確かにマイクロソフトならこのくらいの言語なら勝手に作りそうではあるな。
そもそもの実装系がカスだし。 MSがネイティブでゼロオーバーヘッドのF#を出したら用済みだね D言語のdebugブロックみたいなデバッグビルド時のみ有効になるコードブロックってRustにあります? &strに含まれる各文字のUTF-8のバイナリ表現を
文字単位でprintしたいんだけどもう少し簡単な方法ない?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=95162e453b679ff50c779695e9b545bf
&strをchars()でイテレートすると
char.encode_utf8でUTF8に戻するのがなんとも気持ち悪い >>681
char_indicesでイテレートすればposと(char.len_utf8で)lenが取れるから、それで元のスライスにアクセスする、とかかな。
そんなに短くはならないけど、bufferはいらなくなるはず。 >>682
なるほど
このやり方のほうが素直な気がするね
とりあえずありがとう
let baz = "aあ🦀";
for (pos, char) in baz.char_indices(){
println!("¥n{}:", char);
for byte in baz[pos..pos + char.len_utf8()].bytes() {
println!("{:b}", byte);
}
} rustも32bitのwindows向けのメンテやサポートは終了が確定してるよね… 2次元配列から最大値を有するデータ(with index)を取り出したいとき
イテレータのmax_by等を二段がけにするのと
従来プログラミング言語のように二重のforループで取り出すのと
どっちがおすすめ? forでやるとmutな変数の更新を自分でやることになるから安全性が落ちる
更新ミスによるデバッグコストのリスクがある 変なやり方するより自然なfor使った方が
結局は可読性によって安全性やデバッグコスト低下になる。 こういうお爺ちゃんはほんと迷惑
長いというだけで関数に切り出したりするし テストが書きやすい単位で分ければそう長くもならんだろ テストが書きやすい単位で分ければそう長くもならんだろ 組み込みのCだとアセンブラを意識して減算カウンタでdo...while使ったりするけど
PCでそれはないな。イテレータが使える状況なら使ったほうが安全だし >>689
いや長いならキリ出せよバカ。
こういうバカが一番迷惑。 関数切り出しがダメなのかRustでは
おじいちゃん驚きだわ
理由を何なの?
シャドウイングあるからとか? 競プロで見かける色んな人のコードでは
forループのほうが自然なとこを無理矢理イテレータのメソッドチェーンにしてたり、その逆があったり 読みやすさが犠牲にならない範囲で短く書けるってことはよいことだけど
高階関数とかクロージャがまざるとトレースがめんどいのは確かだよね
デバッグ時にいらいらする >>685
1. 2重forループ
2. forループ + max系
3. fold + max系
の3択になると思うんだけど並列化も考えるような処理なら3がいい
そこまでの処理じゃないならメソッド抽出してテストを書いとけば中身はどれでもいいと思う >>696
長いだけで切り出すメリットがない
>>697
スコープが広くなるからだよ 関数切り出しでスコープが広くなるとか、プログラミング言語として致命的な欠陥だろ 切り出すと特定の関数から一度しか呼ばれない関数がででるから、
それが無意味というか、むしろ関数のシンボルが増えるし
上から下に連続的にソースコード読めなくなるしでダメだと言っているのだろう
でもそれってRust以外の言語でも同様の話であって、なぜそれでもなぜ切り出すべきかは語りつくされてる
それでもRust固有の事情で反論があるなら書いてくれ scanとかinspect使う処理はforの方が読みやすいこと多いように思う >>705
全くあなたの言う通り、そしてRust固有の話ではない >>705
関数切るとその分だけ借用とか生存期間とかの問題が増えるんよ
関数跨いだ変数の扱いが非直感的すぎる
関数に分けるとコンパイル通らなくなる事例が多すぎるから
関数分けないモチベに繋がる 行儀の良くないプログラミングスタイルが
コンパイラに怒られてるだけに聞こえるなあ
例出してよ >>707
長い関数書いてるかうちは半人前
うちのプロジェクトなら即リジェクト
深いネストもリジェクト まあバカにrust使わせるとどうなるかってことがよくわかる事例だな。 グローバルな型推論が無いのと型シグネチャが人に全然優しくないことに起因する、関数大きくなりがち問題はRust特有ですよ
最初から完成形があるわけでもないのに試行錯誤のコストを無視しちゃ駄目だ >>708と>>712でピンと来ないならRustエアプ 確かにimpl traitなかった頃のクロージャ返しとか、asyncなかった頃のFuture返しとかは煩雑だったけど
現時点でそんな大変な型シグネチャってあるか? >>708
> 関数に分けるとコンパイル通らなくなる事例が多すぎるから
悲しいけどわかるw ■ このスレッドは過去ログ倉庫に格納されています