[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/22 09:53 / Filesize : 303 KB / Number-of Response : 1018
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C vs C++ vs Rust Part.3



1 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 22:19:47.56 ID:avZQ9Wm7.net]
闘え
※前スレ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
C vs C++ vs Rust Part.2
https://mevius.5ch.net/test/read.cgi/tech/1639539350/

482 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:03:52.90 ID:DajlRg+n.net]
あとC++が理解出来ないからRustに移るということはない
C++で開発し続けることに挫折して、Rustに移るだけだと思う

483 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:11:28.15 ID:DajlRg+n.net]
Rustが問題が起きないということもなくて、Rustを使ったらプログラムを書けなくなる人がかなりの量出るだけw

484 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:13:15.97 ID:H3mwwYQo.net]
>>460 >>463
二人ともそれぞれsubsetsとcombinationsというライブラリ関数に頼って書いているだけに過ぎない
ライブラリ関数が充実してると言いたいのか、プログラムを書きやすいと言いたいのか、中途半端
そして自力で書けるならばライブラリ関数の有無は大した問題ではないから何が要点かわからない

485 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:17:58.62 ID:H3mwwYQo.net]
>>476
C/C++/Rustいずれか一つでも挫折するような人は、いずれも使いこなせないから結果は同じ
C/C++/Rustいずれも使える人はRustを使う
なぜなら言語の機能が他より高くてプログラミングしやすいため

486 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:29:06.52 ID:DajlRg+n.net]
>>478
自力で用意できるかできないかはどうでもよくて、標準ライブラリにあるかないかが大きく違う
だってどの言語でも用意できないわけがないからw
俺はpythonでやるならという条件で書いただけ

>>479
C/C++/Rustはそれぞれ共同開発する人が誰かによって変わるだけ
自分で使うだけなら速いし面白いし安定してるし、C++で書く
C使いが多ければCを使うし
Rust自体を使うことが目的でないのなら、Rustやってみたい人が多いときRustにするだけ
量的には
C > C++ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Rust
かなぁ

487 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:35:38.12 ID:bERyk9+R.net]
C/C++/Rustの3つならば明白に言語が提供する機能差がある
3つとも書けるプログラマーならば99%がRustを選ぶのは間違いない

488 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:38:32.90 ID:WcCf8R0B.net]
どんだけ馬鹿にされようが罵られようが構わないけど
C++は糞すぎるワイには手に負えない言語とだけは言っておく
C++20以前はジェネリックスに渡す型引数の制約を実現するために偶然見つかった「SFINAE」という「コンパイラの挙動を応用する方法」を用いるのが標準レベルでデファクトスタンダードになっていたとかヤバすぎだろ
普通の人なら気にも留めないような挙動を一般ユーザーにも把握させることを強要する時点で狂っているとしか思えない
SFINAEの代替手法として導入されたconceptsですらごちゃごちゃしているしそこらの一般ユーザーはc++のバージョンアップについていけるほど忍耐強くはない
だからみんなRustに移る

489 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:46:14.60 ID:H3mwwYQo.net]
>>480
その様子だと君にはどちらも無理だろう
もし書けると言うならば
そのcombinationsをRustで型Tのイテレータとして実装コードを出してごらん

490 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 19:57:31.66 ID:DajlRg+n.net]
>>481
そんなことねーよw

>>482
まあね。その剥き出し感がいいんだよ遊びで使う分には。見えてない部分がないところ。
一応言っておくと難しい機能は公開するようなコードでは使わないよ。

>>483
https://docs.rs/itertools/0.7.8/src/itertools/combinations.rs.html



491 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 20:02:15.14 ID:H3mwwYQo.net]
>>482
C++のSFINAEはもちろん酷くて論外だが
逆にRustの現状のトレイト実装ルールは実装型を互いに排他を満たす必要があり厳しすぎる
もちろんRustコンパイラは進化し続けていて一部特殊化がそろそろ安定化しそうで少し緩和となり期待

492 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 20:03:31.49 ID:kxxb+wWf.net]
若い頃はSFINAEのパズル解く感じが好きでヤバいコード結構書いてたけど、だんだんあれは正気ではなかったなと思うようになってきた

493 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 20:06:07.03 ID:DajlRg+n.net]
>>486
やめてそういうこと言うのw

494 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 20:13:48.68 ID:bERyk9+R.net]
>>484
あなたはそのリンクを出すことでRustを全く知らない無知だとバレました
なぜならそのリンクのitertoolsバージョン0.7.8は4年前なのです
検索でリンクを拾ってこない限りそんな超古いバージョンを示す人はいません
あなたはプログラミング未経験者もしくは初心者であることがバレてしまいました

495 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 20:30:44.95 ID:H3mwwYQo.net]
>>484
偉そうなこと言っていてRustを理解できす挫折した落ちこぼれだったのか
>>480でRustを蔑んでいたから怪しいと思っていたらやっぱりか

496 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 20:46:50.19 ID:DajlRg+n.net]
>>488-489
別に最新だろうがすぐ行けるだろw
俺が自分で書いたら正解はコレって出す予定だったからわざわざ出題したチキンなんだろ?
だからこれにしただけw

497 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 21:05:33.57 ID:H3mwwYQo.net]
>>490
言い訳ばかりだな
じゃあもう一つの>>460のsubsetsイテレータをRustで書けたら認めてやろう

498 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 21:23:06.07 ID:H3mwwYQo.net]
もしプログラミングが不慣れで難しいようだったら
イテレータを「どんな仕様」にしてしまってもいいぜ
それがヒントだ

499 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 21:27:42.88 ID:DajlRg+n.net]
お前に認めてもらう必要なんてねーよw Rustを使うやつはバカしかいないんだなw

500 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 21:37:04.88 ID:bERyk9+R.net]
>>493
今回は検索してリンクを拾ってこれなかったのね



501 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 21:38:31.66 ID:DajlRg+n.net]
煽って正解もらいたいバカしかいないの?w

502 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:05:39.63 ID:bERyk9+R.net]
>>492
subsetsをどんな仕様のイテレータでもいいってことは
初心者でもすぐ出てくるあれでいいってことか

>>495
これは超初心者でもいいからプログラミングをしたことがあるのか
それとも煽っているだけなのかが判明しちゃう良問のようです
断念ですか

503 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:10:01.54 ID:DajlRg+n.net]
断念もクソもなんでお前らに言われて俺がやる必要があるんだよw バカだろw
ハッキリ言っておくが俺はRust書けるし、多分お前らより詳しいよ普通にw
こういうのがRust推してる信者頭おかしくて性格歪んだやつしかいない雰囲気100%で毛嫌いされてる理由なんだろうなw

504 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:11:58.21 ID:DajlRg+n.net]
端的に言うと、流行りばかり気にするすごい頭悪い人たちと同じ匂いがするんだよw

505 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:16:52.73 ID:H3mwwYQo.net]
>>497
Rustに詳しいならば
既存のこれを使えばいい、と即答できる問題
あるいはsubsetsイテレータという問題だから仕様が自由に何でもいいならば初心者でもコードを一瞬で示せる問題
どちらも出来ないならRust未経験と断定できる

506 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:31:30.23 ID:DajlRg+n.net]
permutationやcombinationとか普通にはあまり使わないんだよ
競プロとかやってる実利のないコードをメインに書いてるバカがそういうのをやたら使いたがって、俺より遅いコードしか書けないし、創造的なロジックもどうやら苦手そうなのに、そういう問題やたら出してくるんだよね
俺は元々そういうの得意だけど、その手の問題を好き好んで出してくるバカに答えを書いてやるのが嫌なんだよw
納得?

507 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:43:02.13 ID:bERyk9+R.net]
>>500
permutationやcombinationのアルゴリズムが少し難しいのはわかります
でも今回はsubsetsですよ
さらに>>492でどんな仕様にしてもいいと言っていてしかもそれがヒントだと言ってるのでこれは気付きますよ

508 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:45:50.74 ID:DajlRg+n.net]
俺pythonで書いてるし、自分でもすぐ書けるけど、お前に回答すんのが嫌なんだよw
なぜならお前がバカだからw 何度もそう書いてんだけどw

509 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:50:52.11 ID:DajlRg+n.net]
ああ、ちなみにpermutationやcombinationのアルゴリズムは簡単w

510 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 22:53:14.37 ID:H3mwwYQo.net]
さきほどcombinationsイテレータをググって古いversionのitertoolsのソースで回答したよな>>484
ところが今回のsubsetsについては回答できない
検索で出てこないから答えられないのだとわかる



511 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 23:04:20.16 ID:DajlRg+n.net]
永久に書いてやるよw
すぐ書けるけど、お前に回答すんのが嫌なんだよw
なぜならお前がバカだからw 何度もそう書いてんだけどw

512 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 23:07:34.34 ID:bERyk9+R.net]
>>503
なるほど
subsetsのアルゴリズムは難しくて無理でしたか

513 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 23:09:47.42 ID:DajlRg+n.net]
永久に書いてやるよw
すぐ書けるけど、お前に回答すんのが嫌なんだよw
なぜならお前がバカだからw 何度もそう書いてんだけどw

514 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 23:20:19.51 ID:H3mwwYQo.net]
>>507
さきほどcombinationsイテレータをググって古いversionのitertoolsのソースで回答したよな>>484
itertoolsをもし本当に使ったことがあるならばsubsetsもあるだろうことくらいわかるだろ?

515 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 23:24:18.79 ID:DajlRg+n.net]
>>508
>>507

516 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 23:32:35.94 ID:bERyk9+R.net]
>>508
そこは英語力の問題かな
subsetsが見つからなかった時にpowersetを探せるかどうか

517 名前:デフォルトの名無しさん mailto:sage [2022/03/15(火) 23:54:14.91 ID:DajlRg+n.net]
俺理系院卒だから数学一般教養くらいはあるぞw
難しい話をしてるつもりなのかもしれんけどw

518 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 00:52:00.92 ID:2VKgWl5Z.net]
>>481
俺はC++もRustも基本的部分は理解しているつもりで、書こうと思えば Rustでも
書けると思うが、書こうとは思えない。
しかし、C++は使う。

519 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 10:39:48.98 ID:iFx1kR7d.net]
同じことをやるにしてもrustは面倒くさそう

520 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 14:20:20.70 ID:4Deniw6A.net]
rustは詳しく知れば知るほど使える領域が狭いことに気付く。まあ勉強して損することはないとは思うけど。



521 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 16:01:45.47 ID:FLjIdsXf.net]
まぁ、Rustがものすごく人気になるようだったら、Rustを下敷きにしたC++サブセット Smart C++が出てくると思うわ。

そしてc++はライブラリアン向けのunsafe的な扱いになる、と。

522 名前:デフォルトの名無しさん [2022/03/16(水) 17:58:27.77 ID:NLGXbRJg.net]
>>515
無理じゃないかな。

523 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 20:15:10.51 ID:TNL7Q8/z.net]
rustが他言語の仕様に影響を与える部分はでてくるだろうね。

524 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 21:02:09.61 ID:0TydPa2f.net]
反面教師にはなるよねw

525 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 21:24:41.08 ID:MkjFLw2M.net]
>>512
それはあなたの能力では理解できなかったから思うだけで留まり実際には書けていない

>>513
逆だ
同じことが簡潔に書ける

>>514
むしろ幅広い分野で有効
後発だからとも言えるが言語仕様が幅広いパラダイムを洗練して採り入れていることが勝因とみた []
[ここ壊れてます]

527 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 21:56:01.01 ID:GaQESt6l.net]
少なくともC++はリプレイスしてほしいな

528 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 21:58:33.64 ID:0TydPa2f.net]
Rust信者って本当にバカだなw
妄想で他人を説得はできないんだよ
グラフ構造を標準ライブラリとunsafe使わずに簡潔に書いてみろよw
他の言語で出来ないやつないから
Rustも超狭い領域ではオンリーワンくらい有効なんだけど、それ以外では趣味でしか使われない

529 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 23:51:54.51 ID:yCGU0QjC.net]
>>491 >>492
横からやけどほんまにどんな仕様にしてもええの?
それなら長さlenのsubsetsイテレータは10文字で完成
『0..(1<<len)』
数字を2進数で見てbit立っている要素による各subset
0は全ての要素がないから空集合

それで納得してもらえんのやったら入力inputとして
(0..(1 << len))
.map(|c| (0..len)
.filter_map(move |i| (c & (1 << i) != 0).then(|| &input[i]))
.collect::<Vec<_>>())
これでちゃんとしたsubsetsイテレータが完成
例えばinput = &["a", "b", "c"]ならば以下が順に出る
[]
["a"]
["b"]
["a", "b"]
["c"]
["a", "c"]
["b", "c"]
["a", "b", "c"]

530 名前:デフォルトの名無しさん mailto:sage [2022/03/16(水) 23:53:02.55 ID:yCGU0QjC.net]
>>491 >>492
横からやけどほんまにどんな仕様にしてもええの?
それなら長さlenのsubsetsイテレータは10文字で完成
『0..(1<<len)』
数字を2進数で見てbit立っている要素による各subset
0は全ての要素がないから空集合

それで納得してもらえんのやったら入力inputとして
(0..(1 << len))
.map(|c| (0..len)
.filter_map(move |i| (c & (1 << i) != 0).then(|| &input[i]))
.collect::<Vec<_>>())
これでちゃんとしたsubsetsイテレータが完成
例えばinput = &["a", "b", "c"]ならば以下が順に出る
[]
["a"]
["b"]
["a", "b"]
["c"]
["a", "c"]
["b", "c"]
["a", "b", "c"]



531 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 01:31:24.96 ID:HeUHSOmZ.net]
collectするならfoldで十分かな

fn subsets<T>(input: &[T]) -> impl Iterator<Item=Vec<&T>> {
let len = input.len();
(0..(1 << len))
.map(move |c| (0..len)
.fold(vec![], |mut v, i| {
if c & (1 << i) != 0 {
v.push(&input[i])
};
v
})
)
}

532 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 02:22:57.24 ID:stJJ2apy.net]
C++でsubsetsイテレータを書くとどんな感じになるの?

533 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 02:29:21.66 ID:M6s617kA.net]
>>519
馬鹿

534 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 02:39:09.51 ID:faeKJv0z.net]
Rust同様どうとでも出来るよw
C++のは古いから名前がアレだけど
俺は>>522じゃないけどfilterとmapで書いた方が分かりやすいとは思う
この書き方でpushとかは見たくなかったw

535 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 02:53:46.50 ID:75al4ANx.net]
うむ

>>522
filter_mapとthenによるOption利用が分かりやすいな

536 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 03:28:10.97 ID:OxdqHDsn.net]
>>527
ぜひC++版お願い

537 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 04:22:11.55 ID:faeKJv0z.net]
>>529
何度でも言うけど、そういう要求は飲まない
金くれたら書くよw

538 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 08:12:49.73 ID:8E8aTCar.net]
>>520
リプレースはしなくていい。
コーダーとかが通常使う安全運転版と、ライブラリアン用のフル版が住み分け・共存できればいい。
従来はコーディング規約とライブラリでやっていたところだけど、こういうのはshared ptrみたいに旨が使う共通仕様にしたほうがいい。

539 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 08:19:10.27 ID:H9cH52GC.net]
Rustに移行すれば
色んな問題が一気に解決するだけでなく
プログラミングもしやすくなって一石二鳥

540 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 08:41:07.21 ID:FVjeEviC.net]
>>532
サンプルコードがもっと充実してきて、標準的なコーディングが普及してきてから検討するわ。

Rustは土方向け言語目指しているのに、今のRustの仕様だと土方に難しすぎるから中途半端。それならc++&コーディング規約でいいや。



541 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 08:49:29.01 ID:+B7ucdDW.net]
>>533
君たち土方には難しいのかも知れ

542 名前:ネいが普通のプログラマーにとっては難しくないしコーティングがC++より快適 []
[ここ壊れてます]

543 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 08:57:01.71 ID:qDb9bUKB.net]
Pythonくらいしかやったことない人にとって難しいのはそうだろうけど
C++14/17についていってる人ならRust余裕だと思うけどなぁ

544 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 10:08:01.84 ID:faeKJv0z.net]
Rustに出来てC++が似たようなことを出来ないってことはまずないよ
ただ同じことをしたい場合、手間がすごいかかる(23は知らんけど)
そしてどう転んでもエラーがRustほど人間に優しくなったりはしない(と思う)

C++に出来てRustが似たようなことを出来ないってこともそんなに多くない
まあでもこっちは本当に出来ない
https://www.reddit.com/r/rust/comments/n7rjfk/what_can_c_do_that_rust_cant_2021_edition/

ただRustは初心者には難しすぎ、ある程度他の言語をやってる人にも難しいというハンデがある
なのでスクリプト言語感覚でRustをやろうと思うのはちょっとオススメできない
楽を出来る場面は確かにあるので、そこをどの程度メリットと捉えるか
制約をどの程度デメリットと捉えるかで評価が分かれる

545 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 12:06:55.23 ID:wJGqDNhd.net]
>>534
土方にやらせる話をしているんだよ。

Rust信者がそういう意識なら、RustがJavaみたいに流行ることは無いな。
やっぱりHaskellコースかね。

546 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 16:20:31.29 ID:YyXXowcK.net]
>>534
>君たち土方には難しいのかも知れないが普通のプログラマーにとっては難しくないしコーティングがC++より快適
自分がどれくらい矛盾してること言ってるのかも理解してなさげ。

547 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 18:26:55.16 ID:kAy4MIQW.net]
>>522
Rustはスクリプト言語のように簡潔に書ける点もいいね
それでいてC言語並に速い
C++は簡潔に書けず手間暇かかりすぎる

548 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 18:35:40.91 ID:+BzvG1OL.net]
お手軽さっていう話だと、関数の仮引数の型も型推論してほしい、ってたまに思っちゃう

549 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 18:44:45.18 ID:qDwk9HhQ.net]
>>540
技術的にはできるし、できるならやりたくなっちゃうところをあえて削ったのは英断だと思ってる
過去のコードや他人のコードを読むときに直近に型があるのは大きい

550 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 18:59:38.79 ID:Rcv7QaS+.net]
> 仮引数の型も型推論
OCamlだとそれはフツーにできてるのにね

> 過去のコードや他人のコードを読むときに直近に型があるのは大きい

同じような話だがJavaのジェネリクスで

> List<Foo> list = new ArrayList<>();
> この右辺のパラメータが省略できるのを有難がるのは残念で
> ホントは左を省略してvar ist = new ArrayList<Foo>();
> と書けたほうが嬉しいのにJavaはやっぱりダメダメ

みたいな意見をみたことがあるが、左を残すことこそ大事なんだよな
実装に対してではなくてインタフェースに対してプログラミングするのであって
変数の型を必要最低限の小さいインタフェースで宣言するのが嬉しいのに
それをわかってないやつはタイピング数などで判断して世迷い言を言う



551 名前:デフォルトの名無しさん [2022/03/17(木) 19:25:12.70 ID:pdkFYtDC.net]
Rust学習しはじめだがEnumの仕組みは良いと思う。
C#あたりに組み込まれればいいのに。

552 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 20:43:27.53 ID:oh1xEFC0.net]
enum Optionとか便利で簡潔に
null nil undefined -1など無くして安全に出来ていいよね
それでいてコンパイル後は最適化されたり消えたりして効率も両立されたり

553 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 20:52:32.01 ID:faeKJv0z.net]
別にC++でも同じことはできるけどね
自分で組めばC++14とかでもrxっぽく書いたり、Optionの実装も余裕
手間さえ惜しまなければw

554 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 20:55:03.76 ID:faeKJv0z.net]
Javaも最近は左側省略できるよ
おっしゃるとおり基底型何にするかは選べないけどw

555 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 20:58:40.56 ID:LRb50lm3.net]
C++17にstd::optional<T>があるにはあるのだが...

膨大な量の既存のSTLが無効値をoptionalに置き換えられることはない
つまり無効値でoptionalを返す風潮ができにくいから悲しみ

556 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 20:59:36.98 ID:oh1xEFC0.net]
引数の型推論は原理的にはかなり出来そうだけど
例えば引数がas_ref()で使われていて変換後がPathなら引数はimpl AsRef<Path>までやっちゃう?
でもその利用者へのインタフェース明示や可読性と保守性を考えると型明記でいいような気がする

557 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:13:38.45 ID:faeKJv0z.net]
C++もautoだらけlambdaだらけにすると引数も戻り値も結構型書かなくていいけど、遠すぎて何に怒られてるのか分からん代入エラーが出たりもするw
Rustも同じだけどエラーは分かりやすい

558 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:15:46.46 ID:cEFLJG6J.net]
>>545
そこはやろうと思えばできるレベルと
Rustが標準ライブラリで全面採用サポートしてるレベルで天と地の差があるよね
例えば>>522もbool値がthenでOptionを生成してそれをfilter_mapが受け取ることで簡潔なコードになっていたり

559 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:23:13.02 ID:faeKJv0z.net]
そこはfilterとmapの方が分かりやすい

560 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:32:28.43 ID:7cb0HHrx.net]
一般的にfilter_mapはわかりやすと速さを両立
だからわざわざfilter_mapやfilter_map_okが用意されている



561 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:35:05.28 ID:faeKJv0z.net]
そんなところは全く速さに影響しないと思うよ

562 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:43:21.73 ID:LVblziyo.net]
>>553
その種類のイテレータを2段は最適化前はもちろん速さに影響するけど
最適化により最終コードが同一コードになることを確認したということ?

563 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:49:32.84 ID:faeKJv0z.net]
お前は速くなることを確認したんかい?w
俺は出来るけど速くならないことを確認する必要がないと判断したw
お前は恐らく出来ないw

564 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 21:58:49.13 ID:S0ETBIy2.net]
コードそのままならイテレータ2つより1つの方が速いと明白なので
速さが同じと主張する>>555が最適化で同じコードになることを示す必要がある

565 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:05:07.99 ID:faeKJv0z.net]
明白じゃねーよwwwww

566 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:19:03.24 ID:ONkUn4dy.net]
たぶん>>557氏はイテレータの動作原理を知らないのだと思う
例えばfilterは構造体Filterを返しそのメソッドnext()がイテレータを進めるごとに呼ばれる
同様にmapは構造体Mapを返しそのメソッドnext()がイテレータを進めるごとに呼ばれる
最適化前はそれら二重のオーバヘッドがある

567 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:24:52.40 ID:qNBuWQhB.net]
速さに関して議論するなら最適化のコードがどうなるかを確認すべきでは
特にイテレーターアダプターを何度も噛ませてもfor文相当のコードが生成されるというのはrustの売りのひとつだよね

568 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:29:02.79 ID:IFNw/pUN.net]
もし最適化後に有意に速度差があるなら、それは性能バグとしてIssueにあげるべき問題だと思う

569 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:31:57.85 ID:IHLBrgoM.net]
>>559
その通りで最適化で非常に効率な最終コードとなる
ただし今回のケースでfilter().map()がfilter_map()と同一コードになるかどうかは自明ではない
したがって>>553に立証義務がある

570 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:36:47.68 ID:faeKJv0z.net]
立証義務なんてねーだろwwww
できないからって他人に頼るなwwwww



571 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:38:48.81 ID:IFNw/pUN.net]
意味的に同じことやってるんだから、理想的な最適化コンパイラは全く同じバイナリを吐くはずで
遅くなるはずってのも別に自明ではないのでは

572 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:46:51.69 ID:IHLBrgoM.net]
>>563
意味の同じプログラムが最適化で常に同じコードになるかどうかは自明ではない
そしてそれを期待することはよいが前提としてはいけない
自明ではないことを同じと主張する側に立証義務がある

573 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:48:42.58 ID:faeKJv0z.net]
できないんだねwwww
rustの吐くコードすげー見にくいしなw
それ以前にアセンブラ読めなそうw

574 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:52:00.13 ID:IFNw/pUN.net]
>>564
ん?別に同じになるのが自明とは言ってないよ
どちらも同程度に自明でないって言ってるだけ
立証はまぁやりたい人がやればいいんじゃない

575 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 22:57:38.05 ID:s2P7MscG.net]
>>565
> rustの吐くコードすげー見にくいしなw

無知っぷりを曝け出してるな

576 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 23:14:09.53 ID:faeKJv0z.net]
お前が無知なだけw

577 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 23:29:12.99 ID:OpaED0hw.net]
>>565
LLVMがアセンブリを吐いてることも知らないのか

578 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 23:31:17.03 ID:faeKJv0z.net]
ビビリ単発IDが何もかもを証明しちゃってるw
お前は何も分かってないw

579 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 23:50:47.22 ID:76PcfavB.net]
>>529
C++ではそんなに簡単には書けない

580 名前:デフォルトの名無しさん mailto:sage [2022/03/17(木) 23:59:39.29 ID:faeKJv0z.net]
C++でも簡単に書けるよw
C++20で導入されたrangeでも使ってみw
より古い規格でもユーザーライブラリを使えばRxっぽい記述は簡単に出来る
自分で書くと難しくはないが骨が折れるタイプの実装
並列化を意識しない限りだけどw
まあ並列化を意識しないで簡便さを意識すれば無理にRxを使う必要もないけども・・・



581 名前:デフォルトの名無しさん mailto:sage [2022/03/18(金) 00:00:49.69 ID:Mo7HNly3.net]
>>572
無理でしょ
実際に書いてみ

582 名前:デフォルトの名無しさん mailto:sage [2022/03/18(金) 00:03:10.42 ID:slshVm4c.net]
加えて言えばRxでなければ上限を意識したループで書けるのでメモリ確保が最適化できるし、手でinlineにする部分を選べる分より速く書ける可能性もあるw






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<303KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef