公式
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:xzxy4cgp472デフォルトの名無しさん
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:X9LcShxS486デフォルトの名無しさん
2023/10/12(木) 15:06:20.95ID:pri3rXDa 複オジが劣化したのだろうか
それとも複オジ劣化版が新たに出現したのだろうか
それとも複オジ劣化版が新たに出現したのだろうか
487デフォルトの名無しさん
2023/10/12(木) 15:24:09.95ID:VkfPx0C5 mutを使わずにできることは読み出しとムーブとコピーだけ
488453
2023/10/12(木) 19:51:44.10ID:viHBcoi7 今度は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())
};
}
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())
};
}
489453
2023/10/12(木) 23:01:31.11ID:viHBcoi7 こういう書き方もできた
こっちのほうが雰囲気出てるかな?
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])
};
}
こっちのほうが雰囲気出てるかな?
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])
};
}
490デフォルトの名無しさん
2023/10/13(金) 08:06:18.09ID:q0Ayf65Z >>482
RustはCと同じ高速で動作する手続き型言語だから少なくとも最下層はmutが基本になる
たとえばイテレータからVecへcollectする場合
特殊ケースはunsafe最適化
一般ケースはlet mut vec = Vec::new();してextend
その一方でプログラミングする時はその最下層を意識しなくても知らなくてもいい
mutを必要としないiter.collect()と抽象的に書ける
RustはCと同じ高速で動作する手続き型言語だから少なくとも最下層はmutが基本になる
たとえばイテレータからVecへcollectする場合
特殊ケースはunsafe最適化
一般ケースはlet mut vec = Vec::new();してextend
その一方でプログラミングする時はその最下層を意識しなくても知らなくてもいい
mutを必要としないiter.collect()と抽象的に書ける
491デフォルトの名無しさん
2023/10/13(金) 08:24:52.90ID:NdZOKZ+T 最強Rust始めたわい
mutの話が出てるから質問
シャドーイングっていう性質使えばmutなくても書けそうな気がしてる(まだ書けてない)んだけど
シャドーイングしたときと、mutではメモリの動き何か変わるのかな?と
シャドーイング
let z = x + y;
その後z使って処理
let z = x - y; // z宣言して前回のz上書き
その後z使って処理
mutの話が出てるから質問
シャドーイングっていう性質使えばmutなくても書けそうな気がしてる(まだ書けてない)んだけど
シャドーイングしたときと、mutではメモリの動き何か変わるのかな?と
シャドーイング
let z = x + y;
その後z使って処理
let z = x - y; // z宣言して前回のz上書き
その後z使って処理
492デフォルトの名無しさん
2023/10/13(金) 12:19:34.60ID:tPfYbY0d >>491
それを1億行書いたとする。たぶんスタック溢れるんじゃね?
それを1億行書いたとする。たぶんスタック溢れるんじゃね?
493デフォルトの名無しさん
2023/10/13(金) 12:43:08.68ID:zQ1dnjfM 1億行書く意味が分からんが
そんな問題ではないだろw
そんな問題ではないだろw
494デフォルトの名無しさん
2023/10/13(金) 18:31:34.80ID:Q91zX7Uf ドロップしないの?
495デフォルトの名無しさん
2023/10/13(金) 19:31:02.96ID:/Zwm785x ちょっと前にJSONシリアライズでの最適化の話出たけど
goは空気感が不安になるよな
rust->システムプログラミングよりの言語で、速度やらいろいろうるさそうなやつが
集まってて、そんなやつらの作るライブラリだからパフォーマンスとか心配しなくてよさそう
C#->.NET開発チームが毎年長文ブログでがんばってるアピール
go->言語機能とかほぼ完成しちゃってるんだろうが
アピールもない、この空気感
goは空気感が不安になるよな
rust->システムプログラミングよりの言語で、速度やらいろいろうるさそうなやつが
集まってて、そんなやつらの作るライブラリだからパフォーマンスとか心配しなくてよさそう
C#->.NET開発チームが毎年長文ブログでがんばってるアピール
go->言語機能とかほぼ完成しちゃってるんだろうが
アピールもない、この空気感
496デフォルトの名無しさん
2023/10/13(金) 19:35:26.71ID:/Zwm785x https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/
今年の.netのパフォーマンス改善はこれ
goはシンプル言語で標準ライブラリも最小限だから
もうあまりやることないのか?
今年の.netのパフォーマンス改善はこれ
goはシンプル言語で標準ライブラリも最小限だから
もうあまりやることないのか?
497デフォルトの名無しさん
2023/10/14(土) 14:19:51.05ID:MfcWhKX5 >>491
不使用領域は再利用されるから単純な順次処理ならシャドーイングで十分
mutが欲しくなる理由の1つは繰り返し処理だな(長さ不定のリストの集計とか)
関数型言語みたいに再帰使えばmutなしでも何とかなるけど慣れないとややこしい
あとは全部作り直すのが不合理なデータの部分的な書き換えでもmut使いたい
不使用領域は再利用されるから単純な順次処理ならシャドーイングで十分
mutが欲しくなる理由の1つは繰り返し処理だな(長さ不定のリストの集計とか)
関数型言語みたいに再帰使えばmutなしでも何とかなるけど慣れないとややこしい
あとは全部作り直すのが不合理なデータの部分的な書き換えでもmut使いたい
498デフォルトの名無しさん
2023/10/14(土) 19:31:37.47ID:FeWBHDoO for文で値を変えるカウンタとかフラグとかもmutじゃないと書けないな。
まぁ for 文より iter で書けという一派も多いかもしれんけど。
まぁ for 文より iter で書けという一派も多いかもしれんけど。
499デフォルトの名無しさん
2023/10/14(土) 19:57:12.00ID:jlnlui4T モジュールの内部では (性能上の理由で) mut を使っても、
外側に見せるインターフェイスは
(不自然ではない範囲で) mut を避けるのは自然な方針だと思う。
外側に見せるインターフェイスは
(不自然ではない範囲で) mut を避けるのは自然な方針だと思う。
500デフォルトの名無しさん
2023/10/15(日) 09:39:38.68ID:M8zy/AR3 Cで書いたプログラムを Rustで書いたらこうなります
っていうのをひたすら集めた本がほしい
っていうのをひたすら集めた本がほしい
501デフォルトの名無しさん
2023/10/15(日) 10:09:58.67ID:Xnkvwbkm 全銀システムでJavaの信頼が失墜した今こそrustのチャンスだな
502デフォルトの名無しさん
2023/10/15(日) 11:00:17.07ID:2BZrn9hr 全銀はまだCOBOLだろ
ほんといつもいつも嘘ばっかりだな
ほんといつもいつも嘘ばっかりだな
503デフォルトの名無しさん
2023/10/16(月) 10:19:13.28ID:kgcCjrnK504デフォルトの名無しさん
2023/10/16(月) 10:21:08.50ID:kgcCjrnK 全銀協のフォーマットって今も変わってないんだろうけど
半角カタカナだらけでRustで扱うのは大変かも知れないね
半角カタカナだらけでRustで扱うのは大変かも知れないね
505デフォルトの名無しさん
2023/10/16(月) 10:35:49.58ID:enUIFRpv 扱う文字については適当なライブラリを整備すればそんなに問題にならなさそうに思うが
506デフォルトの名無しさん
2023/10/16(月) 11:26:02.88ID:SeIR9j3q507デフォルトの名無しさん
2023/10/16(月) 12:22:46.59ID:SkmcjqYw 半角しかないのに外字とは
508デフォルトの名無しさん
2023/10/16(月) 13:30:20.84ID:kgcCjrnK 今のうちに Rust でハンカクカタカナ自由自在な crate 造っておけば
将来ライセンス料でシッポリ儲かりますか?
将来ライセンス料でシッポリ儲かりますか?
509デフォルトの名無しさん
2023/10/17(火) 11:40:48.89ID:xDsy3kB7 Rustに慣れるとCのifで()付け忘れたわ
510デフォルトの名無しさん
2023/10/19(木) 14:52:32.31ID:rcYEOPS6 Vec の iter() と into_iter() の違いは?
511デフォルトの名無しさん
2023/10/19(木) 14:53:04.92ID:rcYEOPS6 Vec の iter() と into_iter() の違いは?
512デフォルトの名無しさん
2023/10/19(木) 15:12:31.11ID:V7scna43513デフォルトの名無しさん
2023/10/20(金) 01:20:11.96ID:/f3Rr7gK514デフォルトの名無しさん
2023/10/20(金) 06:13:09.90ID:3+q+Er7L Cで安全に書いたときと同じ生成コードにはなるけどRustでは抽象度の高い表現をするからなあ
例えばメモリのある範囲の領域を順に読み取る(書き込む)というC言語だとポインタをインクリメントしていくだけの場合でも
Rustだとまずメモリの領域をスライスという安全な抽象表現で扱い可変性もライフタイムも付随してスライスが指す元の安全に確保されている領域(配列やベクタなど)も必須というところからスタート
そのうえでスライスのイテレータにより必ずその範囲内のみを順に安全に指し示す参照(または可変参照)が次々と得られて順に読み取る(書き込む)ことが達成される
さらにRustではこれをfor文ではなく抽象度の高いイテレータメソッドチェーンで書くことも多いからCコードとの対応はますます難しくなるね
例えばメモリのある範囲の領域を順に読み取る(書き込む)というC言語だとポインタをインクリメントしていくだけの場合でも
Rustだとまずメモリの領域をスライスという安全な抽象表現で扱い可変性もライフタイムも付随してスライスが指す元の安全に確保されている領域(配列やベクタなど)も必須というところからスタート
そのうえでスライスのイテレータにより必ずその範囲内のみを順に安全に指し示す参照(または可変参照)が次々と得られて順に読み取る(書き込む)ことが達成される
さらにRustではこれをfor文ではなく抽象度の高いイテレータメソッドチェーンで書くことも多いからCコードとの対応はますます難しくなるね
515デフォルトの名無しさん
2023/10/20(金) 06:56:18.50ID:/M3RKJCH unsafe {
Rust で C ポインタやりたいなら
let p = *mut hoge;
p+=1;
std::slice::from_raw_part(p. 1)[0] = hage;
}
Rust で C ポインタやりたいなら
let p = *mut hoge;
p+=1;
std::slice::from_raw_part(p. 1)[0] = hage;
}
516デフォルトの名無しさん
2023/10/20(金) 09:04:11.56ID:6mF1sPPt >>513
同じように書けないからこそ対比したものが欲しいと言う話だろうに
同じように書けないからこそ対比したものが欲しいと言う話だろうに
517デフォルトの名無しさん
2023/10/20(金) 09:27:32.12ID:/M3RKJCH >>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); }
でちょっとマシになるくらい
クソでたらめだが真面目に実装するとマジ面倒
>>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); }
でちょっとマシになるくらい
518デフォルトの名無しさん
2023/10/20(金) 09:40:03.83ID:2W9ATkqE マクロでウヒヒ
519デフォルトの名無しさん
2023/10/20(金) 11:03:08.72ID:+Ixb2Hv2 近代的な言語の仕組みってのは大規模なプログラムをどうやってまとめるかという方向で進歩してるから
小さなサンプルで比較しても設計理念は身につかんのだ。
小さなサンプルで比較しても設計理念は身につかんのだ。
520デフォルトの名無しさん
2023/10/20(金) 13:13:02.21ID:iA9G36tB 設計理念を身につける話なんて誰もしとらんだろw
521デフォルトの名無しさん
2023/10/20(金) 15:12:25.73ID:+Ixb2Hv2 してないから問題だと述べてるんだが。
俺が学生のときに英語の長文の全ての単語の横に(単語ごとに!)日本語の単語を書いてたやつがいたことを思い出したわ。
本に載る程度の規模(ひとつあたり数ページくらい?)のプログラムを対比するってのはそういうことだよ。
言語の設計理念に基づいた構造こそが重要で、構造を論じるほどの規模にならないならたいした違いは見えてこない。
俺が学生のときに英語の長文の全ての単語の横に(単語ごとに!)日本語の単語を書いてたやつがいたことを思い出したわ。
本に載る程度の規模(ひとつあたり数ページくらい?)のプログラムを対比するってのはそういうことだよ。
言語の設計理念に基づいた構造こそが重要で、構造を論じるほどの規模にならないならたいした違いは見えてこない。
522デフォルトの名無しさん
2023/10/20(金) 16:07:06.67ID:/M3RKJCH CでもPythonでもRustでも全部の行にあほみたいなコメント描く香具師はうざいけど
Rustのcrateでdocsにcomment100%達成するためにはアホなコメント描かされてダサい設計思想だと思う
Rustのcrateでdocsにcomment100%達成するためにはアホなコメント描かされてダサい設計思想だと思う
523デフォルトの名無しさん
2023/10/20(金) 16:34:14.75ID:HySp0Cr6 >>521
日本語の設計理念wが身についてないみたいだなw
日本語の設計理念wが身についてないみたいだなw
524デフォルトの名無しさん
2023/10/20(金) 17:24:55.57ID:/f3Rr7gK unsafe使うならCでいいんだよなw
525デフォルトの名無しさん
2023/10/20(金) 19:40:13.76ID:3+q+Er7L >>524
それは違う
unsafeを使ってsafeなインターフェースを提供する部分だけ人間が安全性を保証すれば
それ以外の部分はすべてRustが安全性を保証してくれる
その方針でRustの標準ライブラリやunsafeを用いる一部クレートが作られている
それは違う
unsafeを使ってsafeなインターフェースを提供する部分だけ人間が安全性を保証すれば
それ以外の部分はすべてRustが安全性を保証してくれる
その方針でRustの標準ライブラリやunsafeを用いる一部クレートが作られている
526デフォルトの名無しさん
2023/10/20(金) 20:06:04.22ID:9sHhryb+527デフォルトの名無しさん
2023/10/21(土) 12:29:35.28ID:sf7W/HH9 関数型最強(キリω
ですねわかります
ですねわかります
528デフォルトの名無しさん
2023/10/21(土) 21:43:10.75ID:sGOhbjn7 Linuxでも、結局のところ「C言語でいいじゃん」という結論になりそうよね
リーヌスもなんかやっぱRustはなぁ・・・ってトーンダウンしてきてるし
リーヌスもなんかやっぱRustはなぁ・・・ってトーンダウンしてきてるし
529デフォルトの名無しさん
2023/10/22(日) 00:35:28.61ID:GiKl9Asx >>528
カーネルなんて低レイヤーのポインタ操作とかビット演算しかしないからな
カーネルなんて低レイヤーのポインタ操作とかビット演算しかしないからな
530デフォルトの名無しさん
2023/10/22(日) 00:50:06.85ID:n0l+NFKj Linux カーネルの中にだって Rust が適している場所も
あるといえば有るだろうけど現時点でそれなりに検証が済んで
安定して動いているものを「置き換え」するほどではないだろうな。
適しているからといって各部を別の言語で書いたりすると
接続箇所で面倒になったりもするし。
あるといえば有るだろうけど現時点でそれなりに検証が済んで
安定して動いているものを「置き換え」するほどではないだろうな。
適しているからといって各部を別の言語で書いたりすると
接続箇所で面倒になったりもするし。
531デフォルトの名無しさん
2023/10/22(日) 11:49:16.17ID:IKvVj0uW カーネルで流行らないならもう流行るところないんじゃ…
532デフォルトの名無しさん
2023/10/22(日) 19:50:36.55ID:NN1UsPSx どの言語からどの言語への場合でも既に動いているものを別の言語に移植するだけだとコストがかかる
それでもスクリプト言語からRustへ置き換えるなら実行速度と省メモリの効果がコストを上回りやすいためよく行われている
一方でC/C++からRustへ換えても実行速度と省メモリの効果はない
だからシステム設計を変えるなど大きな更改タイミングでRust化することが多い
特にマイクロサービス化されているものは個別に更改できるためシステム全体の一部Rust化に向いている
最も向いておらずハードル高いのがモノリシックになっているOSカーネル
その場合でも分離されているデバイスドライバは最近のデバイス複雑化と更新対応の多さからもRust化が向いているため進んでいる
それでもスクリプト言語からRustへ置き換えるなら実行速度と省メモリの効果がコストを上回りやすいためよく行われている
一方でC/C++からRustへ換えても実行速度と省メモリの効果はない
だからシステム設計を変えるなど大きな更改タイミングでRust化することが多い
特にマイクロサービス化されているものは個別に更改できるためシステム全体の一部Rust化に向いている
最も向いておらずハードル高いのがモノリシックになっているOSカーネル
その場合でも分離されているデバイスドライバは最近のデバイス複雑化と更新対応の多さからもRust化が向いているため進んでいる
533デフォルトの名無しさん
2023/10/22(日) 19:58:13.61ID:fijCTFBo534デフォルトの名無しさん
2023/10/22(日) 21:57:00.47ID:xV2fKCwr 構造体をキャストするものでも、hoge_storage_t みたいに最大サイズを規定するパターンと
char foo[0]; を積極的に利用するパターンと 真っ二つにわかれるしねぇ
後者はRustでどうすんだろ
char foo[0]; を積極的に利用するパターンと 真っ二つにわかれるしねぇ
後者はRustでどうすんだろ
535デフォルトの名無しさん
2023/10/22(日) 22:15:56.13ID:fijCTFBo 結局構造体もパケットのバイト列にパックするからね
その時unsafeを使うことになる
その時unsafeを使うことになる
536デフォルトの名無しさん
2023/10/22(日) 22:45:30.49ID:EpprGwAf 構造体はunsafeいらん
タグ無し共用体はunsafe
タグ無し共用体はunsafe
537デフォルトの名無しさん
2023/10/22(日) 23:15:20.26ID:HWj9itUZ 流行るから価値ある、流行らないから価値なしって評価基準はジャパニーズカルチャーのガラパゴス
538デフォルトの名無しさん
2023/10/22(日) 23:23:05.72ID:/1lQw0Ls >>534
後者も普通に表現できるしCとのFFIも可能
後者も普通に表現できるしCとのFFIも可能
539デフォルトの名無しさん
2023/10/22(日) 23:28:57.61ID:zUgjdRO9 Redox(https://www.redox-os.org/)みたいなRust製のUnix系OSプロジェクトならもうあるし
無理してLinuxに食い込む必要はないと思うんだけどLinux開発者でもRust使いたい人はいるんでしょ
Linuxは一部のモジュールがRust製になる程度で中核は最後までCで通すと思う
というかRustで置き換えるなら名前変えてほしい
無理してLinuxに食い込む必要はないと思うんだけどLinux開発者でもRust使いたい人はいるんでしょ
Linuxは一部のモジュールがRust製になる程度で中核は最後までCで通すと思う
というかRustで置き換えるなら名前変えてほしい
540デフォルトの名無しさん
2023/10/23(月) 00:13:38.68ID:tCssLiBK541デフォルトの名無しさん
2023/10/23(月) 05:58:05.37ID:3382hDjx >>533
実際にはCでもバッファオーバーランしないからRustでは、unsafe必要ないでしょ
実際にはCでもバッファオーバーランしないからRustでは、unsafe必要ないでしょ
542デフォルトの名無しさん
2023/10/23(月) 06:59:33.53ID:8gpCEC0e543453
2023/10/24(火) 00:55:17.36ID:Ei0IGfb9 >>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;
}
今度は逆に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;
}
544デフォルトの名無しさん
2023/10/24(火) 13:32:38.68ID:oyxcPsiu スレチ
545デフォルトの名無しさん
2023/10/24(火) 16:02:23.69ID:ju9L4gE1 cargo 経由で rustc にコンパイルオプションを渡したいとき
RUSTFLAG=hogehoge
で成功はしたのですがパッケージ全体が再コンパイルされて遅いです
特定のファイルだけにコンパイルオプションを適用したいのですが
cargo にはそういうオプションはありませんか?
RUSTFLAG=hogehoge
で成功はしたのですがパッケージ全体が再コンパイルされて遅いです
特定のファイルだけにコンパイルオプションを適用したいのですが
cargo にはそういうオプションはありませんか?
546デフォルトの名無しさん
2023/10/24(火) 18:21:38.30ID:u/7eM1yW >>545
ありません
ありません
547デフォルトの名無しさん
2023/10/24(火) 20:07:58.68ID:dncTx+4h 大文字小文字が混在する言語って気持ち悪い
548453
2023/10/24(火) 22:19:05.86ID:yQ/jFyOv549デフォルトの名無しさん
2023/10/25(水) 09:06:18.67ID:9oOV85NF >>545
試してないけど
やるとしたら
cmdとかterminal(shell)を2つ以上別ウィンドウで開いておいて
それぞれ別のRUSTFLAG=を設定しておく(環境毎に独立なはず)
片方でbuildしたあと適用したいファイルだけ修正してもう片方でbuildするとうまくいかんかな
試してないけど
やるとしたら
cmdとかterminal(shell)を2つ以上別ウィンドウで開いておいて
それぞれ別のRUSTFLAG=を設定しておく(環境毎に独立なはず)
片方でbuildしたあと適用したいファイルだけ修正してもう片方でbuildするとうまくいかんかな
550デフォルトの名無しさん
2023/10/25(水) 10:10:31.38ID:p3+NCv68 特定のファイルにだけ適用したいコンパイルオプションて何なの?
551デフォルトの名無しさん
2023/10/25(水) 10:43:36.55ID:dKf07X6i crateで分割したらいけるんじゃね
552デフォルトの名無しさん
2023/10/25(水) 11:35:23.44ID:CN7zqSRs そらそうやろと言いたいところだが
今はcrate単位の指定はできなくてパッケージ単位のみ
今はcrate単位の指定はできなくてパッケージ単位のみ
553デフォルトの名無しさん
2023/10/25(水) 13:57:15.42ID:0w7kqvd/ crate で別れてる前提で
その crate を使う2つの bin (まあまあそっくりな main) を造って
それぞれをそれぞれの RUSTFLAGS= で build したら
うまく使い別けられました
とりあえず速度は気にならないからしばらくこれで逝く
アイディア呉れた人thx
その crate を使う2つの bin (まあまあそっくりな main) を造って
それぞれをそれぞれの RUSTFLAGS= で build したら
うまく使い別けられました
とりあえず速度は気にならないからしばらくこれで逝く
アイディア呉れた人thx
554デフォルトの名無しさん
2023/10/26(木) 14:45:03.06ID:6bJ9rmmH しつもんです
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 されてないものを取って来てくれるとも限らない訳だが
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 されてないものを取って来てくれるとも限らない訳だが
555デフォルトの名無しさん
2023/10/26(木) 15:53:54.89ID:wO29ziTZ cargo treeを使うといいよ
556デフォルトの名無しさん
2023/10/26(木) 21:41:03.08ID:pAbfpEYj Rust で書かれた WebAssembly/Canvas 上の
FlashPlayer のエミュレータ Ruffle の実装が
凄い勢いで進んでるけど
世界の凄腕プログラマも参戦してるみたい。
このスレで貢献してる人ひょっとしている?
エミュレータ実装て武者修行になるのかな。
FlashPlayer のエミュレータ Ruffle の実装が
凄い勢いで進んでるけど
世界の凄腕プログラマも参戦してるみたい。
このスレで貢献してる人ひょっとしている?
エミュレータ実装て武者修行になるのかな。
557デフォルトの名無しさん
2023/10/26(木) 23:18:45.93ID:oN20rU1J エミュレーターを作り始めるスタートは完全な仕様の資料を手にいれることで、それがないことも良くあることだから調査がしんどいんだよ。
そんで実装は仕様通りにやるだけのひたすらに地道な作業だからあまり面白味はない。
動くだけじゃなくて性能を出そうと思ったら色々と工夫の余地はあるんだけど……
そんで実装は仕様通りにやるだけのひたすらに地道な作業だからあまり面白味はない。
動くだけじゃなくて性能を出そうと思ったら色々と工夫の余地はあるんだけど……
558デフォルトの名無しさん
2023/10/27(金) 10:08:58.42ID:d8VwEqUV 古いゲーム機のエミュレータを書いたことがあるが結構面白いぞ
昔のソフトはクロックタイミングに依存することも珍しくないから、性能だけでなく再現精度にも気を配らなくちゃいけない
腕試しとしてはちょうどいいと思うよ
昔のソフトはクロックタイミングに依存することも珍しくないから、性能だけでなく再現精度にも気を配らなくちゃいけない
腕試しとしてはちょうどいいと思うよ
559デフォルトの名無しさん
2023/10/27(金) 12:30:38.77ID:xuiID3+p もっと良いサイトあったんだけど消滅してる?
http://sunlight.cocolog-nifty.com/sunlight/2005/08/post_1ff6.html
http://www.sm.rim.or.jp/~shishido/tick.html
http://sunlight.cocolog-nifty.com/sunlight/2005/08/post_1ff6.html
http://www.sm.rim.or.jp/~shishido/tick.html
560デフォルトの名無しさん
2023/10/27(金) 22:25:37.09ID:2hH60kIl561デフォルトの名無しさん
2023/10/27(金) 22:44:06.00ID:nnq2nBUF web上で再発明するの好きなやつ多いよね
でも失敗率高めじゃないか?
でも失敗率高めじゃないか?
562デフォルトの名無しさん
2023/10/28(土) 14:23:38.78ID:AMpKEF3U 自己鍛錬で再発明するのは好きにすればいいがそれでサーチエンジンの上位を占拠するのはマジ迷惑だ
563453
2023/10/28(土) 18:50:08.51ID:U0JINWpQ >>548 c
https://ideone.com/Rp476I
・ノードへのポインタとしてリストを表現していた(>>548)のを廃止
・共用体でリストを表現したことによりBoxの位置?がRust版(>>453)と同じに
・特に意味もなくループ文を再帰に置き換え
https://ideone.com/Rp476I
・ノードへのポインタとしてリストを表現していた(>>548)のを廃止
・共用体でリストを表現したことによりBoxの位置?がRust版(>>453)と同じに
・特に意味もなくループ文を再帰に置き換え
564デフォルトの名無しさん
2023/10/29(日) 12:47:29.07ID:IsQ6p7Vf uBlacklist が猿人検出阻止してくれるそうだ
sejuku とか techacademy とか KENTA とか入れると良い
sejuku とか techacademy とか KENTA とか入れると良い
565デフォルトの名無しさん
2023/11/03(金) 14:51:57.32ID:fSSaeY5g === 複製おじさん(通称複おじ)について ===
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が複数出現するが、この中にも複製おじさんが多数含まれていると考えられている。
このように自分の誤りを認識した場合、それを認める書き込みは決して行わず、別人の振りをして最初から正しく理解していた体を装うのも複製おじさんの特徴である。
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が複数出現するが、この中にも複製おじさんが多数含まれていると考えられている。
このように自分の誤りを認識した場合、それを認める書き込みは決して行わず、別人の振りをして最初から正しく理解していた体を装うのも複製おじさんの特徴である。
566デフォルトの名無しさん
2023/11/03(金) 20:56:04.34ID:uUmiO3VU Generatorはコードがごちゃっとしてたからgen fn/blockはありがたいな
567デフォルトの名無しさん
2023/11/03(金) 22:49:04.51ID:Q6dMbwrG 2024 editionから?
568デフォルトの名無しさん
2023/11/04(土) 04:29:37.91ID:xhYE5yZM Rustの学習を始めたが、所有権面倒くさい。まあでも安全性は高められそうな感じはする。
569デフォルトの名無しさん
2023/11/04(土) 12:29:53.92ID:eFHrirh7 Better C的なRustが欲しい
C++と張り合って仕様が複雑になってる
C++と張り合って仕様が複雑になってる
570デフォルトの名無しさん
2023/11/04(土) 12:45:03.68ID:whQSHNtc571デフォルトの名無しさん
2023/11/04(土) 13:26:02.22ID:ocaBqo/v Rust は別に C++ と張り合ってなんかいないよ。
現実に使うものはどうやったってどこかで汚くなるってだけ。
綺麗なものは使われてないものだ。
現実に使うものはどうやったってどこかで汚くなるってだけ。
綺麗なものは使われてないものだ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 高市早苗「……なんて言ってみたw」中国「なんだ、言ってみただけかw」👈これで全部元通りになるという事実 [782460143]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
- 映画「ゼルダの伝説」、リンクとゼルダ姫が白人になってしまう。日本のものは日本人だろうが!! [592058334]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- んなっしょい🍬禁止🈲のお🏡
- 高市早苗「株やってる奴ザマァwww格差是正のためにも、もっと暴落した方がいいよwww」(´・ω・`)確かに。 [252835186]
