Rust Part7

■ このスレッドは過去ログ倉庫に格納されています
2019/07/14(日) 23:31:47.54ID:PySyhRf9
Mozilla発のRust言語のスレ

公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

Web上の実行環境
https://play.rust-lang.org

前スレ
Rust Part6
http://mevius.5ch.net/test/read.cgi/tech/1532714678/
507デフォルトの名無しさん
垢版 |
2019/10/20(日) 13:14:08.41ID:Df2Q09El
issueってバグじゃないだろ。
機能要望とか議論とかあるじゃん。
2019/10/20(日) 23:15:26.37ID:ADDbXmaX
小さめのサイズの本で、初心者向けの本が出た!

Rustプログラミング入門、酒井 和哉、2019/10/13
2019/10/20(日) 23:22:23.45ID:ADDbXmaX
>>506
バグ発生率は、バスタブ曲線だろ。
初期によくバグる

土方をやってると、バグを多く出さないと、客に提出できないw

漏れは、平均的なIQ レベルより、間違いが少ないから、
いつも、アホみたいなバグを、わざと自分で作って、バグ発生数を増やしていたw

あらかじめ勉強している人は、滅多に間違わないから、バグ発生数基準だと困るw
一方、全く勉強していない香具師は、バグが多い
2019/10/21(月) 03:46:22.99ID:15XQsNX7
俺は世界で一番この本を待ってた!!!!!
511デフォルトの名無しさん
垢版 |
2019/10/21(月) 13:21:09.04ID:c9dhXgWB
仕様書にバグが多いのはあれわざと仕込んでるのかなるほど
2019/10/22(火) 20:56:02.71ID:pBzGAt4J
ネストした構造体のコンストラクトパターンみたいなやつはもっとチュートリアルで
説明した方がいいんでないのとは思う。
多分めんどくさい書き方にしかならんからやらんのだろうけれど。
2019/10/23(水) 15:46:33.91ID:/ejQejyx
?の便利さに感動している
2019/10/23(水) 16:06:56.63ID:77J5IX+m
え、なに?
文字化けしてますよ
2019/10/23(水) 17:55:49.61ID:GdFoVnvN
三項演算子は便利だったなぁ、と他言語を思い出して感動してるってことかな
2019/10/23(水) 18:12:17.77ID:AT7YtDx+
普通にResultの話じゃなくて?
2019/10/23(水) 20:07:35.94ID:r6mLYpNF
組み込みもネットワークツールもほとんどc以上の生産性を出すことないしな。。
一番有効な領域ってデバッガーじゃねーの?とは思う。
2019/10/23(水) 20:47:39.59ID:/ejQejyx
Bookを6章まで読んだ俺が >>224 で書いたのが

https://play.rust-lang.org/?version=stable&;mode=debug&edition=2018&gist=dc60559b7af47298d305be80b340ee98

?の便利さに気づいた俺が書いたのが

https://play.rust-lang.org/?version=stable&;mode=debug&edition=2018&gist=308e7fe634f1e539c1f936c3989022f0
2019/10/23(水) 21:06:25.79ID:5Hzic27k
.file_name()?.to_str()?.to_string()
Rustだっさ
2019/10/23(水) 21:12:36.43ID:s8yqv2t4
公式に呼びやすい名前をつけないのがよくない
question mark operatorじゃわかりにくいから
error propagating operatorかerror handling operatorで
2019/10/23(水) 21:26:40.40ID:AT7YtDx+
ダサいかどうかとかどうでもよすぎる
性能、書きやすさ、読みやすさ、安全性がすべて
2019/10/23(水) 21:31:02.23ID:5Hzic27k
性能 境界チェックのせいでだいぶおそい
書きやすさ 地獄
読みやすさ 悪夢
安全性 噂ではあるらしい

?まみれになるぐらいだったらヌルポで落ちても変わらんやん
どうせ無理に回復とかしないほうがいい類のだろ
2019/10/23(水) 22:05:27.50ID:B/jcGWye
ぬるぽで落ちるのは運が良かっただけで何でも起きうるし最悪スーパーハカーの餌食になる
?はちゃんとエラーで終了してくれる


って理解でおk?
524デフォルトの名無しさん
垢版 |
2019/10/23(水) 22:31:31.88ID:xt74prfP
ヌルポって、javaのあれのこと?
シンタックスだけ比較して意味あんのかな
2019/10/23(水) 23:02:51.06ID:5Hzic27k
>>523
ちがう
ぬるぽだとまず間違いなくぬるぽエラーで落ちる

NullSafeのありがたさはnullにならないこと
場合分けを考えずに常に変数を確実なひとつの値として扱える
2019/10/23(水) 23:10:47.86ID:5Hzic27k
モナドだろうがなんだろうがNullはNullだ
へたに回復してしまうとほかに影響が波及して大惨事につながりやすい
むしろ最初からNullにならないことを保証してくれる方がうれしい


なのになんでOKで帰ってきた結果からfileNaeme取るのまで?つけさせられとんじゃ
2019/10/24(木) 00:25:03.31ID:M5uvwdA8
まあNULLで潔く死んでくれた方がってのは確かにあるわな。
2019/10/24(木) 00:39:21.69ID:1+d2lllL
エラーかどうかのチェックは、NULLかどうかのチェックとは違う
ここ大事なところなので間違えちゃダメ
2019/10/24(木) 01:03:58.72ID:LM2wjPr+
潔く死んで欲しいなら明示的にunwrapなりexceptなりすればよい
バグなのか想定されたエラーなのかを区別して明示的にコーディングできるのがrustの利点では
2019/10/24(木) 05:35:47.09ID:nklp1qoa
OptionとかResultにケチつけてるのは加齢臭キツすぎる
531デフォルトの名無しさん
垢版 |
2019/10/24(木) 06:50:04.06ID:G12eboer
下手に回復して大惨事になるのは、下手だからでしょ

file_nameに?付けてるのはディレクトリの場合無いからでしょ
なんでそんなことが疑問になるのか分からない
2019/10/24(木) 09:03:26.66ID:M5uvwdA8
Optionとか中途半端でたちわりーわ。
てかrustみたいにライフタイム意識する言語の場合、あんまり役割ない気がするけどね。
2019/10/24(木) 12:28:38.87ID:8vd5prrh
メソッドチェーンの中で「owned -> borrowed -> owned」するのはアンチパターンだと思うんだよね
不必要な処理が入るし可読性も下がるのでいいことない

fn main() -> Result<(), std::io::Error> {
let path = std::env::current_exe()?;
let file = path.file_name().unwrap();
println!("{:?}", file);
Ok(())
}
2019/10/24(木) 12:51:50.95ID:1+d2lllL
そもそものお題がこちら

>187 デフォルトの名無しさん2019/08/26(月) 20:55:57.18 ID:hNXwMePN >>206>>214>>224
https://play.rust-lang.org/?version=stable&;mode=debug&edition=2018&gist=8c44bed658726ada0deff031799664b7
>1. std::env::current_exe()で実行ファイルのフルパスを得る
>2. file_name()でファイル名だけにする
>3. to_str()で&strにする
>4. 途中でErrやNoneが返ってきた場合はデフォルトの値"foo"を使う

>ということをやりたいのですが、エラーでビルドできません。
>どのように書けばいいでしょうか?
2019/10/24(木) 20:32:12.47ID:8vd5prrh
>>534
お題があったのね
referenceを受け取ってreferenceを返す関数に抽出すればto_ownedやto_stringは不要

use std::path::PathBuf;

fn main() {
let path = std::env::current_exe().ok();
let file = file_name(path.as_ref()).unwrap_or("foo");
println!("{}", file);
}

fn file_name(path: Option<&PathBuf>) -> Option<&str> {
path?.file_name()?.to_str()
}
2019/10/24(木) 21:22:39.45ID:1+d2lllL
勉強になりました

let file = {|| Some(path.as_ref()?.file_name()?.to_str()?)}()
.unwrap_or("foo");

でも動くようですけど関数に抽出した方が良いですか?
2019/10/24(木) 21:41:02.37ID:7Zw0jZ/m
それ関数作って呼んでるのとほぼ同じだし名前がついてるかどうかの違いだから好きにせえ
2019/10/24(木) 21:55:47.24ID:8vd5prrh
Someで囲ったOptionalチェーンを返すクロージャってのが
Rustのイディオムとして認知されて来ればそういうやり方も有りかもだけど
俺は関数に抽出したほうが型が見えて読みやすいので良いんじゃないかと思う
2019/10/24(木) 22:25:03.94ID:LM2wjPr+
try blockを待て
2019/10/25(金) 20:57:15.75ID:ZeSKDyBG
これまではto_string()がチェーン末尾だったからSomeに入れてたけど
末尾がto_str()になってOption返すから必要なかった

let file = {|| path.as_ref()?.file_name()?.to_str()}().unwrap_or("foo");

なぜ昨日は気が付かなかったんだろう……
541デフォルトの名無しさん
垢版 |
2019/10/25(金) 21:01:12.42ID:d+xtEa5D
try block
ずっと待ってるあなたのことを
意味もなくクロージャで囲む日々
2019/10/25(金) 21:29:24.66ID:JK+efETy
モナド早くきてくれー
2019/10/25(金) 21:51:56.35ID:AfveIyxL
モナドられると、ややこしい人が顔出してくるんでノーセンキュー
2019/10/26(土) 06:18:18.43ID:ajDsHp6T
関数型信者がうるさくなった言語は衰退する
545デフォルトの名無しさん
垢版 |
2019/10/26(土) 09:43:29.54ID:eCInqrX9
関数型ことごとくすたれてない?
2019/10/26(土) 10:13:18.36ID:ERKSSgX1
モナド(高階型)来てもいいんじゃない?OptionとResultで同じようなことやってるし
2019/10/26(土) 13:48:16.66ID:3B/2CauT
オプショナルチェーンを矛盾なく繋げるモナドが入れば覇権だと思う
正直それだけできれば小難しい理論はいらないし
2019/10/26(土) 14:36:55.83ID:SyjizfQh
チェーンは滅んでほしい
2019/10/26(土) 14:53:14.83ID:z1scFH36
チェーンってひとくくりにするなよ。メソッドチェーンは糞だが。
550デフォルトの名無しさん
垢版 |
2019/10/26(土) 15:11:41.74ID:eCInqrX9
チェーン評価ってのも聞いたことがあるな
2019/10/26(土) 16:45:06.90ID:ZMkO6rZZ
>>547
矛盾ってのがよくわからないんだけど
今のオプショナルチェーンだと何が問題なの?
552デフォルトの名無しさん
垢版 |
2019/10/26(土) 19:08:07.88ID:2tVQRscY
この板で否定的な言い分を魔に受けないほうがいい
冗談で言ってるか、冗談みたいな馬鹿の言い分だから
553デフォルトの名無しさん
垢版 |
2019/10/26(土) 23:02:43.13ID:JvDQOGiO
おっぱい好きだけど爆乳は好きじゃない。
2019/10/26(土) 23:16:28.89ID:yM1vAjNy
奇乳きらい
2019/10/27(日) 15:39:15.22ID:QYdsXE4U
貧乳こそ正義
556デフォルトの名無しさん
垢版 |
2019/10/27(日) 20:10:25.95ID:M2w7+A6p
π
2019/10/27(日) 21:47:29.52ID:29EcE5aV
雄π
2019/10/28(月) 07:30:15.50ID:JN5lVu+u
ちっぱいだいすき
2019/10/28(月) 11:04:07.07ID:24j/k5v2
たかが乳ですら意見割れてるのに関数型の話がまとまるわけないな
2019/10/29(火) 22:37:06.24ID:mgVguoQK
うまいことドメイン駆動設計をオブジェクト指向から切り離せないかな?
Javaでアーキテクチャを考えると、「このコードはどこに書くべきか」がずっと分からなくなる
関数のシグネチャ読めばそれがMなのかCなのか業務ロジックなのか入出力なのか、全部分かるように書けないものか
2019/10/29(火) 23:45:32.33ID:2LlnWJID
スレチ? それどもRustで考えてるのかな
JavaでもC#でもシグニチャ読めばMなのかCなのかくらいはわかるように書けると思うが

それはいいとしてDDDの本質はOOとは関係ないよ
Functional DDDの本がScalaとF#を例にしたのがそれぞれ出てるから読んでみるといいかも
F#のほうの著者のサイトみればRustのEnumでも同じような事できるのがわかるはず
https://fsharpforfunandprofit.com/ddd/
2019/10/30(水) 00:09:30.97ID:FUp1HJ0i
はえ〜
563デフォルトの名無しさん
垢版 |
2019/11/01(金) 14:20:55.93ID:uczmPzhO
Vulkanが公式でRustをサポートしてくれればRust製のゲームとかもっと出てくるのかなぁ
2019/11/01(金) 15:16:52.33ID:tfmUKGIE
enumの配列はメモリやばい?
https://play.rust-lang.org/?version=stable&;mode=debug&edition=2018&gist=0eeab60af9f7385db00275b2d168ac2c
2019/11/01(金) 15:49:15.26ID:zrbJp7o3
>>564
enum MyEnum {
Foo,
Bar(i32),
Baz(i32, i32, i32, i32, i32),
}

今のRustはEnumの一番大きいvariantに合わせてメモリを確保する
Baz(i32, i32, i32, i32, i32)が、4バイト x 5 = 20バイト
どのvariantかを示すTagバイトで+1バイトと パディングで+3バイト=24バイト
配列の要素数が3なら24 x 3 = 72バイト
2019/11/01(金) 19:25:13.98ID:+nuKsb5/
現職エントリ()のドワンゴや
タイ全裸Wantedlyの推してる言語って時点で使う気起きなくなるよね
567デフォルトの名無しさん
垢版 |
2019/11/01(金) 19:29:17.10ID:CgKHPMXI
タイ全裸って?
2019/11/01(金) 21:28:00.41ID:/XSkjXU3
>>567
タイ全裸Wantedlyでググろう
Wantedlyがタイで全裸になったわけではないが
企業としては全く信用できん
2019/11/01(金) 21:55:41.28ID:/XSkjXU3
どんなに「こんなに素晴らしい機能がある言語!」とか言われても
「でもあの個人情報お漏らし泥箱や現職エントリ()ドワンゴとかDMCA乱用のWantedlyとかが推してる時点で……」ってなるのが
正しい社会人としてのあり方
2019/11/01(金) 22:09:13.26ID:tfmUKGIE
>>565
つまりどんなenum作るでもたくさん値を持たせないほうが余計なメモリ使わずベストってことか
571デフォルトの名無しさん
垢版 |
2019/11/01(金) 22:57:41.39ID:RJfnLfVj
アンチドワンゴがみんなC言語使ってると思うと抜ける
572デフォルトの名無しさん
垢版 |
2019/11/01(金) 22:57:51.68ID:RJfnLfVj
↑思うとワロタ
2019/11/02(土) 02:27:34.58ID:lY37zOLC
まあ正直、いまだにえんじにゃーのファッションって部分がでかいわな。
574デフォルトの名無しさん
垢版 |
2019/11/02(土) 07:38:49.45ID:m1PoQplx
他人がなに使ってのかチラチラ伺いながら自分の使うもの決めるのか
小物すぎるだろ
2019/11/02(土) 13:57:08.64ID:uxGQ1L3w
>>574
つっても現職エントリ様やタイ全裸と一緒にされたくはねえしなあ
576デフォルトの名無しさん
垢版 |
2019/11/02(土) 14:20:09.97ID:m1PoQplx
同じ言語使ってるだけで同一視すんのはお前だけだよ
2019/11/02(土) 14:32:51.71ID:ygDc/lgM
それらの企業はRustなんか採用する前からボロボロだっただろ。
2019/11/02(土) 15:40:16.76ID:lY37zOLC
んでもって一発逆転をねらって水物のに飛びつくっていうアンチパターンね。
2019/11/02(土) 20:44:05.92ID:J/DFBFnF
あそこは一人が有名なだけだと思うがな
2019/11/02(土) 22:56:34.85ID:VM95VN5u
https://github.com/woboq/qmetaobject-rs
このcrateの中で"rust!"というマクロが使われてるんですがクレート内や依存するクレートの中を探してみても定義してる箇所が見つかりません
どこで定義してるのかわかる方いませんか?
2019/11/02(土) 23:31:33.69ID:t8MMHk4t
>>580
Rustのマクロとして定義されてるものではないみたいね
↓ここら辺に説明がある
https://docs.rs/cpp/0.5.4/src/cpp/lib.rs.html#209-241
2019/11/02(土) 23:48:47.52ID:VM95VN5u
>>581
なるほど、マクロの中で独自の擬似的なマクロを定義してるって事でしたか
そんな使い方があるなんて思いもしなかった

ありがとうございました!
583デフォルトの名無しさん
垢版 |
2019/11/03(日) 01:36:39.62ID:G+Mc14wF
マクロの中で独自マクロ定義とか、、、
そんなことされたら俺の脳はメタメタにされてしまう。
2019/11/03(日) 02:21:28.16ID:EBkVjL7h
C++テンプレートの悪夢を再現しようとしてる人たち
585デフォルトの名無しさん
垢版 |
2019/11/03(日) 14:24:34.21ID:smmSGOst
C++を理解したプログラマーはRustを使う必要がなく、C++が理解できないプログラマ―にはRustも同様に理解できない。
https://developers.srad.jp/story/15/02/20/2132207/
586デフォルトの名無しさん
垢版 |
2019/11/03(日) 17:45:13.54ID:jtCsbY8B
>>585
古い記事のリンクなんてはるな、うざい
2019/11/03(日) 20:33:09.59ID:r9lfrX/A
traitでコピーかムーブかの判断をするようにしたのはrustの最大の失敗だな。
2019/11/03(日) 22:07:42.86ID:1Y+jqSBq
直すならいまのうち

大丈夫だろ
2019/11/03(日) 23:21:37.95ID:M7pbBVsi
どうだったらよかったのか
2019/11/04(月) 02:00:10.34ID:emAGOeO/
>>586
5年前から何一つRustは進歩してないってことだよ
一方Nimは1.0迎えてどんどん進歩している
RustからNimへの流出もどんどん進んでる
2019/11/04(月) 02:02:58.89ID:emAGOeO/
http://wolfbash.hateblo.jp/entry/2017/07/30/193412
そーいや結局この記事へのまともな反論は以前のスレでも出てこなかったよな
592デフォルトの名無しさん
垢版 |
2019/11/04(月) 02:16:17.42ID:O4QbPTeM
ネタフリはいいけどもうちょっと生産的なのにしてよ
2019/11/04(月) 02:22:13.55ID:q2ozowgo
>>589
少なくとも = をオーバーロードもしくはオーバーライドするようなやり方は
すべきでなかった。
2019/11/04(月) 07:58:19.81ID:hfizXHxK
生産的というが、Rustが言語として生産的なことは過去にあったか?
それよりはNimへの乗り換えという前向きな選択肢を出すことの方が生産的だと思うが
2019/11/04(月) 09:12:04.34ID:b9TWlX4+
AWSも支援--プログラミング言語「Rust」人気が拡大
https://japan.zdnet.com/article/35144661/
2019/11/04(月) 09:16:30.74ID:TNJ/Yj6e
>>593
そうでないならどうする?
pros/consは何?
2019/11/04(月) 10:29:24.02ID:pD4BmXAp
個人的にはC/Zig/C2・C++/D/Rust・Go/Nimという棲み分けだと思っているので別にという感じだ

まぁそもそも論としてNimの話したいなら次世代言語スレかNimスレでやれよという気持ち
せっかく専用スレあるのにメインユーザーにすら使われないとか可哀想すぎるでしょう?
2019/11/04(月) 11:26:47.69ID:TQlb0Fo2
NimはPythonでパフォーマンスに困ってる人にはいい言語じゃないかと思う。Pythonスレで宣伝してくればいいのに。
Rust使ってる人が移行したくなる要素はあまりない気がするけどな。
2019/11/04(月) 12:05:28.47ID:q2ozowgo
>>596
んな簡単に示せたらおれが言語作ってるわ。
とりあえず言えることとしてはこの辺の明示性に関しては明らかに c に劣るってことくらい。
2019/11/04(月) 12:16:27.30ID:TNJ/Yj6e
「すべきでなかった〜」とか断言したわりにしょぼい回答でがっかりだよ
2019/11/04(月) 12:41:59.38ID:x85TCC2R
Rustの良さはCと同レベルの速さをキープしつつ
Cよりは安全にかけるところが良いのだから
言語についてごちゃごちゃ言うのは筋違い
多少面倒でも安全に倒した方が良いって人が使うもの
2019/11/04(月) 12:43:51.83ID:f7Qy6XgK
インデックス1始まりの地獄はVBAでさんざん味わった
一貫してるとまた違うのか?
2019/11/04(月) 14:56:29.79ID:YPBZbHG1
RustはCより身持ちが堅いけどお作法と親戚づきあいが滅茶苦茶面倒な嫁って感じ
NimとPythonは巨乳姉妹で姉は大学生、妹はフリーター
Perlはヤンデレ妹
2019/11/04(月) 17:01:43.91ID:R+mKKMUr
まあ確かにC++のauto_ptrと同じミスをしてるとは言えるよねCopyトレイトに関しては
こっちはCopyトレイトになれるものが相当限られてるのと
コンパイラがC++よりわかりやすいエラーを吐くことでギリギリ妥協の範囲を攻めてる感じ?
まあ全体的にはauto_ptrよりはマシだと思うよ
許容できるかは人次第だけど
2019/11/04(月) 18:52:40.96ID:q2ozowgo
>>601
いや全く逆のことを指摘してるんだが。
もっと面倒でもコピーと参照については明示性のある記述方法にするべきだったのでは
ということを言っている。
2019/11/05(火) 01:02:39.53ID:AzzdNH9H
>>605
横レスだけど >>601 はRustとNimについての文脈であってCopyトレイトについての文脈じゃないと思うよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況