スレタイ以外の言語もok
前スレ
次世代言語27 TypeScript Swift Go Kotlin Rust Nim
https://mevius.5ch.net/test/read.cgi/tech/1659655598/
探検
次世代言語28 TypeScript Swift Go Kotlin Rust Nim
■ このスレッドは過去ログ倉庫に格納されています
2022/08/29(月) 11:22:16.48ID:5dAad4gs
100デフォルトの名無しさん
2022/09/02(金) 22:15:29.02ID:ZICl4sMk 結論が出たな
Rustを攻撃してた人が以下のようなウソをついてた
> 「結果としてCでもRustでも同じ生成コードとなる 」絶対ならないからw
> つーかアセンブラして貼り付けろよ?
> そもそも配列ループの遅さをカバーするために
> Rustは速度を稼ぐために一部分ループ展開を勝手にするはず
生成アセンブラコード>92を見ると
CでもRustでも同じ生成コード
CもRustもループ内のインデックス境界チェックは無く同じコードとなっている
そしてCもRustも一部分ループ展開を同様にしてる
当然どちらも同じ速度となる
Rustを攻撃してた人が以下のようなウソをついてた
> 「結果としてCでもRustでも同じ生成コードとなる 」絶対ならないからw
> つーかアセンブラして貼り付けろよ?
> そもそも配列ループの遅さをカバーするために
> Rustは速度を稼ぐために一部分ループ展開を勝手にするはず
生成アセンブラコード>92を見ると
CでもRustでも同じ生成コード
CもRustもループ内のインデックス境界チェックは無く同じコードとなっている
そしてCもRustも一部分ループ展開を同様にしてる
当然どちらも同じ速度となる
101デフォルトの名無しさん
2022/09/02(金) 22:58:49.99ID:SRTIVbJR >>98
早くc言語で境界値チェックするコード出してよ。
早くc言語で境界値チェックするコード出してよ。
102デフォルトの名無しさん
2022/09/02(金) 23:27:03.89ID:lqMLDpPB 全然読まない、勝手にコードを変更してs.lenとか悦にはいってる
103デフォルトの名無しさん
2022/09/02(金) 23:59:11.14ID:VC9smmde104デフォルトの名無しさん
2022/09/03(土) 01:19:34.52ID:txSLq0y3 おじさん普通にC勉強した方が良いよ
Rust書ける人でC書けない人なんていないからズレまくった指摘してるんだよ
Rustであえてパフォーマンス出ないようなコードを書いてるとしか思えない
Rust書ける人でC書けない人なんていないからズレまくった指摘してるんだよ
Rustであえてパフォーマンス出ないようなコードを書いてるとしか思えない
105デフォルトの名無しさん
2022/09/03(土) 01:46:36.01ID:2EHZBEma >>92のシンプルなコードをこれ以上に速くするのは無理じゃね
そしてRustもCも同等のアセンブリコードを吐いてるから実行速度も同じで勝負ついた感じだな
そしてRustもCも同等のアセンブリコードを吐いてるから実行速度も同じで勝負ついた感じだな
106デフォルトの名無しさん
2022/09/03(土) 03:19:04.56ID:DRQBO0l9 バカ野郎!
Rustのおっちゃんは、日本を代表するトライアングル(楽器)奏者なんだぞ!
Rustのおっちゃんは、日本を代表するトライアングル(楽器)奏者なんだぞ!
107デフォルトの名無しさん
2022/09/03(土) 04:44:36.86ID:22c5U/VG 少なくとも配列範囲外アクセスするようなコードで比べなければ意味がない。
誰も勝負なんてしてないだろ
こんな事やってるからRustを嫌う人が割と増えていく、言い逃れそのものだろw
そもそもforの終了条件チェックと配列境界チェックの違いすら分かってないやつだ
カルトRust信者「C言語でもループ1回に付き必ず1回のインデックス値の境界比較が必ず入る」
固定長のループがclang/llvmで同じになったとして、壺カルトRust信者曰く、「C言語は」という
デカすぎる主語と、Rustでのすべての配列境界チェックが無くなるわけではなし何が勝ちなんだか...
誰も勝負なんてしてないだろ
こんな事やってるからRustを嫌う人が割と増えていく、言い逃れそのものだろw
そもそもforの終了条件チェックと配列境界チェックの違いすら分かってないやつだ
カルトRust信者「C言語でもループ1回に付き必ず1回のインデックス値の境界比較が必ず入る」
固定長のループがclang/llvmで同じになったとして、壺カルトRust信者曰く、「C言語は」という
デカすぎる主語と、Rustでのすべての配列境界チェックが無くなるわけではなし何が勝ちなんだか...
108デフォルトの名無しさん
2022/09/03(土) 05:27:05.78ID:lg2jZ6dQ >>107
コードを読めない人なの?
固定長のループではなく長さは関数の引数として与えられている
したがってC言語でもループ1回に付き必ずインデックス値の境界比較(=インデックス値が長さを超えないこと)がfor文の条件部で行われている
コードを読めない人なの?
固定長のループではなく長さは関数の引数として与えられている
したがってC言語でもループ1回に付き必ずインデックス値の境界比較(=インデックス値が長さを超えないこと)がfor文の条件部で行われている
109デフォルトの名無しさん
2022/09/03(土) 06:17:52.84ID:Xvi3nnOL >>92
例えばinline化とかで二つの配列/スライスがエイリアスされていることがコンパイラー(とプログラマー)に見えている場合があると思うんだけれど
Rustの方は自動ベクトル化してくれないのね。Cの方は自動ベクトル化されている。
極端に書くとこんな感じ。
ttps://godbolt.org/z/sbenoGEEa
inline
ttps://godbolt.org/z/M6qz3s3f7
max_value_slice_vwをどう書いたら自動ベクトル化されるの?
例えばinline化とかで二つの配列/スライスがエイリアスされていることがコンパイラー(とプログラマー)に見えている場合があると思うんだけれど
Rustの方は自動ベクトル化してくれないのね。Cの方は自動ベクトル化されている。
極端に書くとこんな感じ。
ttps://godbolt.org/z/sbenoGEEa
inline
ttps://godbolt.org/z/M6qz3s3f7
max_value_slice_vwをどう書いたら自動ベクトル化されるの?
110デフォルトの名無しさん
2022/09/03(土) 06:38:25.68ID:peyYEDe5 何の争いかよくわからんけどつまりRustでサイズ10の配列を作ってその11番目の要素にアクセスしたらどうなるん?
Cだと境界チェックしないから未定義になるしセグフォ出たり他の変数を書き換えたり暴走したりすることもある
Cだと境界チェックしないから未定義になるしセグフォ出たり他の変数を書き換えたり暴走したりすることもある
111デフォルトの名無しさん
2022/09/03(土) 06:40:51.52ID:peyYEDe5 11というのをリテラルで与えるともしかしたらコンパイルエラーになるかもしれんけどたとえばそれを乱数で生成した場合はどうなんの?
112デフォルトの名無しさん
2022/09/03(土) 06:53:51.31ID:peyYEDe5 Cが境界チェックしないと言うのは境界チェックがプログラマの責任だということだよね
Rust以外のモダンな言語では大抵範囲外の要素にアクセスしようとすると実行時例外を吐く
Cはそれをせず黙って暴走したりこっそり他の変数の値を書き換えたりして気づきにくいバグになる
Rustはどっち?
Rust以外のモダンな言語では大抵範囲外の要素にアクセスしようとすると実行時例外を吐く
Cはそれをせず黙って暴走したりこっそり他の変数の値を書き換えたりして気づきにくいバグになる
Rustはどっち?
113デフォルトの名無しさん
2022/09/03(土) 06:56:12.20ID:TWgTITK1114デフォルトの名無しさん
2022/09/03(土) 07:06:18.00ID:z9CaUV9k115デフォルトの名無しさん
2022/09/03(土) 07:13:36.64ID:z9CaUV9k つまり、Rustは安全性を常に保ちつつ、不要な境界チェックは最適化で無くすことで、安全かつ高速を実現。
116デフォルトの名無しさん
2022/09/03(土) 07:29:39.97ID:peyYEDe5 >>114
普通じゃね?
普通じゃね?
117デフォルトの名無しさん
2022/09/03(土) 07:34:10.00ID:/y6fxgdJ CとRustは同じアセンブリコードを生成すると>>92で示されているから
あとは他の言語でもそうなるならそれを示せばよい
あとは他の言語でもそうなるならそれを示せばよい
118デフォルトの名無しさん
2022/09/03(土) 07:37:07.45ID:lGqTIi1A どうでもいい内容で盛り上がってるな
for文の仕様がボトルネックになることなんかないんだからどうでもいい
for文の仕様がボトルネックになることなんかないんだからどうでもいい
119デフォルトの名無しさん
2022/09/03(土) 07:46:39.87ID:1xBXpDYn 例えばfor (i=0;i<len;i++) arr[i*2]=0;
Rustはこの時もCと同じコードになるんだよね?
Rustはこの時もCと同じコードになるんだよね?
120デフォルトの名無しさん
2022/09/03(土) 07:56:47.99ID:mdxH418+ gccのコミッターのものだけどそんな単純な話じゃないよ
Rustのスティーブとはよく話をするけどね
Rustのスティーブとはよく話をするけどね
121デフォルトの名無しさん
2022/09/03(土) 08:03:29.06ID:peyYEDe5 最後の一行で胡散臭さ出てくるの何なん
122デフォルトの名無しさん
2022/09/03(土) 08:04:34.15ID:2bPWyV3b まあこんなマイクロコードの比較だのベンチだのに意味は無いわな
コンパイラも局所だけ見て処理するわけでもなし
コンパイラも局所だけ見て処理するわけでもなし
123デフォルトの名無しさん
2022/09/03(土) 08:23:27.57ID:04g55wUA >>119
Rustのfor文はそういう構文ではない
あとRustではその処理関数は引数をスライスxで受けることになり
lenはx.len()となる
そしてfor i in 0..lenのループの時
x[i] = 0ならばそのアクセスには境界チェックは最適化により生じない (C言語と同じ)
x[i*2] = 0ならばそのアクセスには境界チェックが入りindex out of boundsとなる (C言語と異なる)
Rustのfor文はそういう構文ではない
あとRustではその処理関数は引数をスライスxで受けることになり
lenはx.len()となる
そしてfor i in 0..lenのループの時
x[i] = 0ならばそのアクセスには境界チェックは最適化により生じない (C言語と同じ)
x[i*2] = 0ならばそのアクセスには境界チェックが入りindex out of boundsとなる (C言語と異なる)
124デフォルトの名無しさん
2022/09/03(土) 08:27:29.75ID:1xBXpDYn125デフォルトの名無しさん
2022/09/03(土) 08:47:00.60ID:pNlcpp9D rust書けるやつはたいていcも書ける。
cは書けるがrust書けないなつはいる(俺とか)。
両方書けるほうがいいに決まってる。
cは書けるがrust書けないなつはいる(俺とか)。
両方書けるほうがいいに決まってる。
126デフォルトの名無しさん
2022/09/03(土) 08:47:14.13ID:oioC2Qy2127デフォルトの名無しさん
2022/09/03(土) 09:09:01.93ID:YIfnpCsY >>124
正しい使用ならば最適化されて境界チェックが消える点も重要やで
それによりRustのコードがCとほぼ同じ速度で動いている
一方で間違った範囲外のアクセスが起きうる場合には境界チェックがなされる点も重要やで
それによりRustはCとは異なり安全となっている
正しい使用ならば最適化されて境界チェックが消える点も重要やで
それによりRustのコードがCとほぼ同じ速度で動いている
一方で間違った範囲外のアクセスが起きうる場合には境界チェックがなされる点も重要やで
それによりRustはCとは異なり安全となっている
128デフォルトの名無しさん
2022/09/03(土) 09:12:44.80ID:qprMzk1R129デフォルトの名無しさん
2022/09/03(土) 09:21:53.95ID:YIfnpCsY >>128
配列の一部分はスライス (配列全体も可)
Vecの一部分もスライス (Vec全体も可)
スライスの一部分もスライス
なのでRustで関数を書くときはスライスを対象にして記述する
そしてスライスとして扱った時点で既に境界チェック済み(=元の範囲内)なので最適化が可能となる
配列の一部分はスライス (配列全体も可)
Vecの一部分もスライス (Vec全体も可)
スライスの一部分もスライス
なのでRustで関数を書くときはスライスを対象にして記述する
そしてスライスとして扱った時点で既に境界チェック済み(=元の範囲内)なので最適化が可能となる
130デフォルトの名無しさん
2022/09/03(土) 09:24:37.68ID:bVYJbA7l さすが複オジ隔離スレやで
今日もいい仕事しとるww
今日もいい仕事しとるww
131デフォルトの名無しさん
2022/09/03(土) 09:27:25.47ID:ezD68Vvz Rustの実行速度がCと同等だと何か困ることでもあるの?
132デフォルトの名無しさん
2022/09/03(土) 09:30:24.03ID:qprMzk1R >>129
関数内でlenが決まる場合でもいちいちスライス作るのか?
関数内でlenが決まる場合でもいちいちスライス作るのか?
133デフォルトの名無しさん
2022/09/03(土) 09:32:15.16ID:91ZlUxrs C/C++ で BITMAPINFOHEADER なんか扱うときは
意図的に範囲オーバーさせて bmp データにアクセスするよねω株 PI.3.14
意図的に範囲オーバーさせて bmp データにアクセスするよねω株 PI.3.14
134デフォルトの名無しさん
2022/09/03(土) 09:37:13.56ID:hKLkDwrb135デフォルトの名無しさん
2022/09/03(土) 09:45:26.31ID:peyYEDe5 困るとか困らないとかじゃなくCではやらない境界チェックがあるから現実に遅いよ
136デフォルトの名無しさん
2022/09/03(土) 09:47:19.22ID:peyYEDe5 Cと同じ速度で動くコード「も」あるというならその通り
他の言語でもある
他の言語でもある
137デフォルトの名無しさん
2022/09/03(土) 09:52:51.38ID:cKT2CTgA138デフォルトの名無しさん
2022/09/03(土) 09:54:03.17ID:peyYEDe5 境界チェックが消えたコードじゃなく消えてないコードで比べてみたらすぐわかるんじゃないですかね
139デフォルトの名無しさん
2022/09/03(土) 09:54:19.38ID:qprMzk1R >>135
コンパイルオプションでチェック無効に出来ないの?
コンパイルオプションでチェック無効に出来ないの?
140デフォルトの名無しさん
2022/09/03(土) 09:56:34.91ID:RRdFGJ7i >>139
C#はできるね
C#はできるね
141デフォルトの名無しさん
2022/09/03(土) 09:59:58.21ID:qprMzk1R >>137
> だからスライスを作るって大層なことではなくC言語で処理対象の先頭ポインタと長さを用意するのと同じ
いや、実装は想像できるからいちいち説明してもらわなくてもいいんだけどC言語だといちいちそんなもの作らないよ
先頭ポインタも長さ情報も既にあるのに同じ内容を持つスライスを作るのは(C言語脳としては)無駄に思える
> だからスライスを作るって大層なことではなくC言語で処理対象の先頭ポインタと長さを用意するのと同じ
いや、実装は想像できるからいちいち説明してもらわなくてもいいんだけどC言語だといちいちそんなもの作らないよ
先頭ポインタも長さ情報も既にあるのに同じ内容を持つスライスを作るのは(C言語脳としては)無駄に思える
142デフォルトの名無しさん
2022/09/03(土) 10:03:47.05ID:v+XVsXaf >>138
CよりRustが遅いコードを具体的に出してよ
array[i*2]の例は危険な範囲外アクセスとなるコードだから境界チェックをするRustに軍配が上がるね
だから安全な正しいコードなのにCよりRustが遅いコードを具体的に生成コードと共に出しましょう
CよりRustが遅いコードを具体的に出してよ
array[i*2]の例は危険な範囲外アクセスとなるコードだから境界チェックをするRustに軍配が上がるね
だから安全な正しいコードなのにCよりRustが遅いコードを具体的に生成コードと共に出しましょう
143デフォルトの名無しさん
2022/09/03(土) 10:06:50.84ID:RRdFGJ7i144デフォルトの名無しさん
2022/09/03(土) 10:11:51.77ID:774mvNvo145デフォルトの名無しさん
2022/09/03(土) 10:14:07.95ID:Rys3iPM9 実例と計測結果出さないと空論でしか無いわな
まあ速度差が無くて出せないんだろうけど
まあ速度差が無くて出せないんだろうけど
146デフォルトの名無しさん
2022/09/03(土) 10:17:36.98ID:RSYLNmWc チェックが入ると遅くなるから最適化でチェック省くことがあるんだろうに何で実測しなきゃわかんないんだよ
特定のスニペットじゃなく境界チェックが入る現実のコードの話をしてるのに実測なんてできるわけないだろ
境界チェックが原因で遅くなるコード作れと言うなら作るが、それ作ったら間違いを認めるんだろうな?
特定のスニペットじゃなく境界チェックが入る現実のコードの話をしてるのに実測なんてできるわけないだろ
境界チェックが原因で遅くなるコード作れと言うなら作るが、それ作ったら間違いを認めるんだろうな?
147デフォルトの名無しさん
2022/09/03(土) 10:20:44.15ID:qprMzk1R148デフォルトの名無しさん
2022/09/03(土) 10:20:52.59ID:0TSBfRU/ >>143
それは君が誤解してるようにみえるなあ
Rustでは安全に範囲内のアクセスとRustコンパイラが分析できれば境界チェックをしないためCと同じ速さが出る
そうでなく危険な範囲外のアクセスになりうるとRustコンパイラが判断すれば正しく境界チェックを行なう
C言語で書いても危険な範囲外のアクセスになりうる場合は手動で境界チェックをせざるを得ないから速さは同じ
それは君が誤解してるようにみえるなあ
Rustでは安全に範囲内のアクセスとRustコンパイラが分析できれば境界チェックをしないためCと同じ速さが出る
そうでなく危険な範囲外のアクセスになりうるとRustコンパイラが判断すれば正しく境界チェックを行なう
C言語で書いても危険な範囲外のアクセスになりうる場合は手動で境界チェックをせざるを得ないから速さは同じ
149デフォルトの名無しさん
2022/09/03(土) 10:22:44.18ID:RSYLNmWc >>148
同じじゃなく遅くなると認めろよ
同じじゃなく遅くなると認めろよ
150デフォルトの名無しさん
2022/09/03(土) 10:28:32.67ID:ypKv7OZi151デフォルトの名無しさん
2022/09/03(土) 10:32:05.60ID:iVxWWKBi いつもの嘘つき複オジに必死に突っかかるアホ
どっちもどっち
どっちもどっち
152デフォルトの名無しさん
2022/09/03(土) 10:49:11.71ID:qprMzk1R >>148
> そうでなく危険な範囲外のアクセスになりうるとRustコンパイラが判断すれば正しく境界チェックを行なう
C言語では外部からもらったデータは仕様で配列範囲に入るのが確実だからチェックをしないとかあるんだけど、Rustコンパイラとやらは仕様書まで読み込んでくれるのかなw
> そうでなく危険な範囲外のアクセスになりうるとRustコンパイラが判断すれば正しく境界チェックを行なう
C言語では外部からもらったデータは仕様で配列範囲に入るのが確実だからチェックをしないとかあるんだけど、Rustコンパイラとやらは仕様書まで読み込んでくれるのかなw
153デフォルトの名無しさん
2022/09/03(土) 10:52:15.27ID:BHvUMyM5 境界チェックによるペナルティが気になる箇所なら境界チェックのないget_unchecked使えば良いのでは
デフォルトは安全側に倒されてるけどプログラマの裁量で速度を優先することもできるので、適材適所でどちらを使うか選べば良い
C++でも境界チェックありのat()があるから、デフォルトが逆なだけでできることは同じだよね
デフォルトは安全側に倒されてるけどプログラマの裁量で速度を優先することもできるので、適材適所でどちらを使うか選べば良い
C++でも境界チェックありのat()があるから、デフォルトが逆なだけでできることは同じだよね
154デフォルトの名無しさん
2022/09/03(土) 11:03:40.39ID:7pWn865H 結局プログラマーの手に委ねていると必ずミスが起きうるから
境界チェック省略の件も含めて全てについて
コンパイラが分析して安全かどうか判定できた時にはチェックを省略し
そうでない場合は安全のために自動的にチェックをするのがベスト
という方向へ向かっているんじゃないかな
GoogleやMicrosoftがRust言語でOS開発
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
【脆弱性の70%がメモリー管理バグに起因】
GoogleによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに起因するという。
同様にマMicrosoftも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関するバグに起因すると述べている。
C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と考えて、Rustを採用するに至ったというわけだ。
境界チェック省略の件も含めて全てについて
コンパイラが分析して安全かどうか判定できた時にはチェックを省略し
そうでない場合は安全のために自動的にチェックをするのがベスト
という方向へ向かっているんじゃないかな
GoogleやMicrosoftがRust言語でOS開発
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
【脆弱性の70%がメモリー管理バグに起因】
GoogleによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに起因するという。
同様にマMicrosoftも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関するバグに起因すると述べている。
C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と考えて、Rustを採用するに至ったというわけだ。
155デフォルトの名無しさん
2022/09/03(土) 11:21:29.31ID:Vwpr/aZb マジキチだった
156デフォルトの名無しさん
2022/09/03(土) 11:53:26.95ID:MAChL+qh157デフォルトの名無しさん
2022/09/03(土) 11:55:04.03ID:OwwDkoRs この話題、ここ数年で最もレベル低いんじゃないか?大丈夫か?
158デフォルトの名無しさん
2022/09/03(土) 12:31:15.03ID:ytBZTWHu Rustは安心安全でC言語と同等の速度ってことでFAだな
159デフォルトの名無しさん
2022/09/03(土) 12:34:45.63ID:wLxz63Y2 体言止めおじさん
160デフォルトの名無しさん
2022/09/03(土) 12:53:59.17ID:91ZlUxrs 最近のレベル低下には目を見張るものがあるな
161デフォルトの名無しさん
2022/09/03(土) 12:58:26.77ID:91ZlUxrs >>142
>array[i*2]の例は危険な範囲外アクセスとなるコードだから境界チェックをするRustに軍配が上がるね
array[i*2]の例は危険な範囲外アクセスとなるコードだから境界チェックをしないCに軍配が上がる
が正しい
>array[i*2]の例は危険な範囲外アクセスとなるコードだから境界チェックをするRustに軍配が上がるね
array[i*2]の例は危険な範囲外アクセスとなるコードだから境界チェックをしないCに軍配が上がる
が正しい
162デフォルトの名無しさん
2022/09/03(土) 13:35:09.09ID:EiHHJiSw いやはや、時代についていけないCオジが暴れてるようだなw
Cオジもさぁ、自分の世界に引きこもってないでもっと外の世界見ないとねw
Cオジもさぁ、自分の世界に引きこもってないでもっと外の世界見ないとねw
163デフォルトの名無しさん
2022/09/03(土) 13:37:41.33ID:EiHHJiSw Cこそ最強!
1個でもCより遅いケースあったらダメね!
1個でもCより遅いケースあったらダメね!
164デフォルトの名無しさん
2022/09/03(土) 13:38:08.80ID:mKqqa6mD 次世代言語スレなんだから変数の境界越えたアクセスは落とす一択だろ。
もうちょっと別の話したいわ。
もうちょっと別の話したいわ。
165デフォルトの名無しさん
2022/09/03(土) 13:38:32.50ID:EiHHJiSw 1個でもCより遅い場合あったら、他にメリットあっても意味ないから!
166デフォルトの名無しさん
2022/09/03(土) 13:50:50.43ID:uXzSzfSl 誰も>>91の突っ込み無いんかよ。
Rustが速いのは非常にキツイxor条件を満たす範囲だけで、そこを超えるのはとても面倒。そこを無視して「Rustは安全で高速」とか言うのは詐欺じゃね?
あと、次世代スレなのに何でRustとcだけの比較なんだよ。rangeの最適化なんてイマドキc++ですらやるんじゃないの?
Rustが速いのは非常にキツイxor条件を満たす範囲だけで、そこを超えるのはとても面倒。そこを無視して「Rustは安全で高速」とか言うのは詐欺じゃね?
あと、次世代スレなのに何でRustとcだけの比較なんだよ。rangeの最適化なんてイマドキc++ですらやるんじゃないの?
167デフォルトの名無しさん
2022/09/03(土) 14:31:36.61ID:RWiDbqEQ このスレは何もかもをRustと比較したがる信者とそれに反応してしまうバカに乗っ取られた隔離スレです
次世代言語スレではありません
次世代言語の話がしたいかたはこちらへ↓
次世代言語27 Nim Zig Pony Carbon Gleam
https://mevius.5ch.net/test/read.cgi/tech/1659660050/
次世代言語スレではありません
次世代言語の話がしたいかたはこちらへ↓
次世代言語27 Nim Zig Pony Carbon Gleam
https://mevius.5ch.net/test/read.cgi/tech/1659660050/
168デフォルトの名無しさん
2022/09/03(土) 14:36:16.07ID:peyYEDe5 ていうかこいつほんとにRust使ってプログラミングできるの?って思ったんだけど
あまりにも頭が残念すぎて論理的思考の必要なプログラミングができるとは思えない
あまりにも頭が残念すぎて論理的思考の必要なプログラミングができるとは思えない
169デフォルトの名無しさん
2022/09/03(土) 14:49:28.41ID:BHvUMyM5170デフォルトの名無しさん
2022/09/03(土) 17:15:49.49ID:jD7rh1Hd >>167
最終レスが8月18日とか終わってんじゃねえか
最終レスが8月18日とか終わってんじゃねえか
171デフォルトの名無しさん
2022/09/03(土) 17:17:49.88ID:jD7rh1Hd TypeScriptは次世代なのか?
そろそろ枯れてきてるし何ならバニラが復権しかけてんだが
そろそろ枯れてきてるし何ならバニラが復権しかけてんだが
172デフォルトの名無しさん
2022/09/03(土) 17:37:42.10ID:ytBZTWHu >>169
そんなこと言ったらRsutを使う場面が無くなっちゃうだろ
そんなこと言ったらRsutを使う場面が無くなっちゃうだろ
173デフォルトの名無しさん
2022/09/03(土) 18:07:45.82ID:k38NcUnV Rustはスライスに対して境界チェックをしないでアクセスする方法もunsafeで用意されている
つまり最適なプログラミング方法はC/C++を絶対に使わずに全てをRustで記述し
「コンパイラによる安全保証で最適化により安全に境界チェックを省略してくれる部分以外」かつ「人間による安全保証で境界チェックを不要としたい部分」のところのみunsafeで人間が安全保証し
その部分以外は全てコンパイラにより自動的にあらゆるメモリ安全保証させるのが最適な方法となる
つまり最適なプログラミング方法はC/C++を絶対に使わずに全てをRustで記述し
「コンパイラによる安全保証で最適化により安全に境界チェックを省略してくれる部分以外」かつ「人間による安全保証で境界チェックを不要としたい部分」のところのみunsafeで人間が安全保証し
その部分以外は全てコンパイラにより自動的にあらゆるメモリ安全保証させるのが最適な方法となる
174デフォルトの名無しさん
2022/09/03(土) 18:32:15.93ID:5Mn7+zh6175デフォルトの名無しさん
2022/09/03(土) 18:40:11.28ID:ytBZTWHu176デフォルトの名無しさん
2022/09/03(土) 19:00:48.70ID:2joIss6C177デフォルトの名無しさん
2022/09/03(土) 19:10:31.55ID:UqPpASXs178デフォルトの名無しさん
2022/09/03(土) 19:29:43.18ID:MArlT4a7 >>174
Cのコードを書く必要はない
Rustには一部エリアのみプログラマーに安全性の保証の義務を負わせるunsafeブロックがありCと同じことができる
ベンチも#[bench]等ですぐ比較できるから速さにシビアな場合は本件に限らずアルゴリズムの差異も含めてコストをかけるだろう
その点はどんな言語でも同じ
Cのコードを書く必要はない
Rustには一部エリアのみプログラマーに安全性の保証の義務を負わせるunsafeブロックがありCと同じことができる
ベンチも#[bench]等ですぐ比較できるから速さにシビアな場合は本件に限らずアルゴリズムの差異も含めてコストをかけるだろう
その点はどんな言語でも同じ
179デフォルトの名無しさん
2022/09/03(土) 19:37:31.78ID:+aRAkEDC180デフォルトの名無しさん
2022/09/03(土) 20:06:47.23ID:BHvUMyM5181デフォルトの名無しさん
2022/09/03(土) 20:09:49.33ID:amOq/bcL >>109のコードを見てみたが書き方が酷いな
とりあえずそれと全く同じ関数仕様に合わせるとして
Rustならもっと簡潔にこのように書く
fn max_value_slice_vw(v: &[u32], w: &[u32]) -> u32 {
std::iter::zip(v, w)
.map(|(m, n)| m + n)
.max()
.unwrap_or_default()
}
C言語バージョンより遥かに分かりやすいし
通常Rustでは返り値をu32でなくOption<u32>とするから最後のunwrap_or_default()も不要となる
これでC言語バージョンと全く同じ結果を得られるし
境界チェックも行われないし
そのC言語バージョンと全く同等のアセンブリコードが生成されることも確認できる
つまり今回の>>109の件もRustとCは同じ速さで動作する
とりあえずそれと全く同じ関数仕様に合わせるとして
Rustならもっと簡潔にこのように書く
fn max_value_slice_vw(v: &[u32], w: &[u32]) -> u32 {
std::iter::zip(v, w)
.map(|(m, n)| m + n)
.max()
.unwrap_or_default()
}
C言語バージョンより遥かに分かりやすいし
通常Rustでは返り値をu32でなくOption<u32>とするから最後のunwrap_or_default()も不要となる
これでC言語バージョンと全く同じ結果を得られるし
境界チェックも行われないし
そのC言語バージョンと全く同等のアセンブリコードが生成されることも確認できる
つまり今回の>>109の件もRustとCは同じ速さで動作する
182デフォルトの名無しさん
2022/09/03(土) 20:17:46.35ID:yFkzTBSQ183デフォルトの名無しさん
2022/09/03(土) 20:34:30.71ID:0512mxP9 「最適化度合い」ってあれだな
「クイックソートは最悪のケースの計算量が多過ぎる」みたいな
ヒープソート最強伝説に似ている
「クイックソートは最悪のケースの計算量が多過ぎる」みたいな
ヒープソート最強伝説に似ている
184デフォルトの名無しさん
2022/09/03(土) 20:45:21.45ID:GmjcSeRW185デフォルトの名無しさん
2022/09/03(土) 20:48:32.94ID:nzn5OhxI >>181
RustはわかりやすくシンプルにプログラミングできてCと同じ速度なのが素晴らしいね
RustはわかりやすくシンプルにプログラミングできてCと同じ速度なのが素晴らしいね
186デフォルトの名無しさん
2022/09/03(土) 20:51:48.37ID:bnXlFS4K >>185もはや自虐ネタ。嫌味ですか?
187デフォルトの名無しさん
2022/09/03(土) 20:52:15.80ID:jD7rh1Hd Rustをむやみに褒めてるやつがアホすぎてRustのネガティブキャンペーンにしか見えない件
188デフォルトの名無しさん
2022/09/03(土) 21:07:27.69ID:ze3FTyL9 こういう争いは同じレベルのやつ同士でしか起きない
お互いに相手がアホだと思ってるけど両方同レベルのアホ
お互いに相手がアホだと思ってるけど両方同レベルのアホ
189デフォルトの名無しさん
2022/09/03(土) 21:10:15.24ID:amOq/bcL for文を使わずにメソッドチェーンで書いたことが気に入らないのならば
>>181はfor文を使って以下のように書ける
fn max_value_slice_vw2(v: &[u32], w: &[u32]) -> u32 {
let mut max = 0;
for (m, n) in std::iter::zip(v, w) {
if max < n + m {
max = n + m;
}
}
max
}
これもC言語バージョンと同じ動作をし
同等のアセンブリコードが生成されることも確認できる
>>181はfor文を使って以下のように書ける
fn max_value_slice_vw2(v: &[u32], w: &[u32]) -> u32 {
let mut max = 0;
for (m, n) in std::iter::zip(v, w) {
if max < n + m {
max = n + m;
}
}
max
}
これもC言語バージョンと同じ動作をし
同等のアセンブリコードが生成されることも確認できる
190デフォルトの名無しさん
2022/09/03(土) 21:13:41.03ID:sVwwSPBV せめてID変えずにやってくれればいいのにな
何回NGさせるんだか
何回NGさせるんだか
191デフォルトの名無しさん
2022/09/03(土) 21:15:53.68ID:jlSkT3Xm192デフォルトの名無しさん
2022/09/03(土) 21:25:28.83ID:jfkeSYrB Cだと速いけどRustだと遅くなるケースって存在しないの?
誰かそういう例を作ってほしい
ここまでRustがCと同じ速さで書ける例ばかりだから
誰かそういう例を作ってほしい
ここまでRustがCと同じ速さで書ける例ばかりだから
193デフォルトの名無しさん
2022/09/03(土) 21:30:23.63ID:fcrVCCYN 本人はバレてないと思ってるらしいw
194デフォルトの名無しさん
2022/09/03(土) 21:34:03.97ID:hQBDJOi4195デフォルトの名無しさん
2022/09/03(土) 21:55:58.00ID:wxRR+ldD Rustはfor文自体がイテレータを使うから、
for i in 0..s.len() {
println!("{}", s[i]);
}
とインデックスを使う書き方をするのは非常に稀で、
これはインデックスを使わず、
for n in s {
println!("{}", n);
}
と書くのがRustでは普通だから、
インデックス議論自体があまり意味のないものに思える。
そしてどちらの書き方をしてもCコードと同速度。
for i in 0..s.len() {
println!("{}", s[i]);
}
とインデックスを使う書き方をするのは非常に稀で、
これはインデックスを使わず、
for n in s {
println!("{}", n);
}
と書くのがRustでは普通だから、
インデックス議論自体があまり意味のないものに思える。
そしてどちらの書き方をしてもCコードと同速度。
196デフォルトの名無しさん
2022/09/03(土) 22:05:33.75ID:lGqTIi1A Rustがそんなに速いならなんで競プロはC++一択なの
197デフォルトの名無しさん
2022/09/03(土) 22:19:33.41ID:V+KjjP+f198デフォルトの名無しさん
2022/09/03(土) 22:30:44.07ID:0512mxP9 まあ、型を正確に宣言しても速くならないし遅くなるというのがもし本当なら
バニラJSが復権するのもPythonが支持されるのも当然といえば当然
バニラJSが復権するのもPythonが支持されるのも当然といえば当然
199デフォルトの名無しさん
2022/09/03(土) 22:31:15.35ID:pNlcpp9D >>196
解説本がc++が多いからかな
解説本がc++が多いからかな
200デフォルトの名無しさん
2022/09/03(土) 22:34:08.49ID:zAI/jpLH 例えば競プロAtCoderでABC182-E問題 i行目j列目のマス(i,j)を扱う問題
提出された各プログラミング言語別の実行時間分布
https://pbs.twimg.com/media/EmYvG8aVkAMdfFG.jpg
提出された各プログラミング言語別の実行時間分布
https://pbs.twimg.com/media/EmYvG8aVkAMdfFG.jpg
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【コメ】卸売業者「簡単に安売りできない」 「大暴落起きれば大赤字に」 JA「新米の販売進度が近年になく遅い。コメの回転が悪い」 [Hitzeschleier★]
- 中国から訓練の連絡あったが、区域など具体的な内容知らされず=小泉防衛相 [♪♪♪★]
- 空自機レーダー照射、音声データ公開 中国 ★4 [蚤の市★]
- 「残クレ」でマイホーム、国が銀行向け保険 新型住宅ローン普及促す -日経 ★2 [少考さん★]
- 【高市早苗総理】食料品消費減税に慎重「今すぐ約束できない」…「物価上昇率は徐々に落ち着いていくと見込んでいる」 [Hitzeschleier★]
- 高市早苗総理「農水大臣が大好きなおこめ券」 野党が“おこめ券”追及 [Hitzeschleier★]
- 【高市速報】小泉進次郎「事前に中国軍から飛行訓練を開始すると連絡があったのは事実」 [931948549]
- 【正論】高市さん「『企業献金について与野党で協議する』という答弁は石破個人のものであり、もはや無効」特定野党を完全論破 [519511584]
- 【高市悲報】キャバクラ維新奥下、調査研究費としてトケドロ高橋洋一チャンネルにバチーン!と課金😤 [359965264]
- 【悲報】高市早苗政権に文春砲が連発! [115996789]
- 【正論】高市さん「長期金利が上がり続けていくことよりも、日本が成長していく方が大事」 [519511584]
- 自作pc時期が悪いおじさん、絶命 [329329848]
