- 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/
- 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]
- はあ
馬鹿なんですね
- 486 名前:デフォルトの名無しさん [2023/10/12(木) 11:14:39.52 ID:u59ybXeV.net]
- たしかに Rust ゲーム 造り方 で検索するとゲームの方ばっかり出る罠
- 487 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 11:17:21.26 ID:u59ybXeV.net]
- >>474
mut 使ったら負け
- 488 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 12:51:53.05 ID:5Y8Kw2UP.net]
- >>477
そんな表層的なことを問題にするのは愚か 例えばmutを表層的に使っていない>>430はそこで呼び出しているpartitionとconcatそれぞれのなかでmutを使っている 当たり前だがデータを組み立てたり書き換える処理は全てmutにたどりつく >>474でも表層的にmutを無くしたいだけならば同様にconcat関数を作りその中でmutを使えばいい
- 489 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 12:52:32.93 ID:5Y8Kw2UP.net]
- >>477
そんな表層的なことを問題にするのは愚か 例えばmutを表層的に使っていない>>430はそこで呼び出しているpartitionとconcatそれぞれのなかでmutを使っている 当たり前だがデータを組み立てたり書き換える処理は全てmutにたどりつく >>474でも表層的にmutを無くしたいだけならば同様にconcat関数を作りその中でmutを使えばいい
- 490 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 13:19:12.59 ID:SguY35qe.net]
- mut使ったら負けとは俺は思わないが断じて表層的なことではない
本質的に重要な違いだからこそRustでは明確に区別してるわけなので それにconcatもpartitionもmut使ってない
- 491 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 13:31:42.25 ID:IQy1JHL6.net]
- 単方向リストと両方向リストの区別もついていない馬鹿だからしょうがないね
- 492 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 14:04:37.89 ID:29Fh0rnH.net]
- 標準ライブラリのソース見たら
concatもpartitionもmut使ってるな 最終的にあらゆるmutになるのか
- 493 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 14:35:37.70 ID:+nxBPiMF.net]
- すべてがmutになる 森鴎外
- 494 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 14:56:18.33 ID:oQimRC1z.net]
- 「ボクの考えた最強の汚コードを批判するな!」
- 495 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 14:58:53.27 ID:X9LcShxS.net]
- >>482
ネタじゃなくマジで言ってるならRustは辞めとけ 絶望的に向いてない
- 496 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 15:06:20.95 ID:pri3rXDa.net]
- 複オジが劣化したのだろうか
それとも複オジ劣化版が新たに出現したのだろうか
- 497 名前:デフォルトの名無しさん mailto:sage [2023/10/12(木) 15:24:09.95 ID:VkfPx0C5.net]
- mutを使わずにできることは読み出しとムーブとコピーだけ
- 498 名前:453 mailto:sage [2023/10/12(木) 19:51:44.10 ID:viHBcoi7.net]
- 今度はDartで書いてみた
3.0でパターンマッチがちょっと強化されたらしい? 3.0新登場のスイッチ式の=>の右側には式だけしか書けない? dartにはそもそもpartitionはない? というわけで>>445のHaskell方式で書いてみた(程遠いけど) List qsort(List list) { return switch (list) { [] => [], [var pivot, ...var rest] => qsort(rest.where((x) => x < pivot).toList()) + [pivot] + qsort(rest.where((x) => pivot <= x).toList()) }; }
- 499 名前:453 mailto:sage [2023/10/12(木) 23:01:31.11 ID:viHBcoi7.net]
- こういう書き方もできた
こっちのほうが雰囲気出てるかな? List qsort(List list) { return switch (list) { [] => [], [var x, ...var xs] => qsort([for (var y in xs) if (y < x) y]) + [x] + qsort([for (var y in xs) if (x <= y) y]) }; }
- 500 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 08:06:18.09 ID:q0Ayf65Z.net]
- >>482
RustはCと同じ高速で動作する手続き型言語だから少なくとも最下層はmutが基本になる たとえばイテレータからVecへcollectする場合 特殊ケースはunsafe最適化 一般ケースはlet mut vec = Vec::new();してextend その一方でプログラミングする時はその最下層を意識しなくても知らなくてもいい mutを必要としないiter.collect()と抽象的に書ける
- 501 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 08:24:52.90 ID:NdZOKZ+T.net]
- 最強Rust始めたわい
mutの話が出てるから質問 シャドーイングっていう性質使えばmutなくても書けそうな気がしてる(まだ書けてない)んだけど シャドーイングしたときと、mutではメモリの動き何か変わるのかな?と シャドーイング let z = x + y; その後z使って処理 let z = x - y; // z宣言して前回のz上書き その後z使って処理
- 502 名前:デフォルトの名無しさん [2023/10/13(金) 12:19:34.60 ID:tPfYbY0d.net]
- >>491
それを1億行書いたとする。たぶんスタック溢れるんじゃね?
- 503 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 12:43:08.68 ID:zQ1dnjfM.net]
- 1億行書く意味が分からんが
そんな問題ではないだろw
- 504 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 18:31:34.80 ID:Q91zX7Uf.net]
- ドロップしないの?
- 505 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 19:31:02.96 ID:/Zwm785x.net]
- ちょっと前にJSONシリアライズでの最適化の話出たけど
goは空気感が不安になるよな rust->システムプログラミングよりの言語で、速度やらいろいろうるさそうなやつが 集まってて、そんなやつらの作るライブラリだからパフォーマンスとか心配しなくてよさそう C#->.NET開発チームが毎年長文ブログでがんばってるアピール go->言語機能とかほぼ完成しちゃってるんだろうが アピールもない、この空気感
- 506 名前:デフォルトの名無しさん mailto:sage [2023/10/13(金) 19:35:26.71 ID:/Zwm785x.net]
- https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/
今年の.netのパフォーマンス改善はこれ goはシンプル言語で標準ライブラリも最小限だから もうあまりやることないのか?
- 507 名前:デフォルトの名無しさん mailto:sage [2023/10/14(土) 14:19:51.05 ID:MfcWhKX5.net]
- >>491
不使用領域は再利用されるから単純な順次処理ならシャドーイングで十分 mutが欲しくなる理由の1つは繰り返し処理だな(長さ不定のリストの集計とか) 関数型言語みたいに再帰使えばmutなしでも何とかなるけど慣れないとややこしい あとは全部作り直すのが不合理なデータの部分的な書き換えでもmut使いたい
- 508 名前:デフォルトの名無しさん mailto:sage [2023/10/14(土) 19:31:37.47 ID:FeWBHDoO.net]
- for文で値を変えるカウンタとかフラグとかもmutじゃないと書けないな。
まぁ for 文より iter で書けという一派も多いかもしれんけど。
- 509 名前:デフォルトの名無しさん mailto:sage [2023/10/14(土) 19:57:12.00 ID:jlnlui4T.net]
- モジュールの内部では (性能上の理由で) mut を使っても、
外側に見せるインターフェイスは (不自然ではない範囲で) mut を避けるのは自然な方針だと思う。
- 510 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 09:39:38.68 ID:M8zy/AR3.net]
- Cで書いたプログラムを Rustで書いたらこうなります
っていうのをひたすら集めた本がほしい
- 511 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 10:09:58.67 ID:Xnkvwbkm.net]
- 全銀システムでJavaの
- 512 名前:信頼が失墜した今こそrustのチャンスだな []
- [ここ壊れてます]
- 513 名前:デフォルトの名無しさん mailto:sage [2023/10/15(日) 11:00:17.07 ID:2BZrn9hr.net]
- 全銀はまだCOBOLだろ
ほんといつもいつも嘘ばっかりだな
- 514 名前:デフォルトの名無しさん [2023/10/16(月) 10:19:13.28 ID:kgcCjrnK.net]
- >>500
似たような動機で描かれた本とかブログは観たことあるけど Rustっぽくないコードばっかりでうんざりする面もある
- 515 名前:デフォルトの名無しさん [2023/10/16(月) 10:21:08.50 ID:kgcCjrnK.net]
- 全銀協のフォーマットって今も変わってないんだろうけど
半角カタカナだらけでRustで扱うのは大変かも知れないね
- 516 名前:デフォルトの名無しさん mailto:sage [2023/10/16(月) 10:35:49.58 ID:enUIFRpv.net]
- 扱う文字については適当なライブラリを整備すればそんなに問題にならなさそうに思うが
- 517 名前:デフォルトの名無しさん [2023/10/16(月) 11:26:02.88 ID:SeIR9j3q.net]
- >>505
>扱う文字については適当なライブラリを整備すれば 外字ばかりとかでそれが大変なんじゃないの?知らんけど
- 518 名前:デフォルトの名無しさん [2023/10/16(月) 12:22:46.59 ID:SkmcjqYw.net]
- 半角しかないのに外字とは
- 519 名前:デフォルトの名無しさん [2023/10/16(月) 13:30:20.84 ID:kgcCjrnK.net]
- 今のうちに Rust でハンカクカタカナ自由自在な crate 造っておけば
将来ライセンス料でシッポリ儲かりますか?
- 520 名前:デフォルトの名無しさん [2023/10/17(火) 11:40:48.89 ID:xDsy3kB7.net]
- Rustに慣れるとCのifで()付け忘れたわ
- 521 名前:デフォルトの名無しさん mailto:sage [2023/10/19(木) 14:52:32.31 ID:rcYEOPS6.net]
- Vec の iter() と into_iter() の違いは?
- 522 名前:デフォルトの名無しさん mailto:sage [2023/10/19(木) 14:53:04.92 ID:rcYEOPS6.net]
- Vec の iter() と into_iter() の違いは?
|

|