公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
公式ドキュメント
https://www.rust-lang.org/learn
Web上の実行環境
https://play.rust-lang.org
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※次スレは原則>>980が立てること
前スレ
Rust part20
https://mevius.2ch.net/test/read.cgi/tech/1677771928/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.2ch.net/test/read.cgi/tech/1514107621/
探検
Rust part21
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2023/08/15(火) 22:24:39.45ID:xzxy4cgp386デフォルトの名無しさん
2023/09/26(火) 21:18:52.63ID:rDjR9GdF 最適化で計測対象の処理が丸ごと消えてないかな
どこかでデータのサイズとか集計とか出力してればいいけど
どこかでデータのサイズとか集計とか出力してればいいけど
387デフォルトの名無しさん
2023/09/26(火) 21:22:16.85ID:sfzsNV4F さすがそこまで速くないよね
C#ももっと速いような気がする
C#ももっと速いような気がする
388デフォルトの名無しさん
2023/09/26(火) 21:40:15.73ID:aJs6t/KK コードの問題かベンチマークの問題だね
389デフォルトの名無しさん
2023/09/26(火) 21:41:15.28ID:K0prie5d390デフォルトの名無しさん
2023/09/26(火) 21:41:38.03ID:aJs6t/KK391デフォルトの名無しさん
2023/09/26(火) 21:56:19.26ID:liEPyEVD392デフォルトの名無しさん
2023/09/26(火) 21:59:59.97ID:liEPyEVD つか、goってリリースビルドないやろ?
コンパイルも一瞬でへ?ってなるわ
それぞれ30行未満のコードだけど..
コンパイルも一瞬でへ?ってなるわ
それぞれ30行未満のコードだけど..
393デフォルトの名無しさん
2023/09/26(火) 22:29:35.41ID:liEPyEVD https://controlc.com/77570dbc
goだとこんな感じ
goだとこんな感じ
394デフォルトの名無しさん
2023/09/26(火) 22:43:29.67ID:liEPyEVD ああ、ごめんC#は嘘でしたすみません
3msになりました
3msになりました
395デフォルトの名無しさん
2023/09/26(火) 22:55:30.68ID:liEPyEVD Rustは最強で
C#はメモリ使用量多いがMSが最適化ガンバッテル
Goはメモリ使用量少なくて言語仕様がシンプルだがC#に負けたり...
C#はメモリ使用量多いがMSが最適化ガンバッテル
Goはメモリ使用量少なくて言語仕様がシンプルだがC#に負けたり...
396デフォルトの名無しさん
2023/09/26(火) 23:05:14.16ID:EQtG/kil 意味のないベンチマークだね
ちなみにこういうのはNimが速いと思うよ
結局こういうのってコンパイラの最適化の勝負をしているだけだから
Rustが速いというよりはLLVMが速いだけ
Zigとかでも同じスピードが出るはず
その代わりにコンパイル速度が遅いというデメリットがあるからこれは単なるトレードオフで、用途に応じて適した言語を選択するのが重要ってだけだね
WebAPI作るならIOが結局ボトルネックになるからパフォーマンス気にするにしても別にスクリプト言語じゃないならなんでもいいのよね
好きな言語にすればいいと思う
ちなみにこういうのはNimが速いと思うよ
結局こういうのってコンパイラの最適化の勝負をしているだけだから
Rustが速いというよりはLLVMが速いだけ
Zigとかでも同じスピードが出るはず
その代わりにコンパイル速度が遅いというデメリットがあるからこれは単なるトレードオフで、用途に応じて適した言語を選択するのが重要ってだけだね
WebAPI作るならIOが結局ボトルネックになるからパフォーマンス気にするにしても別にスクリプト言語じゃないならなんでもいいのよね
好きな言語にすればいいと思う
397デフォルトの名無しさん
2023/09/26(火) 23:08:16.82ID:kLEETtIu それはともかく
NimはRustに対して意味のあるアドバンテージ皆無でNimだけは要らん
NimはRustに対して意味のあるアドバンテージ皆無でNimだけは要らん
398デフォルトの名無しさん
2023/09/26(火) 23:14:09.15ID:liEPyEVD まぁ、データベースはおもいっきし叩くね
最初は最強言語じゃなくてわかりやすい2番あたりの言語でいこうと思ってるんだけたんだけど
で、1番ははっきりRustっぽいからわかりやすいからいんだけど、
2番(C#,Go?)がはっきりしないから1番の言語でいいのかなと
最大の目的はサーバー費用を押さえられるように
最初は最強言語じゃなくてわかりやすい2番あたりの言語でいこうと思ってるんだけたんだけど
で、1番ははっきりRustっぽいからわかりやすいからいんだけど、
2番(C#,Go?)がはっきりしないから1番の言語でいいのかなと
最大の目的はサーバー費用を押さえられるように
399デフォルトの名無しさん
2023/09/26(火) 23:14:24.83ID:gNMcg380 Nimはオフサイドルールってだけで試す気にもならないんだよな…
400デフォルトの名無しさん
2023/09/26(火) 23:52:14.82ID:lFc5NXyg >>396
多数の非同期タスクを偏らずスレッド間でスチールしてスケジューリングできるのは現状GoとRustしかない
小規模ならGoでもよいがそれ以上だと言語機能が貧弱なGoは辛くなってきてRustの独壇場
多数の非同期タスクを偏らずスレッド間でスチールしてスケジューリングできるのは現状GoとRustしかない
小規模ならGoでもよいがそれ以上だと言語機能が貧弱なGoは辛くなってきてRustの独壇場
401デフォルトの名無しさん
2023/09/27(水) 00:09:38.71ID:8IPpP98U402デフォルトの名無しさん
2023/09/27(水) 00:11:19.90ID:8IPpP98U この妄想も延々言ってたけどやっと黙るのかな?
470: デフォルトの名無しさん sage 2023/09/26(火) 09:57:28.51 ID:ycG3j/g+
>>469
IaaSの一部にそういうケースがありうるだけだぞ
PaaS (FaaS)は基本的にメモリ使用量✕実行時間で料金が決まる
メモリ使用量は少なければ少ないほどコストに優れている
470: デフォルトの名無しさん sage 2023/09/26(火) 09:57:28.51 ID:ycG3j/g+
>>469
IaaSの一部にそういうケースがありうるだけだぞ
PaaS (FaaS)は基本的にメモリ使用量✕実行時間で料金が決まる
メモリ使用量は少なければ少ないほどコストに優れている
403デフォルトの名無しさん
2023/09/27(水) 00:29:08.13ID:MfhnDtnO 複オジは相変わらず嘘ばっかり
成長しないね
成長しないね
404デフォルトの名無しさん
2023/09/27(水) 00:38:28.22ID:+nRBKi9H AIにRust生成させてGoと比較してみたけどmarshal以外は変わらないな (goccy/json使用)
x86でやってる?ARMだと違うのかも
(俺はUbuntu x86/64)
https://pastebin.com/yV96KjSw
$ go run ./main.go
1187 [μs]
268419000 [bytes] 467 [μs]
$ cargo run --release
1347 [μs]
263672000 [bytes] 255 [μs]
x86でやってる?ARMだと違うのかも
(俺はUbuntu x86/64)
https://pastebin.com/yV96KjSw
$ go run ./main.go
1187 [μs]
268419000 [bytes] 467 [μs]
$ cargo run --release
1347 [μs]
263672000 [bytes] 255 [μs]
405デフォルトの名無しさん
2023/09/27(水) 00:56:55.88ID:+nRBKi9H 俺の環境だとgoccy/jsonにすることで4倍速くなったけど何が違うんだろうね
goccy/json
1129 [μs]
268419000 [bytes] 446 [μs]
標準json
4125 [μs]
268419000 [bytes] 533 [μs]
go-json-experiment/json
3446 [μs]
263609000 [bytes] 745 [μs]
goccy/json
1129 [μs]
268419000 [bytes] 446 [μs]
標準json
4125 [μs]
268419000 [bytes] 533 [μs]
go-json-experiment/json
3446 [μs]
263609000 [bytes] 745 [μs]
406デフォルトの名無しさん
2023/09/27(水) 01:02:33.77ID:+nRBKi9H これにしたらRustより早くなったわ
結局これっていかに最適化しているかってだけだと思う
https://github.com/bytedance/sonic
[Go sonic json]
914 [μs]
263609000 [bytes] 209 [μs]
結局これっていかに最適化しているかってだけだと思う
https://github.com/bytedance/sonic
[Go sonic json]
914 [μs]
263609000 [bytes] 209 [μs]
407デフォルトの名無しさん
2023/09/27(水) 01:06:34.20ID:8IPpP98U 気づくのが遅い
408デフォルトの名無しさん
2023/09/27(水) 01:44:16.58ID:jtGLjNq+409デフォルトの名無しさん
2023/09/27(水) 01:51:26.25ID:jtGLjNq+ WebAPIでgoで行く決意ができました
本当にお騒がせしました
本当にお騒がせしました
410デフォルトの名無しさん
2023/09/27(水) 04:55:49.67ID:UdUnwuun YouTube で有名な雑食系エンジニア・KENTA が、既に言ってる。
キャリアパスは、Ruby on Rails → Go のみ
Ruby/Goの神・HashiCorp のMitchell Hashimoto がそう。
Ruby製のVagrant → Go製のTerraform。
今は、Goプログラマーしか求めていない
Rust/Elixir は普及のキャズムを超えなかった。
超えたのは、Goだけ
キャリアパスは、Ruby on Rails → Go のみ
Ruby/Goの神・HashiCorp のMitchell Hashimoto がそう。
Ruby製のVagrant → Go製のTerraform。
今は、Goプログラマーしか求めていない
Rust/Elixir は普及のキャズムを超えなかった。
超えたのは、Goだけ
411デフォルトの名無しさん
2023/09/27(水) 17:50:20.18ID:wGZOY1wb まあビルド時間の重要性はちょこちょこ一人で作ってるやつは理解できんわな。
412デフォルトの名無しさん
2023/09/27(水) 18:56:48.41ID:CCaLLXi3 仕事なら相応に強力なマシンかレンダリングサーバがあるだろ
413デフォルトの名無しさん
2023/09/27(水) 21:44:37.94ID:fWGZRw8C レンダリングサーバーは関係なさすぎ
414デフォルトの名無しさん
2023/09/27(水) 22:03:34.78ID:vmit0gpI ビルドサーバーと間違えたのかもね
415デフォルトの名無しさん
2023/09/28(木) 18:29:13.32ID:gS/5M63X MARCHを受けるために東大の過去問を練習するような意識高い系バカ
416デフォルトの名無しさん
2023/10/06(金) 11:57:36.28ID:Zl0hPCVy 一体誰がRustを推しているのか?
中國?
中國?
417デフォルトの名無しさん
2023/10/06(金) 13:12:35.08ID:2p+njRVB 関数型と手続き型のいいとこ取りしたいプログラマだろ
情報科学の先進国なら中国に限らず一定数いるはず
情報科学の先進国なら中国に限らず一定数いるはず
418デフォルトの名無しさん
2023/10/06(金) 16:38:53.65ID:AJI+rgso ネットインフラが次々とRust製になっていってる
>【CDN世界トップシェアCloudflare】
>https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html
>CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、
>同社自身がRust製のHTTPプロキシである「Pingora」を開発し利用していることを明らかにしました。
>【クラウド世界トップシェアAWS】
>https://japan.zdnet.com/article/35183866/
>Rustで構築されたAWSサービスの例としては、
>コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
>「Amazon Simple Storage Service(S3)」、
>「Amazon Elastic Compute Cloud(EC2)」、
>コンテンツ配信ネットワーク「Amazon CloudFront」、
>LinuxベースのコンテナーOS「Bottlerocket」などがある。
>【CDN世界トップシェアCloudflare】
>https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html
>CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、
>同社自身がRust製のHTTPプロキシである「Pingora」を開発し利用していることを明らかにしました。
>【クラウド世界トップシェアAWS】
>https://japan.zdnet.com/article/35183866/
>Rustで構築されたAWSサービスの例としては、
>コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
>「Amazon Simple Storage Service(S3)」、
>「Amazon Elastic Compute Cloud(EC2)」、
>コンテンツ配信ネットワーク「Amazon CloudFront」、
>LinuxベースのコンテナーOS「Bottlerocket」などがある。
419デフォルトの名無しさん
2023/10/06(金) 20:34:57.35ID:hdhWn3/E 関数型の良いとことるの諦めた言語って感じだけどw
初期の頃はocamlでコンパイラ作られてたらしいのに
MLの匂いさえ残ってない単なる手続き化型言語だわ
初期の頃はocamlでコンパイラ作られてたらしいのに
MLの匂いさえ残ってない単なる手続き化型言語だわ
420デフォルトの名無しさん
2023/10/06(金) 20:35:16.84ID:hdhWn3/E 関数型の良いとことるの諦めた言語って感じだけどw
初期の頃はocamlでコンパイラ作られてたらしいのに
MLの匂いさえ残ってない単なる手続き化型言語だわ
初期の頃はocamlでコンパイラ作られてたらしいのに
MLの匂いさえ残ってない単なる手続き化型言語だわ
421デフォルトの名無しさん
2023/10/06(金) 21:14:33.58ID:b1wSOXuc スタックフレームに着目したのはプラスだけど、下手にスタックフレームを隠そうとしているのはマイナス。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
422デフォルトの名無しさん
2023/10/06(金) 21:15:11.56ID:b1wSOXuc スタックフレームに着目したのはプラスだけど、下手にスタックフレームを隠そうとしているのはマイナス。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
423デフォルトの名無しさん
2023/10/06(金) 23:16:24.42ID:tE7CLicd mut 入れたのが間違いなんだろ
424デフォルトの名無しさん
2023/10/06(金) 23:30:10.29ID:hdhWn3/E 関数型に関してはscalaのほうがよっぽど意欲的だよ
def qsort(list: List[Int]): List[Int] = list match
case Nil => Nil
case pivot :: tail =>
val (smaller, rest) = tail.partition(_ < pivot)
qsort(smaller) ::: pivot :: qsort(rest)
たとえば↑こういうのとか
def qsort(list: List[Int]): List[Int] = list match
case Nil => Nil
case pivot :: tail =>
val (smaller, rest) = tail.partition(_ < pivot)
qsort(smaller) ::: pivot :: qsort(rest)
たとえば↑こういうのとか
425デフォルトの名無しさん
2023/10/07(土) 00:34:46.36ID:Hyqci1qG 関数型というよりはリスト型言語だな
426デフォルトの名無しさん
2023/10/07(土) 01:56:24.14ID:a3LzK6ia システムプログラミングのための言語なので純粋に関数型な要素だけを求めるなら別の言語を当たった方が良い
427デフォルトの名無しさん
2023/10/07(土) 02:12:44.80ID:QajUcOD9 リスト型つまりLinkedListをメインにすると利便さと引き換えに遅い問題とガベージが出まくる問題がある
Rustはリスト型メインにしなくて正解
Rustはリスト型メインにしなくて正解
428デフォルトの名無しさん
2023/10/07(土) 04:42:48.81ID:+bTugVnw GCを前提にしない仕様の上に積み上げなくてはならないという側面から見ると、わりかしよくやっている方なんじゃなかろうか……知らんけど
429デフォルトの名無しさん
2023/10/07(土) 06:29:51.58ID:GJ9LXcgc 自称情強底辺者「Rustでhello worldかける俺カコイイ」
真の成功者「スイカゲームでボロ儲けしました」
真の成功者「スイカゲームでボロ儲けしました」
430デフォルトの名無しさん
2023/10/07(土) 06:46:44.80ID:bWLG2vp7 mut無しとはこういうことか
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=a5753729862ae878a1cf011314e90f3e
fn qsort<T: Copy+Ord>(list: &[T]) -> Vec<T> {
match list {
[pivot, ..] => {
let (smaller, rest): (Vec<T>, Vec<T>) =
list[1..].iter().partition(|&i| i < pivot);
[qsort(&smaller), vec![*pivot], qsort(&rest)].concat()
},
_ => vec![]
}
}
fn main() {
let list = [9, 0, 7, 3, 6, 1, 2, 4, 8, 5];
println!("{:?}", list);
println!("{:?}", qsort(&list));
}
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=a5753729862ae878a1cf011314e90f3e
fn qsort<T: Copy+Ord>(list: &[T]) -> Vec<T> {
match list {
[pivot, ..] => {
let (smaller, rest): (Vec<T>, Vec<T>) =
list[1..].iter().partition(|&i| i < pivot);
[qsort(&smaller), vec![*pivot], qsort(&rest)].concat()
},
_ => vec![]
}
}
fn main() {
let list = [9, 0, 7, 3, 6, 1, 2, 4, 8, 5];
println!("{:?}", list);
println!("{:?}", qsort(&list));
}
431デフォルトの名無しさん
2023/10/07(土) 09:44:47.17ID:WqNjBTZw まあ今時ランタイム速度でそこまで差がつくことはないわな。
ガベコレの実行タイミングが問題になることは結構あると思うけど。
ガベコレの実行タイミングが問題になることは結構あると思うけど。
432デフォルトの名無しさん
2023/10/07(土) 11:17:12.27ID:fuWtUzBR アロケートしまくリングやな
433デフォルトの名無しさん
2023/10/07(土) 12:06:59.60ID:pov02R// ランタイムサポートが極まってきたからこそ
極めきれない部分の差が目立ってきたんだよ。
極めきれない部分の差が目立ってきたんだよ。
434デフォルトの名無しさん
2023/10/07(土) 14:19:35.27ID:koj+veBs XYZ座標みたいな単純だけどプリミティブでない大量のデータの配列を作りたいときに
1つ1つをオブジェクトにしないといけないGC言語は放り投げたくなる
座標なら最悪プリミティブに分解して自分で並べれば済むけど型が混ざると詰む
1つ1つをオブジェクトにしないといけないGC言語は放り投げたくなる
座標なら最悪プリミティブに分解して自分で並べれば済むけど型が混ざると詰む
435デフォルトの名無しさん
2023/10/07(土) 15:18:57.75ID:AO4ZOvxF436デフォルトの名無しさん
2023/10/07(土) 15:43:47.56ID:Ozx346pn Rustのはmutなしにした場合の問題提起のための悪い例だろ
437デフォルトの名無しさん
2023/10/07(土) 15:51:39.94ID:O3XDw4H3438デフォルトの名無しさん
2023/10/07(土) 16:42:12.14ID:2ow1Jojj ocamlだとこんな感じかな?
let rec qsort = function
| [] -> []
| pivot :: tail ->
let smaller, rest = List.partition ((>) pivot) tail in
qsort smaller @ pivot :: qsort rest
>>424 scala比較のためそのままコピペ
def qsort(list: List[Int]): List[Int] = list match
case Nil => Nil
case pivot :: tail =>
val (smaller, rest) = tail.partition(_ < pivot)
qsort(smaller) ::: pivot :: qsort(rest)
scalaすごい頑張ってると思うわ
let rec qsort = function
| [] -> []
| pivot :: tail ->
let smaller, rest = List.partition ((>) pivot) tail in
qsort smaller @ pivot :: qsort rest
>>424 scala比較のためそのままコピペ
def qsort(list: List[Int]): List[Int] = list match
case Nil => Nil
case pivot :: tail =>
val (smaller, rest) = tail.partition(_ < pivot)
qsort(smaller) ::: pivot :: qsort(rest)
scalaすごい頑張ってると思うわ
439デフォルトの名無しさん
2023/10/07(土) 23:59:36.96ID:QajUcOD9 >>430
RustはそのようにOCamlやScalaと同等に書くことも容易な点がいいな
同時にその方法によりRustで記述すると大量にVec(またはリストを実現する何か)を使い捨てていることが見える
つまりGC言語ではガベージが大量に出る
RustはそのようにOCamlやScalaと同等に書くことも容易な点がいいな
同時にその方法によりRustで記述すると大量にVec(またはリストを実現する何か)を使い捨てていることが見える
つまりGC言語ではガベージが大量に出る
440デフォルトの名無しさん
2023/10/08(日) 02:42:17.66ID:9NUoKPD/ くすくす
441デフォルトの名無しさん
2023/10/08(日) 08:07:41.64ID:WAd1DVRF 同等に書けてないでしょw
442デフォルトの名無しさん
2023/10/08(日) 09:57:45.64ID:ShBUnVvx443デフォルトの名無しさん
2023/10/08(日) 10:16:57.79ID:CrdCteTP 次はHaskellまたはErlangでおながいしまつ
444デフォルトの名無しさん
2023/10/08(日) 10:38:24.03ID:lCt9aeoq in-placeなqsort書いてよ
445デフォルトの名無しさん
2023/10/08(日) 10:39:23.48ID:WAd1DVRF >>443
Haskell
qsort [] = []
qsort (x:xs) = qsort [y | y <- xs, y < x] ++ [x] ++ qsort [y | y <- xs, y >= x]
Erlang
qsort([]) -> [];
qsort([X|Xs]) ->
qsort([ Y || Y <- Xs, Y < X]) ++ [X] ++ qsort([ Y || Y <- Xs, Y >= X]).
Haskell
qsort [] = []
qsort (x:xs) = qsort [y | y <- xs, y < x] ++ [x] ++ qsort [y | y <- xs, y >= x]
Erlang
qsort([]) -> [];
qsort([X|Xs]) ->
qsort([ Y || Y <- Xs, Y < X]) ++ [X] ++ qsort([ Y || Y <- Xs, Y >= X]).
446デフォルトの名無しさん
2023/10/08(日) 12:06:58.68ID:3KZ70qk+ 複オジは常にヒープアロケートするGC言語しか知らないのかな?
特定の言語の機能不足をGC言語の制約のように語るのはやめような
特定の言語の機能不足をGC言語の制約のように語るのはやめような
447デフォルトの名無しさん
2023/10/08(日) 14:27:21.60ID:1klr8jB1 rustより高度なライフタイム管理する言語ってないの?
448デフォルトの名無しさん
2023/10/08(日) 14:53:30.59ID:33/5YUgE 高度なライフタイム管理のベクトルがわからん
全データに参照カウンタをもたせて参照→存在を保証してるGC言語ならたくさんあるし
処理過程を生成する(書かせない)ことでライフタイムを意識させない関数型言語もある
全データに参照カウンタをもたせて参照→存在を保証してるGC言語ならたくさんあるし
処理過程を生成する(書かせない)ことでライフタイムを意識させない関数型言語もある
449デフォルトの名無しさん
2023/10/08(日) 14:57:14.95ID:lcllyLaE >>442
ScalaのListもOCamlの[]も単方向リストであってべクタではないのに唯一気付いていないおじさん
ScalaのListもOCamlの[]も単方向リストであってべクタではないのに唯一気付いていないおじさん
450デフォルトの名無しさん
2023/10/08(日) 15:04:22.44ID:KeQMELAC それはそれとしてScalaのcase classはRustにも欲しいと思うことあり
451デフォルトの名無しさん
2023/10/08(日) 15:32:16.97ID:1klr8jB1452デフォルトの名無しさん
2023/10/08(日) 16:37:56.79ID:lCt9aeoq ランタイムコストなしのライフタイムチェックはシステムプログラミング言語だから必要な話で、そうでない言語ならGCで良い
shared xor mutableの静的な保証はGC言語でも嬉しい性質だと思うが、他の言語で採用例はあるのかね?
shared xor mutableの静的な保証はGC言語でも嬉しい性質だと思うが、他の言語で採用例はあるのかね?
453デフォルトの名無しさん
2023/10/08(日) 18:19:11.05ID:WAd1DVRF enumのリストで書いてみたわ
rust不慣れだから所々おかしいかも
https://ideone.com/0Ro48L
enum List<T> {
Cons(T, Box<List<T>>),
Nil,
}
impl<T: Copy + PartialOrd> List<T> {
// 略
fn qsort(&self) -> Self {
match self {
List::Nil => List::Nil,
List::Cons(pivot, tail) => {
let (smaller, rest) = tail.partition(|x| *x < *pivot);
smaller.qsort().concat(&rest.qsort().prepend(*pivot))
}
}
}
}
fn main() {
let list = List::<i32>::nil().prepend(4).prepend(8).prepend(8).prepend(3).rev();
list.each(|n| print!("{}", n));println!("");
list.qsort().each(|n| print!("{}", n));println!("");
}
rust不慣れだから所々おかしいかも
https://ideone.com/0Ro48L
enum List<T> {
Cons(T, Box<List<T>>),
Nil,
}
impl<T: Copy + PartialOrd> List<T> {
// 略
fn qsort(&self) -> Self {
match self {
List::Nil => List::Nil,
List::Cons(pivot, tail) => {
let (smaller, rest) = tail.partition(|x| *x < *pivot);
smaller.qsort().concat(&rest.qsort().prepend(*pivot))
}
}
}
}
fn main() {
let list = List::<i32>::nil().prepend(4).prepend(8).prepend(8).prepend(3).rev();
list.each(|n| print!("{}", n));println!("");
list.qsort().each(|n| print!("{}", n));println!("");
}
454デフォルトの名無しさん
2023/10/08(日) 19:36:48.46ID:e3limdE9455デフォルトの名無しさん
2023/10/08(日) 20:05:18.10ID:lCt9aeoq で、みなさんは単方向リストを使う綺麗だけどクソ遅いコードを並べて何がしたいんですか?
456デフォルトの名無しさん
2023/10/08(日) 20:14:55.63ID:BgGDjECm そんなの用途次第だろ
ど素人かよ
ど素人かよ
457デフォルトの名無しさん
2023/10/08(日) 20:19:50.77ID:QzGY7mJQ458デフォルトの名無しさん
2023/10/08(日) 20:59:00.53ID:e3limdE9459デフォルトの名無しさん
2023/10/08(日) 22:12:35.86ID:nH9KI4I/ 赤っ恥オジの言い訳草
460デフォルトの名無しさん
2023/10/08(日) 22:57:55.16ID:1kYUOs3M 入れもの(メモリ)はどのデータ構造でも不可欠だからいずれもゴミが発生するのは仕方ない
ただしリスト(各セル|ノード)に比べてベクタは以下の点で有利
・まとめて確保解放ができる
・next pointer(の容量と処理)が不要
・リニアスキャンが速い
・ランダムインデックスアクセスも速い
そのためRustでもほとんどの用途でベクタが使われリストは少ない
ただしリスト(各セル|ノード)に比べてベクタは以下の点で有利
・まとめて確保解放ができる
・next pointer(の容量と処理)が不要
・リニアスキャンが速い
・ランダムインデックスアクセスも速い
そのためRustでもほとんどの用途でベクタが使われリストは少ない
461デフォルトの名無しさん
2023/10/08(日) 23:00:08.12ID:Li9tDqQF 今どきはCPUキャッシュが効くかどうかが問題だから
462デフォルトの名無しさん
2023/10/08(日) 23:38:45.90ID:F0i6/5MC 三連休使ってrustの勉強してるけど、ようやく慣れてきた
某openGLの本をMacでやっててDSL2のインストールに四苦八苦、、、
なんかこいつだけCargo.tomlの書き方が、、、
急ぎ足せずrustのとこにある蟹表示するやつ写経してクレートの追加覚えた
先は長いね、、、
頑張る
某openGLの本をMacでやっててDSL2のインストールに四苦八苦、、、
なんかこいつだけCargo.tomlの書き方が、、、
急ぎ足せずrustのとこにある蟹表示するやつ写経してクレートの追加覚えた
先は長いね、、、
頑張る
463453
2023/10/09(月) 01:16:03.20ID:VBg3Yonc464デフォルトの名無しさん
2023/10/09(月) 01:21:45.86ID:L6ciWwId465デフォルトの名無しさん
2023/10/09(月) 01:24:15.18ID:TA+AoWAa リストと配列比較してるやつ全員馬鹿です
466デフォルトの名無しさん
2023/10/09(月) 13:24:27.74ID:gMk1hFfQ そんな香具師いたか?
467デフォルトの名無しさん
2023/10/09(月) 18:01:30.12ID:416rm9Ab appendできないListってダサい
468デフォルトの名無しさん
2023/10/09(月) 18:16:49.87ID:TA+AoWAa おるやん!
469デフォルトの名無しさん
2023/10/11(水) 15:06:20.59ID:UxaO0GW9 Rust検索したらゲームの方が出てきてお前じゃないってなって情報収集が捗らない
470デフォルトの名無しさん
2023/10/11(水) 15:25:39.99ID:kTxLNWR8 それで困ったこと今まで一度もないんだがどういう検索でそうなるの?
普段からゲーム関係の検索したりサイト閲覧してたりする?
普段からゲーム関係の検索したりサイト閲覧してたりする?
471デフォルトの名無しさん
2023/10/11(水) 16:05:36.62ID:jfZ9hs4j ゲームの方もやってますね
Rust初心者が簡単なゲーム作ろうとしてまして
(Pythonのpygameでブロック崩し作れる程度)
検索方法がまずいのかもしれませんね
描画したり、画像をはったり、それを縦横動かしたいだけなのですが
icedか?eguiか?みたいなとこまで来てるけど、まだ使い方がよくわからんですね
どこの関数が初期設定の一発実行で、どこの関数が60fpsの毎回実行なのかとか
プロではなく趣味なので言葉選びが毎回曖昧です
Rust初心者が簡単なゲーム作ろうとしてまして
(Pythonのpygameでブロック崩し作れる程度)
検索方法がまずいのかもしれませんね
描画したり、画像をはったり、それを縦横動かしたいだけなのですが
icedか?eguiか?みたいなとこまで来てるけど、まだ使い方がよくわからんですね
どこの関数が初期設定の一発実行で、どこの関数が60fpsの毎回実行なのかとか
プロではなく趣味なので言葉選びが毎回曖昧です
472デフォルトの名無しさん
2023/10/11(水) 17:42:19.71ID:Pu4uPjjn なるほどそういう感じなのか
検索ワードに”game”とかも含んでるなら
月並みだけどprogrammingを足してみたりゲームの方にだけ特徴的なワード(surviveやsurvivalとか)を除外してみたりするといいんじゃないかな
検索ワードに”game”とかも含んでるなら
月並みだけどprogrammingを足してみたりゲームの方にだけ特徴的なワード(surviveやsurvivalとか)を除外してみたりするといいんじゃないかな
473デフォルトの名無しさん
2023/10/11(水) 20:52:08.31ID:OZznE1k0474デフォルトの名無しさん
2023/10/11(水) 23:18:11.74ID:vJm7EO/F >>441
>>430がVec使用だから同等でないという話ならばRustにもリンクリストがあるよ
リンクリストに特化したパターンマッチング構文や結合構文はないけれど
例えばTをCopyせずそのまま使うならば
use std::collections::LinkedList;
fn qsort<T: PartialOrd>(mut list: LinkedList<T>) -> LinkedList<T> {
if let Some(pivot) = list.pop_front() {
let (smaller, rest): (LinkedList<T>, LinkedList<T>) =
list.into_iter().partition(|x| x < &pivot);
// concat
list = qsort(smaller);
list.extend([pivot]);
list.extend(qsort(rest));
}
list
}
fn main() {
let list = LinkedList::from([9, 0, 7, 3, 6, 1, 2, 4, 8, 5]);
println!("{:?}", list);
println!("{:?}", qsort(list));
}
>>430がVec使用だから同等でないという話ならばRustにもリンクリストがあるよ
リンクリストに特化したパターンマッチング構文や結合構文はないけれど
例えばTをCopyせずそのまま使うならば
use std::collections::LinkedList;
fn qsort<T: PartialOrd>(mut list: LinkedList<T>) -> LinkedList<T> {
if let Some(pivot) = list.pop_front() {
let (smaller, rest): (LinkedList<T>, LinkedList<T>) =
list.into_iter().partition(|x| x < &pivot);
// concat
list = qsort(smaller);
list.extend([pivot]);
list.extend(qsort(rest));
}
list
}
fn main() {
let list = LinkedList::from([9, 0, 7, 3, 6, 1, 2, 4, 8, 5]);
println!("{:?}", list);
println!("{:?}", qsort(list));
}
475デフォルトの名無しさん
2023/10/11(水) 23:57:55.35ID:2xINBvCy はあ
馬鹿なんですね
馬鹿なんですね
476デフォルトの名無しさん
2023/10/12(木) 11:14:39.52ID:u59ybXeV たしかに Rust ゲーム 造り方 で検索するとゲームの方ばっかり出る罠
477デフォルトの名無しさん
2023/10/12(木) 11:17:21.26ID:u59ybXeV >>474
mut 使ったら負け
mut 使ったら負け
478デフォルトの名無しさん
2023/10/12(木) 12:51:53.05ID:5Y8Kw2UP479デフォルトの名無しさん
2023/10/12(木) 12:52:32.93ID:5Y8Kw2UP480デフォルトの名無しさん
2023/10/12(木) 13:19:12.59ID:SguY35qe mut使ったら負けとは俺は思わないが断じて表層的なことではない
本質的に重要な違いだからこそRustでは明確に区別してるわけなので
それにconcatもpartitionもmut使ってない
本質的に重要な違いだからこそRustでは明確に区別してるわけなので
それにconcatもpartitionもmut使ってない
481デフォルトの名無しさん
2023/10/12(木) 13:31:42.25ID:IQy1JHL6 単方向リストと両方向リストの区別もついていない馬鹿だからしょうがないね
482デフォルトの名無しさん
2023/10/12(木) 14:04:37.89ID:29Fh0rnH 標準ライブラリのソース見たら
concatもpartitionもmut使ってるな
最終的にあらゆるmutになるのか
concatもpartitionもmut使ってるな
最終的にあらゆるmutになるのか
483デフォルトの名無しさん
2023/10/12(木) 14:35:37.70ID:+nxBPiMF すべてがmutになる 森鴎外
484デフォルトの名無しさん
2023/10/12(木) 14:56:18.33ID:oQimRC1z 「ボクの考えた最強の汚コードを批判するな!」
485デフォルトの名無しさん
2023/10/12(木) 14:58:53.27ID:X9LcShxS■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★5 [BFU★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【ローソン】ロゴの「L」で誤解生んだコーヒーカップ、デザイン変更へ 在庫使い切る3か月後にリニューアル [ぐれ★]
- 「遺体、安倍、会いたい」👈逆から読んでみて [175344491]
- 【悲報】SANA、発言撤回拒否 [769931615]
- ジャーナリストがテレビで解説「台湾問題は高市総理から言ったのではなく、立憲民主が日本の対応可能能力を暴こうとしたから」 [359572271]
- 【悲報】トランプ聖帝「高市…さん…でしたっけ?」 [878970802]
- 【悲報】タリバン、外務省のトップに土下座させる始末 [974680522]
- 山上、死刑回避し減刑か 山上母の供述で一気に酌量ムードへ [804169411]
