- 1 名前:デフォルトの名無しさん [2023/08/15(火) 22:24:39.45 ID:xzxy4cgp.net]
- 公式
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/
- 385 名前:デフォルトの名無しさん [2023/09/23(土) 16:36:06.31 ID:WPP4nTE5.net]
- >>364です
補足すると今回自分がわかっていなかったのは以下のような関数がコンパイルを通らないということですね ``` fn hoge<T>(a: i64, b: &mut T) { *b = a; } ``` impl Traitが単にジェネリクスの糖衣構文であるということと、 トレイト境界を満たす型をジェネリクス引数に渡した場合は合法に"ならなければならない"、トレイト境界は十分条件も満たさなくてはならないという点
- 386 名前:を解っていなかったのがポイントでした... []
- [ここ壊れてます]
- 387 名前:デフォルトの名無しさん mailto:sage [2023/09/23(土) 21:17:07.32 ID:piK9W+al.net]
- 戻り値のimpl Traitと引数のimpl Traitで振る舞い違うのは当たり前ではあるんだけど混乱しやすいポイントではあるかもね
- 388 名前:デフォルトの名無しさん mailto:sage [2023/09/24(日) 12:22:42.57 ID:2YTVyUlC.net]
- 0788デフォルトの名無しさん
2022/06/21(火) 08:59:28.38ID:vO+TReRM 俺はフロントエンドやらないからこのスレでTauriの話をしないでくれ
- 389 名前:デフォルトの名無しさん [2023/09/24(日) 12:36:49.28 ID:2YTVyUlC.net]
- こいつはどうかな
https://zenn.dev/ksilverwall/articles/2869b4c73e6327
- 390 名前:デフォルトの名無しさん mailto:sage [2023/09/25(月) 23:08:53.71 ID:OcxuhTB3.net]
- rustでdx12ってまともに使えますか?
そろそろc++は卒業したい
- 391 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 10:01:41.63 ID:q653RLNX.net]
- >>382
使えないということだな。
- 392 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 17:46:11.75 ID:WrG1pnap.net]
- 一応d3d12があるけど、これを直接使うよりwgpu経由のほうがいいんじゃないか?
- 393 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 18:52:01.41 ID:liEPyEVD.net]
- rustとgoとc#でjsonのシリアライズ、デシリアライズ実験したんだけど
rust 1ms cargo run --release go 10ms c# 40ms dotnet build -c Release こんなに違うもんなの? リリースモードでビルドしたつもりだけど WebAPIのバックエンドどれにするか悩んでたけどもうrust1択でいいやん
- 394 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:18:52.63 ID:rDjR9GdF.net]
- 最適化で計測対象の処理が丸ごと消えてないかな
どこかでデータのサイズとか集計とか出力してればいいけど
- 395 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:22:16.85 ID:sfzsNV4F.net]
- さすがそこまで速くないよね
C#ももっと速いような気がする
- 396 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:40:15.73 ID:aJs6t/KK.net]
- コードの問題かベンチマークの問題だね
- 397 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:41:15.28 ID:K0prie5d.net]
- >>385
goこのライブラリ使うとどうなる? https://github.com/goccy/go-json
- 398 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:41:38.03 ID:aJs6t/KK.net]
- >>378
>fn hoge<T>(a: i64, b: &mut T) fn hoge<T>(a: T, b: &mut T)にすればいいと思うけど 同じような解決策が>>364にあるということなの?
- 399 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:56:19.26 ID:liEPyEVD.net]
- >>385
それやってる まず、デシリアライズ1000回して シリアライズ1000回でシリアライズでバイト配列になるからそのサイズのトータル を求めてる さっきのは1回あたりの平均 >>389 それやったら7.5ms experimentalなJSON v2は13ms
- 400 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:59:59.97 ID:liEPyEVD.net]
- つか、goってリリースビルドないやろ?
コンパイルも一瞬でへ?ってなるわ それぞれ30行未満のコードだけど..
- 401 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 22:29:35.41 ID:liEPyEVD.net]
- https://controlc.com/77570dbc
goだとこんな感じ
- 402 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 22:43:29.67 ID:liEPyEVD.net]
- ああ、ごめんC#は嘘でしたすみません
3msになりました
- 403 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 22:55:30.68 ID:liEPyEVD.net]
- Rustは最強で
C#はメモリ使用量多いがMSが最適化ガンバッテル Goはメモリ使用量少なくて言語仕様がシンプルだがC#に負けたり...
- 404 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:05:14.16 ID:EQtG/kil.net]
- 意味のないベンチマークだね
ちなみにこういうのはNimが速いと思うよ 結局こういうのってコンパイラの最適化の勝負をしているだけだから Rustが速いというよりはLLVMが速いだけ Zigとかでも同じスピードが出るはず その代わりにコンパイル速度が遅いというデメリットがあるからこれは単なるトレードオフで、用途に応じて適した言語を選択するのが重要ってだけだね WebAPI作るならIOが結局ボトルネックになるからパフォーマンス気にするにしても別にスクリプト言語じゃないならなんでもいいのよね 好きな言語にすればいいと思う
- 405 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:08:16.82 ID:kLEETtIu.net]
- それはともかく
NimはRustに対して意味のあるアドバンテージ皆無でNimだけは要らん
- 406 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:14:09.15 ID:liEPyEVD.net]
- まぁ、データベースはおもいっきし叩くね
最初は最強言語じゃなくてわかりやすい2番あたりの言語でいこうと思ってるんだけたんだけど で、1番ははっきりRustっぽいからわかりやすいからいんだけど、 2番(C#,Go?)がはっきりしないから1番の言語でいいのかなと 最大の目的はサーバー費用を押さえられるように
- 407 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:14:24.83 ID:gNMcg380.net]
- Nimはオフサイドルールってだけで試す気にもならないんだよな…
- 408 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:52:14.82 ID:lFc5NXyg.net]
- >>396
多数の非同期タスクを偏らずスレッド間でスチールしてスケジューリングできるのは現状GoとRustしかない 小規模ならGoでもよいがそれ以上だと言語機能が貧弱なGoは辛くなってきてRustの独壇場
- 409 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 00:09:38.71 ID:8IPpP98U.net]
- >>400
妄想乙 https://ufcpp.net/study/csharp/misc_task.html#thread_pool4
- 410 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 00:11:19.90 ID:8IPpP98U.net]
- この妄想も延々言ってたけどやっと黙るのかな?
470: デフォルトの名無しさん sage 2023/09/26(火) 09:57:28.51 ID:ycG3j/g+ >>469 IaaSの一部にそういうケースがありうるだけだぞ PaaS (FaaS)は基本的にメモリ使用量✕実行時間で料金が決まる メモリ使用量は少なければ少ないほどコストに優れている
- 411 名前:デフォルトの名無しさん [2023/09/27(水) 00:29:08.13 ID:MfhnDtnO.net]
- 複オジは相変わらず嘘ばっかり
成長しないね
- 412 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 00:38:28.22 ID:+nRBKi9H.net]
- 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]
- 413 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 00:56:55.88 ID:+nRBKi9H.net]
- 俺の環境だと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]
- 414 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 01:02:33.77 ID:+nRBKi9H.net]
- これにしたらRustより早くなったわ
結局これっていかに最適化しているかってだけだと思う https://github.com/bytedance/sonic [Go sonic json] 914 [μs] 263609000 [bytes] 209 [μs]
- 415 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 01:06:34.20 ID:8IPpP98U.net]
- 気づくのが遅い
- 416 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 01:44:16.58 ID:jtGLjNq+.net]
- >>405
お手数かけて本当にごめんなさい 自分の実行方法が問題でした >>385でgoの部分が空欄のように実行方法がわかってなく、 デバッグモードで動いていました すみません go runで動かしたら>>405のような速度になりました
- 417 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 01:51:26.25 ID:jtGLjNq+.net]
- WebAPIでgoで行く決意ができました
本当にお騒がせしました
- 418 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 04:55:49.67 ID:UdUnwuun.net]
- YouTube で有名な雑食系エンジニア・KENTA が、既に言ってる。
キャリアパスは、Ruby on Rails → Go のみ Ruby/Goの神・HashiCorp のMitchell Hashimoto がそう。 Ruby製のVagran
- 419 名前:t → Go製のTerraform。
今は、Goプログラマーしか求めていない Rust/Elixir は普及のキャズムを超えなかった。 超えたのは、Goだけ [] - [ここ壊れてます]
- 420 名前:デフォルトの名無しさん [2023/09/27(水) 17:50:20.18 ID:wGZOY1wb.net]
- まあビルド時間の重要性はちょこちょこ一人で作ってるやつは理解できんわな。
- 421 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 18:56:48.41 ID:CCaLLXi3.net]
- 仕事なら相応に強力なマシンかレンダリングサーバがあるだろ
- 422 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 21:44:37.94 ID:fWGZRw8C.net]
- レンダリングサーバーは関係なさすぎ
- 423 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 22:03:34.78 ID:vmit0gpI.net]
- ビルドサーバーと間違えたのかもね
- 424 名前:デフォルトの名無しさん mailto:sage [2023/09/28(木) 18:29:13.32 ID:gS/5M63X.net]
- MARCHを受けるために東大の過去問を練習するような意識高い系バカ
- 425 名前:デフォルトの名無しさん [2023/10/06(金) 11:57:36.28 ID:Zl0hPCVy.net]
- 一体誰がRustを推しているのか?
中國?
- 426 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 13:12:35.08 ID:2p+njRVB.net]
- 関数型と手続き型のいいとこ取りしたいプログラマだろ
情報科学の先進国なら中国に限らず一定数いるはず
- 427 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 16:38:53.65 ID:AJI+rgso.net]
- ネットインフラが次々と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」などがある。
- 428 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 20:34:57.35 ID:hdhWn3/E.net]
- 関数型の良いとことるの諦めた言語って感じだけどw
初期の頃はocamlでコンパイラ作られてたらしいのに MLの匂いさえ残ってない単なる手続き化型言語だわ
- 429 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 20:35:16.84 ID:hdhWn3/E.net]
- 関数型の良いとことるの諦めた言語って感じだけどw
初期の頃はocamlでコンパイラ作られてたらしいのに MLの匂いさえ残ってない単なる手続き化型言語だわ
- 430 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 21:14:33.58 ID:b1wSOXuc.net]
- スタックフレームに着目したのはプラスだけど、下手にスタックフレームを隠そうとしているのはマイナス。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
- 431 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 21:15:11.56 ID:b1wSOXuc.net]
- スタックフレームに着目したのはプラスだけど、下手にスタックフレームを隠そうとしているのはマイナス。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
- 432 名前:デフォルトの名無しさん [2023/10/06(金) 23:16:24.42 ID:tE7CLicd.net]
- mut 入れたのが間違いなんだろ
- 433 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 23:30:10.29 ID:hdhWn3/E.net]
- 関数型に関しては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) たとえば↑こういうのとか
- 434 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 00:34:46.36 ID:Hyqci1qG.net]
- 関数型というよりはリスト型言語だな
- 435 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 01:56:24.14 ID:a3LzK6ia.net]
- システムプログラ
- 436 名前:~ングのための言語なので純粋に関数型な要素だけを求めるなら別の言語を当たった方が良い []
- [ここ壊れてます]
- 437 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 02:12:44.80 ID:QajUcOD9.net]
- リスト型つまりLinkedListをメインにすると利便さと引き換えに遅い問題とガベージが出まくる問題がある
Rustはリスト型メインにしなくて正解
- 438 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 04:42:48.81 ID:+bTugVnw.net]
- GCを前提にしない仕様の上に積み上げなくてはならないという側面から見ると、わりかしよくやっている方なんじゃなかろうか……知らんけど
- 439 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 06:29:51.58 ID:GJ9LXcgc.net]
- 自称情強底辺者「Rustでhello worldかける俺カコイイ」
真の成功者「スイカゲームでボロ儲けしました」
- 440 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 06:46:44.80 ID:bWLG2vp7.net]
- 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)); }
- 441 名前:デフォルトの名無しさん [2023/10/07(土) 09:44:47.17 ID:WqNjBTZw.net]
- まあ今時ランタイム速度でそこまで差がつくことはないわな。
ガベコレの実行タイミングが問題になることは結構あると思うけど。
- 442 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 11:17:12.27 ID:fuWtUzBR.net]
- アロケートしまくリングやな
- 443 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 12:06:59.60 ID:pov02R//.net]
- ランタイムサポートが極まってきたからこそ
極めきれない部分の差が目立ってきたんだよ。
- 444 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 14:19:35.27 ID:koj+veBs.net]
- XYZ座標みたいな単純だけどプリミティブでない大量のデータの配列を作りたいときに
1つ1つをオブジェクトにしないといけないGC言語は放り投げたくなる 座標なら最悪プリミティブに分解して自分で並べれば済むけど型が混ざると詰む
- 445 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 15:18:57.75 ID:AO4ZOvxF.net]
- >>424
>>430 なるほど 美しいコードはスッキリうんこみたいに気持ち良い まるで脳が洗われるようだ 普段いかに毒に浸かってるかが判るな
- 446 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 15:43:47.56 ID:Ozx346pn.net]
- Rustのはmutなしにした場合の問題提起のための悪い例だろ
- 447 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 15:51:39.94 ID:O3XDw4H3.net]
- >>434
Rustでも1つ1つオブジェクトにする 何の問題もないどころかむしろ好ましいやり方
- 448 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 16:42:12.14 ID:2ow1Jojj.net]
- 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すごい頑張ってると思うわ
- 449 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 23:59:36.96 ID:QajUcOD9.net]
- >>430
RustはそのようにOCamlやScalaと同等に書くことも容易な点がいいな 同時にその方法によりRustで記述すると大量にVec(またはリストを実現する何か)を使い捨てていることが見える つまりGC言語ではガベージが大量に出る
- 450 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 02:42:17.66 ID:9NUoKPD/.net]
- くすくす
- 451 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 08:07:41.64 ID:WAd1DVRF.net]
- 同等に書けてないでしょw
- 452 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 09:57:45.64 ID:ShBUnVvx.net]
- 同等というより>>438と>>430は全く同じだな
空でなければpartitionでsmallerとrestに分けて それぞれを再帰でqsortしてconcatenate
- 453 名前:デフォルトの名無しさん [2023/10/08(日) 10:16:57.79 ID:CrdCteTP.net]
- 次はHaskellまたはErlangでおながいしまつ
- 454 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 10:38:24.03 ID:lCt9aeoq.net]
- in-placeなqsort書いてよ
- 455 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 10:39:23.48 ID:WAd1DVRF.net]
- >>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]).
- 456 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 12:06:58.68 ID:3KZ70qk+.net]
- 複オジは常にヒープアロケートするGC言語しか知らないのかな?
特定の言語の機能不足をGC言語の制約のように語るのはやめような
- 457 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 14:27:21.60 ID:1klr8jB1.net]
- rustより高度なライフタイム管理する言語ってないの?
- 458 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 14:53:30.59 ID:33/5YUgE.net]
- 高度なライフタイム管理のベクトルがわからん
全データに参照カウンタをもたせて参照→存在を保証してるGC言語ならたくさんあるし 処理過程を生成する(書かせない)ことでライフタイムを意識させない関数型言語もある
- 459 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 14:57:14.95 ID:lcllyLaE.net]
- >>442
ScalaのListもOCamlの[]も単方向リストであってべクタではないのに唯一気付いていないおじさん
- 460 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 15:04:22.44 ID:KeQMELAC.net]
- それはそれとしてScalaのcase classはRustにも欲しいと思うことあり
- 461 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 15:32:16.97 ID:1klr8jB1.net]
- >>448
rustを置き換え可能な言語で つまりゼロコスト抽象 大学の研究レベルのものとかでないのかな
- 462 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 16:37:56.79 ID:lCt9aeoq.net]
- ランタイムコストなしのライフタイムチェックはシステムプログラミング言語だから必要な話で、そうでない言語ならGCで良い
shared xor mutableの静的な保証はGC言語でも嬉しい性質だと思うが、他の言語で採用例はあるのかね?
- 463 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 18:19:11.05 ID:WAd1DVRF.net]
- 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!(""); }
- 464 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 19:36:48.46 ID:e3limdE9.net]
- >>449
目的はソートなので、 単方向リストを用いるかベクタを用いるかは実装方法の問題だから些細な話かな。 実用上もベクタで十分だから単方向リストの出番は滅多にないよね。
- 465 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 20:05:18.10 ID:lCt9aeoq.net]
- で、みなさんは単方向リストを使う綺麗だけどクソ遅いコードを並べて何がしたいんですか?
- 466 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 20:14:55.63 ID:BgGDjECm.net]
- そんなの用途次第だろ
ど素人かよ
- 467 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 20:19:50.77 ID:QzGY7mJQ.net]
- >>454
>>439がガベージがどうこう言ってるのについてはどう思う?
- 468 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 20:59:00.53 ID:e3limdE9.net]
- >>457
リストはガベージと裏表一体ですが何を問題にしていますか? リスト化する時にconsセルの割り当てが発生します。 そしてリストから取り出す時に空のconsセルがガベージとして発生します。
- 469 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 22:12:35.86 ID:nH9KI4I/.net]
- 赤っ恥オジの言い訳草
- 470 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 22:57:55.16 ID:1kYUOs3M.net]
- 入れもの(メモリ)はどのデータ構造でも不可欠だからいずれもゴミが発生するのは仕方ない
ただしリスト(各セル|ノード)に比べてベクタは以下の点で有利 ・まとめて確保解放ができる ・next pointer(の容量と処理)が不要 ・リニアスキャンが速い ・ランダムインデックスアクセスも速い そのためRustでもほとんどの用途でベクタが使われリストは少ない
- 471 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 23:00:08.12 ID:Li9tDqQF.net]
- 今どきはCPUキャッシュが効くかどうかが問題だから
- 472 名前:デフォルトの名無しさん mailto:sage [2023/10/08(日) 23:38:45.90 ID:F0i6/5MC.net]
- 三連休使ってrustの勉強してるけど、ようやく慣れてきた
某openGLの本をMacでやっててDSL2のインストールに四苦八苦、、、 なんかこいつだけCargo.tomlの書き方が、、、 急ぎ足せずrustのとこにある蟹表示するやつ写経してクレートの追加覚えた 先は長いね、、、 頑張る
- 473 名前:453 mailto:sage [2023/10/09(月) 01:16:03.20 ID:VBg3Yonc.net]
- >>444
>>455 https://ideone.com/Q0LqWM これでクイックソートになってるはず? なってなくても笑って許してほしい
- 474 名前:デフォルトの名無しさん mailto:sage [2023/10/09(月) 01:21:45.86 ID:L6ciWwId.net]
- >>456
ソート済み配列のソートの計算量が最悪になるqsort実装の活用方法わかんないです どういうときに有効なんですか? 標準ライブラリのソートアルゴリズム使った方が良いのでは
- 475 名前:デフォルトの名無しさん mailto:sage [2023/10/09(月) 01:24:15.18 ID:TA+AoWAa.net]
- リストと配列比較してるやつ全員馬鹿です
- 476 名前:デフォルトの名無しさん [2023/10/09(月) 13:24:27.74 ID:gMk1hFfQ.net]
- そんな香具師いたか?
- 477 名前:デフォルトの名無しさん mailto:sage [2023/10/09(月) 18:01:30.12 ID:416rm9Ab.net]
- appendできないListってダサい
- 478 名前:デフォルトの名無しさん mailto:sage [2023/10/09(月) 18:16:49.87 ID:TA+AoWAa.net]
- おるやん!
- 479 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 15:06:20.59 ID:UxaO0GW9.net]
- Rust検索したらゲームの方が出てきてお前じゃないってなって情報収集が捗らない
- 480 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 15:25:39.99 ID:kTxLNWR8.net]
- それで困ったこと今まで一度もないんだがどういう検索でそうなるの?
普段からゲーム関係の検索したりサイト閲覧してたりする?
- 481 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 16:05:36.62 ID:jfZ9hs4j.net]
- ゲームの方もやってますね
Rust初心者が簡単なゲーム作ろうとしてまして (Pythonのpygameでブロック崩し作れる程度) 検索方法がまずいのかもしれませんね 描画したり、画像をはったり、それを縦横動かしたいだけなのですが icedか?eguiか?みたいなとこまで来てるけど、まだ使い方がよくわからんですね どこの関数が初期設定の一発実行で、どこの関数が60fpsの毎回実行なのかとか プロではなく趣味なので言葉選びが毎回曖昧です
- 482 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 17:42:19.71 ID:Pu4uPjjn.net]
- なるほどそういう感じなのか
検索ワードに”game”とかも含んでるなら 月並みだけどprogrammingを足してみたりゲームの方にだけ特徴的なワード(surviveやsurvivalとか)を除外してみたりするといいんじゃないかな
- 483 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 20:52:08.31 ID:OZznE1k0.net]
- >>471
https://arewegameyet.rs/resources/tutorials/ とりあえずこの辺のチュートリアルから選んでやってみては?
- 484 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 23:18:11.74 ID:vJm7EO/F.net]
- >>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)); }
- 485 名前:デフォルトの名無しさん mailto:sage [2023/10/11(水) 23:57:55.35 ID:2xINBvCy.net]
- はあ
馬鹿なんですね
|

|