- 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/
- 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() の違いは?
- 523 名前:デフォルトの名無しさん mailto:sage [2023/10/19(木) 15:12:31.11 ID:V7scna43.net]
- >>510
引数に着目するといい。 into_iter はムーブするが iter は借用する。
- 524 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 01:20:11.96 ID:/f3Rr7gK.net]
- >>500
その発想がすでに間違ってる 根本が違うから同じようには書けない
- 525 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 06:13:09.90 ID:3+q+Er7L.net]
- Cで安全に書いたときと同じ生成コードにはなるけどRustでは抽象度の高い表現をするからなあ
例えばメモリのある範囲の領域を順に読み取る(書き込む)というC言語だとポインタをインクリメントしていくだけの場合でも Rustだとまずメモリの領域をスライスという安全な抽象表現で扱い可変性もライフタイムも付随してスライスが指す元の安全に確保されている領域(配列やベクタなど)も必須というところからスタート そのうえでスライスのイテレータにより必ずその範囲内のみを順に安全に指し示す参照(または可変参照)が次々と得られて順に読み取る(書き込む)ことが達成される さらにRustではこれをfor文ではなく抽象度の高いイテレータメソッドチェーンで書くことも多いからCコードとの対応はますます難しくなるね
- 526 名前:デフォルトの名無しさん [2023/10/20(金) 06:56:18.50 ID:/M3RKJCH.net]
- unsafe {
Rust で C ポインタやりたいなら let p = *mut hoge; p+=1; std::slice::from_raw_part(p. 1)[0] = hage; }
- 527 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 09:04:11.56 ID:6mF1sPPt.net]
- >>513
同じように書けないからこそ対比したものが欲しいと言う話だろうに
- 528 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 09:27:32.12 ID:/M3RKJCH.net]
- >>516
クソでたらめだが真面目に実装するとマジ面倒 >>515 方式だと #[derive(Debug)] struct Hoge {a: u8, b: u8, c: u8} impl Hoge { pub fn new(a: u8, b: u8, c: u8) -> Self {Hoge{a, b, c}} } fn main() { let hoge: Vec<Hoge> = vec![Hoge::new(1, 2, 3), Hoge::new(4, 5, 6), Hoge::new(7, 8, 9)]; println!("{:?}", hoge); let mut p = &hoge[0] as *const Hoge as usize; p += 2 * std::mem::size_of::<Hoge>(); unsafe { std::slice::from_raw_parts_mut(p as *mut Hoge, 1)[0] = Hoge::new(8, 3, 1); } println!("{:?}", hoge); } >>514 方式だと let p = &hoge[0] as *const Hoge as *mut Hoge; unsafe { std::slice::from_raw_parts_mut(p, 3)[2] = Hoge::new(8, 3, 1); } でちょっとマシになるくらい
- 529 名前:デフォルトの名無しさん [2023/10/20(金) 09:40:03.83 ID:2W9ATkqE.net]
- マクロでウヒヒ
- 530 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 11:03:08.72 ID:+Ixb2Hv2.net]
- 近代的な言語の仕組みってのは大規模なプログラムをどうやってまとめるかという方向で進歩してるから
小さなサンプルで比較しても設計理念は身につかんのだ。
- 531 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 13:13:02.21 ID:iA9G36tB.net]
- 設計理念を身につける話なんて誰もしとらんだろw
- 532 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 15:12:25.73 ID:+Ixb2Hv2.net]
- してないから問題だと述べてるんだが。
俺が学生のときに英語の長文の全ての単語の横に(単語ごとに!)日本語の単語を書いてたやつがいたことを思い出したわ。 本に載る程度の規模(ひとつあたり数ページくらい?)のプログラムを対比するってのはそういうことだよ。 言語の設計理念に基づいた構造こそが重要で、構造を論じるほどの規模にならないならたいした違いは見えてこない。
- 533 名前:デフォルトの名無しさん [2023/10/20(金) 16:07:06.67 ID:/M3RKJCH.net]
- CでもPythonでもRustでも全部の行にあほみたいなコメント描く香具師はうざいけど
Rustのcrateでdocsにcomment100%達成するためにはアホなコメント描かされてダサい設計思想だと思う
- 534 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 16:34:14.75 ID:HySp0Cr6.net]
- >>521
日本語の設計理念wが身についてないみたいだなw
- 535 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 17:24:55.57 ID:/f3Rr7gK.net]
- unsafe使うならCでいいんだよなw
- 536 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 19:40:13.76 ID:3+q+Er7L.net]
- >>524
それは違う unsafeを使ってsafeなインターフェースを提供する部分だけ人間が安全性を保証すれば それ以外の部分はすべてRustが安全性を保証してくれる その方針でRustの標準ライブラリやunsafeを用いる一部クレートが作られている
- 537 名前:デフォルトの名無しさん mailto:sage [2023/10/20(金) 20:06:04.22 ID:9sHhryb+.net]
- >>525
もちろん品質が保証されてるライブラリは使うよ 現時点でここまでライブラリが揃ってるから自前でunsafeを書く必要は感じない
- 538 名前:デフォルトの名無しさん [2023/10/21(土) 12:29:35.28 ID:sf7W/HH9.net]
- 関数型最強(キリω
ですねわかります
- 539 名前:デフォルトの名無しさん mailto:sage [2023/10/21(土) 21:43:10.75 ID:sGOhbjn7.net]
- Linuxでも、結局のところ「C言語でいいじゃん」という結論になりそうよね
リーヌスもなんかやっぱRustはなぁ・・・ってトーンダウンしてきてるし
- 540 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 00:35:28.61 ID:GiKl9Asx.net]
- >>528
カーネルなんて低レイヤーのポインタ操作とかビット演算しかしないからな
- 541 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 00:50:06.85 ID:n0l+NFKj.net]
- Linux カーネルの中にだって Rust が適している場所も
あるといえば有るだろうけど現時点でそれなりに検証が済んで 安定して動いているものを「置き換え」するほどではないだろうな。 適しているからといって各部を別の言語で書いたりすると 接続箇所で面倒になったりもするし。
- 542 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 11:49:16.17 ID:IKvVj0uW.net]
- カーネルで流行らないならもう流行るところないんじゃ…
- 543 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 19:50:36.55 ID:NN1UsPSx.net]
- どの言語からどの言語への場合でも既に動いているものを別の言語に移植するだけだとコストがかかる
それでもスクリプト言語からRustへ置き換えるなら実行速度と省メモリの効果がコストを上回りやすいためよく行われている 一方でC/C++
- 544 名前:からRustへ換えても実行速度と省メモリの効果はない
だからシステム設計を変えるなど大きな更改タイミングでRust化することが多い 特にマイクロサービス化されているものは個別に更改できるためシステム全体の一部Rust化に向いている 最も向いておらずハードル高いのがモノリシックになっているOSカーネル その場合でも分離されているデバイスドライバは最近のデバイス複雑化と更新対応の多さからもRust化が向いているため進んでいる [] - [ここ壊れてます]
- 545 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 19:58:13.61 ID:fijCTFBo.net]
- >>531
もうちょっと上位のレイヤーなら良いと思うけどね Cでバッファオーバーランするようなプログラムって 結局Rustでもunsafe使わざる終えないような処理なので
- 546 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 21:57:00.47 ID:xV2fKCwr.net]
- 構造体をキャストするものでも、hoge_storage_t みたいに最大サイズを規定するパターンと
char foo[0]; を積極的に利用するパターンと 真っ二つにわかれるしねぇ 後者はRustでどうすんだろ
- 547 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 22:15:56.13 ID:fijCTFBo.net]
- 結局構造体もパケットのバイト列にパックするからね
その時unsafeを使うことになる
- 548 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 22:45:30.49 ID:EpprGwAf.net]
- 構造体はunsafeいらん
タグ無し共用体はunsafe
- 549 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 23:15:20.26 ID:HWj9itUZ.net]
- 流行るから価値ある、流行らないから価値なしって評価基準はジャパニーズカルチャーのガラパゴス
- 550 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 23:23:05.72 ID:/1lQw0Ls.net]
- >>534
後者も普通に表現できるしCとのFFIも可能
- 551 名前:デフォルトの名無しさん mailto:sage [2023/10/22(日) 23:28:57.61 ID:zUgjdRO9.net]
- Redox(https://www.redox-os.org/)みたいなRust製のUnix系OSプロジェクトならもうあるし
無理してLinuxに食い込む必要はないと思うんだけどLinux開発者でもRust使いたい人はいるんでしょ Linuxは一部のモジュールがRust製になる程度で中核は最後までCで通すと思う というかRustで置き換えるなら名前変えてほしい
- 552 名前:デフォルトの名無しさん mailto:sage [2023/10/23(月) 00:13:38.68 ID:tCssLiBK.net]
- >>539
まあカーネルで使ってる基本的なデータ構造(赤黒木、ハッシュテーブル、双方向リスト) kref(リファレンスカウント)などは外せないからね 無理に組み合わせるとかえってキツい気がする
- 553 名前:デフォルトの名無しさん mailto:sage [2023/10/23(月) 05:58:05.37 ID:3382hDjx.net]
- >>533
実際にはCでもバッファオーバーランしないからRustでは、unsafe必要ないでしょ
- 554 名前:デフォルトの名無しさん mailto:sage [2023/10/23(月) 06:59:33.53 ID:8gpCEC0e.net]
- >>533
>使わざる終えない 昔こんな誤字よく観たな
- 555 名前:453 mailto:sage [2023/10/24(火) 00:55:17.36 ID:Ei0IGfb9.net]
- >>500
今度は逆にrustで書いたもの>>453をcで書いてみた https://ideone.com/j5KR8Y ・参照透過性は考慮していない ・型のパラメータ化?には挑戦してない ・パターンマッチ再現?にも挑戦してない ・クロージャが欲しいところには呼び出し元の文脈を手渡して誤魔化す ・グローバル変数一個使ってノードの再利用を試みてる ・とにかくlist_qsort内部がそれっぽい感じの手順になってたらヨシ struct node { int value; struct node *next; }; struct node *list_qsort(const struct node *list) { int pivot; struct node *sorted = 0, *tail, *smaller, *rest, *a, *b; if (list) { pivot = list->value, tail = list->next; list_partition(&pivot, less_than_context, tail, &smaller, &rest); sorted = list_append(a = list_qsort(smaller), b = list_cons(pivot, list_qsort(rest))); list_available_push_all4(smaller, rest, a, b); } return sorted; }
- 556 名前:デフォルトの名無しさん mailto:sage [2023/10/24(火) 13:32:38.68 ID:oyxcPsiu.net]
- スレチ
- 557 名前:デフォルトの名無しさん mailto:sage [2023/10/24(火) 16:02:23.69 ID:ju9L4gE1.net]
- cargo 経由で rustc にコンパイルオプションを渡したいとき
RUSTFLAG=hogehoge で成功はしたのですがパッケージ全体が再コンパイルされて遅いです 特定のファイルだけにコンパイルオプションを適用したいのですが cargo にはそういうオプションはありませんか?
- 558 名前:デフォルトの名無しさん mailto:sage [2023/10/24(火) 18:21:38.30 ID:u/7eM1yW.net]
- >>545
ありません
- 559 名前:デフォルトの名無しさん mailto:sage [2023/10/24(火) 20:07:58.68 ID:dncTx+4h.net]
- 大文字小文字が混在する言語って気持ち悪い
- 560 名前:453 mailto:sage [2023/10/24(火) 22:19:05.86 ID:yQ/jFyOv.net]
- >>543 c
https://ideone.com/yYGR7x ・ノード再利用やめた ・若干の整理
- 561 名前:デフォルトの名無しさん mailto:sage [2023/10/25(水) 09:06:18.67 ID:9oOV85NF.net]
- >>545
試してないけど やるとしたら cmdとかterminal(shell)を2つ以上別ウィンドウで開いておいて それぞれ別のRUSTFLAG=を設定しておく(環境毎に独立なはず) 片方でbuildしたあと適用したいファイルだけ修正してもう片方でbuildするとうまくいかんかな
- 562 名前:デフォルトの名無しさん mailto:sage [2023/10/25(水) 10:10:31.38 ID:p3+NCv68.net]
- 特定のファイルにだけ適用したいコンパイルオプションて何なの?
- 563 名前:デフォルトの名無しさん mailto:sage [2023/10/25(水) 10:43:36.55 ID:dKf07X6i.net]
- crateで分割したらいけるんじゃね
- 564 名前:デフォルトの名無しさん mailto:sage [2023/10/25(水) 11:35:23.44 ID:CN7zqSRs.net]
- そらそうやろと言いたいところだが
今はcrate単位の指定はできなくてパッケージ単位のみ
- 565 名前:デフォルトの名無しさん mailto:sage [2023/10/25(水) 13:57:15.42 ID:0w7kqvd/.net]
- crate で別れてる前提で
その crate を使う2つの bin (まあまあそっくりな main) を造って それぞれをそれぞれの RUSTFLAGS= で build したら うまく使い別けられました とりあえず速度は気にならないからしばらくこれで逝く アイディア呉れた人thx
- 566 名前:デフォルトの名無しさん [2023/10/26(木) 14:45:03.06 ID:6bJ9rmmH.net]
- しつもんです
cargo publish のときに warning: package `hoge vN.N.N` in Cargo.lock is yanked in registry `crates-io`, consider updating to a version that is not yanked って警告が出てて意味は判るんだが cargo clean してやり直しても package 'hoge vN.N.N' が最新のものに切り替わらない 自分自身の Cargo.toml の dependencies には hoge は描かれていない どの crate が原因で hoge を要求してるのか知るにはどうすれば良い? その crate を最新のものにすれば hoge の yank されてないものを取って来てくれるとも限らない訳だが
- 567 名前:デフォルトの名無しさん [2023/10/26(木) 15:53:54.89 ID:wO29ziTZ.net]
- cargo treeを使うといいよ
- 568 名前:デフォルトの名無しさん mailto:sage [2023/10/26(木) 21:41:03.08 ID:pAbfpEYj.net]
- Rust で書かれた WebAssembly/Canvas 上の
FlashPlayer のエミュレータ Ruffle の実装が 凄い勢いで進んでるけど 世界の凄腕プログラマも参戦してるみたい。 このスレで貢献してる人ひょっとしている? エミュレータ実装て武者修行になるのかな。
- 569 名前:デフォルトの名無しさん mailto:sage [2023/10/26(木) 23:18:45.93 ID:oN20rU1J.net]
- エミュレーターを作り始めるスタートは完全な仕様の資料を手にいれることで、それがないことも良くあることだから調査がしんどいんだよ。
そんで実装は仕様通りにやるだけのひたすらに地道な作業だからあまり面白味はない。 動くだけじゃなくて性能を出そうと思ったら色々と工夫の余地はあるんだけど……
- 570 名前:デフォルトの名無しさん mailto:sage [2023/10/27(金) 10:08:58.42 ID:d8VwEqUV.net]
- 古いゲーム機のエミュレータを書いたことがあるが結構面白いぞ
昔のソフトはクロックタイミングに依存することも珍しくないから、性能だけでなく再現精度にも気を配らなくちゃいけない 腕試しとしてはちょうどいいと思うよ
- 571 名前:デフォルトの名無しさん [2023/10/27(金) 12:30:38.77 ID:xuiID3+p.net]
- もっと良いサイトあったんだけど消滅してる?
sunlight.cocolog-nifty.com/sunlight/2005/08/post_1ff6.html www.sm.rim.or.jp/~shishido/tick.html
- 572 名前:デフォルトの名無しさん mailto:sage [2023/10/27(金) 22:25:37.09 ID:2hH60kIl.net]
- >>557 >>558
そうですね、面白さと言う点では 当時は無かった WebGPU等の現代的な技術を 積極的に取り入れて 本家 FlashPlayer の単なるエミュレータに留まらず ブラウザWASM上の本格ゲーム・アニメプレーヤーに なりそうな所が興味を引きます。 取り敢えずは日本人として 縦書きCJK 2バイト文字列の動的表示等の 検証報告で協力できたらと考えております。 (和風ゲームのイベント表示など)
- 573 名前:デフォルトの名無しさん mailto:sage [2023/10/27(金) 22:44:06.00 ID:nnq2nBUF.net]
- web上で再発明するの好きなやつ多いよね
でも失敗率高めじゃないか?
- 574 名前:デフォルトの名無しさん mailto:sage [2023/10/28(土) 14:23:38.78 ID:AMpKEF3U.net]
- 自己鍛錬で再発明するのは好きにすればいいがそれでサーチエンジンの上位を占拠するのはマジ迷惑だ
- 575 名前:453 mailto:sage [2023/10/28(土) 18:50:08.51 ID:U0JINWpQ.net]
- >>548 c
https://ideone.com/Rp476I ・ノードへのポインタとしてリストを表現していた(>>548)のを廃止 ・共用体でリストを表現したことによりBoxの位置?がRust版(>>453)と同じに ・特に意味もなくループ文を再帰に置き換え
- 576 名前:デフォルトの名無しさん [2023/10/29(日) 12:47:29.07 ID:IsQ6p7Vf.net]
- uBlacklist が猿人検出阻止してくれるそうだ
sejuku とか techacademy とか KENTA とか入れると良い
- 577 名前:デフォルトの名無しさん mailto:sage [2023/11/03(金) 14:51:57.32 ID:fSSaeY5g.net]
- === 複製おじさん(通称複おじ)について ===
Rustスレを中心に活動し、2023年4月現在で1年以上ム板に住み着くRustacean。無自覚な荒らし。 Rustスレでは、基本的に他住民の意見を聞いて糧とすることなく、自らのコードが最善であると、ID変更自演を交えいつまでも主張し続ける。 同スレで「所有権が複製される」という違和感のある表現を、「違和感がある」とする他住民の意見をすべて否定してしつこく擁護し続けたことから、「複製おじさん」というあだ名が付けられた。 それ以外のム板スレでは、基本的に他住民の意見を聞いて糧とすることなく、Rustこそが最善であると、ID変更自演を交えいつまでも主張し続ける。 その基本戦術は、「GC言語は遅い」の一声でC/C++/Rust以外の言語を否定し、残ったC/C++は安全ではないので、Rustが最善であるとするもの。 しかしながら、Rust以外の言語に関しては、正当な批判を展開するのに十分な知識を持っているとは言いがたい。 本スレPart1では、C++の問題点を指摘しようとして多数の誤り・知識不足を露呈することとなった。特にしつこく食い下がったのが「動的ディスパッチ」に関する誤解である。 https://mevius.5ch.net/test/read.cgi/tech/1677286186/786-799(ID:Evbafc70とID:RiLc+pIfが複製おじさんであると考えられている) 要約すると、通常「条件分岐」と呼ばれるものを「動的ディスパッチ」と呼ぶのが正しいと主張し続けたのである。 常識的にはあり得ない誤解だが、提示されたC++のコードが自らの主張(C++にはパターンマッチが無い)に不都合であると感じたためか、C++のコードを正しく読み解くことができないにもかかわらず脊髄反射的に否定してしまい、その根拠として誤った論理をこじつけてしまったものと思われる。 ちなみにこの後、同種の誤解を持って書き込むID:wHEiYRW7(これはID使用歴的に複製おじさんとは考えにくい)に対して、正しい理解に基づく指摘を行う単発IDが複数出現するが、この中にも複製おじさんが多数含まれていると考えられている。 このように自分の誤りを認識した場合、それを認める書き込みは決して行わず、別人の振りをして最初から正しく理解していた体を装うのも複製おじさんの特徴である。
|

|