探検
Rustアンチスレ
1デフォルトの名無しさん
2017/10/26(木) 23:37:04.08ID:9syp6YaG Hello World以上の事をやるとコンパイルが通らない()Rustのアンチスレです
138デフォルトの名無しさん
2022/05/23(月) 01:48:39.79ID:Fl/zPM6P139デフォルトの名無しさん
2022/05/23(月) 02:08:18.18ID:aUQlcplw140デフォルトの名無しさん
2022/05/23(月) 02:25:01.02ID:Fl/zPM6P >>139
なんで同じ領域が確保されると保証されるのさ。今時のOSでww
そのエリアが外のタスクで割り当てられなかったことがなんで保証できるんだ?
とにかく動的確保、削除してフラグメント起こさないと思ってる方がどうかしてる。
そういう思い込みが通用するなら、所有権なんてもんは必要ないだろ。
あれはデフラグの対象にするかどうかが細大の目的
あと、普通のとか今時のとか、お前のあたのなかこっちは見られないんだから使うのやめろ
なんで同じ領域が確保されると保証されるのさ。今時のOSでww
そのエリアが外のタスクで割り当てられなかったことがなんで保証できるんだ?
とにかく動的確保、削除してフラグメント起こさないと思ってる方がどうかしてる。
そういう思い込みが通用するなら、所有権なんてもんは必要ないだろ。
あれはデフラグの対象にするかどうかが細大の目的
あと、普通のとか今時のとか、お前のあたのなかこっちは見られないんだから使うのやめろ
141デフォルトの名無しさん
2022/05/23(月) 02:44:22.59ID:Fl/zPM6P142デフォルトの名無しさん
2022/05/23(月) 08:16:07.89ID:aUQlcplw143デフォルトの名無しさん
2022/05/23(月) 09:11:41.94ID:n2ZPTBPD // ヒープを使う型Testを作って実証実験
#[derive(Debug)]
struct Test(Box<isize>);
// Test型が作成される時に使われるnew()を実装
impl Test {
fn new(n: isize) -> Self {
let new = Test(Box::new(n));
// その時にヒープで確保されたアドレスを表示
println!("{:p} = Test::new({n})", new.0);
new
}
}
// Test型の足し算を実装
impl std::ops::Add for Test {
type Output = Self;
fn add(self, rhs: Self) -> Self::Output {
Test::new(*self.0 + *rhs.0)
}
}
// 足し算の途中で使われる一時領域のアドレスはどうなるか?
fn main() {
let a = Test::new(1);
let b = Test::new(10);
let c = Test::new(100);
let d = Test::new(1000);
let e = Test::new(10000);
println!("{:?}", a + b + c + d + e);
}
#[derive(Debug)]
struct Test(Box<isize>);
// Test型が作成される時に使われるnew()を実装
impl Test {
fn new(n: isize) -> Self {
let new = Test(Box::new(n));
// その時にヒープで確保されたアドレスを表示
println!("{:p} = Test::new({n})", new.0);
new
}
}
// Test型の足し算を実装
impl std::ops::Add for Test {
type Output = Self;
fn add(self, rhs: Self) -> Self::Output {
Test::new(*self.0 + *rhs.0)
}
}
// 足し算の途中で使われる一時領域のアドレスはどうなるか?
fn main() {
let a = Test::new(1);
let b = Test::new(10);
let c = Test::new(100);
let d = Test::new(1000);
let e = Test::new(10000);
println!("{:?}", a + b + c + d + e);
}
144デフォルトの名無しさん
2022/05/23(月) 09:17:13.61ID:n2ZPTBPD 実行結果
0x55790623d9d0 = Test::new(1)
0x55790623d9f0 = Test::new(10)
0x55790623da10 = Test::new(100)
0x55790623da30 = Test::new(1000)
0x55790623da50 = Test::new(10000)
0x55790623da70 = Test::new(11)
0x55790623d9d0 = Test::new(111)
0x55790623da70 = Test::new(1111)
0x55790623d9d0 = Test::new(11111)
Test(11111)
つまり足し算で中間生成される一時的な領域は再利用されて使い回されていることが確認された
したがって>>140の主張がおかしい
0x55790623d9d0 = Test::new(1)
0x55790623d9f0 = Test::new(10)
0x55790623da10 = Test::new(100)
0x55790623da30 = Test::new(1000)
0x55790623da50 = Test::new(10000)
0x55790623da70 = Test::new(11)
0x55790623d9d0 = Test::new(111)
0x55790623da70 = Test::new(1111)
0x55790623d9d0 = Test::new(11111)
Test(11111)
つまり足し算で中間生成される一時的な領域は再利用されて使い回されていることが確認された
したがって>>140の主張がおかしい
145デフォルトの名無しさん
2022/05/23(月) 09:54:21.07ID:n2ZPTBPD 一般的に、今回のような多段の計算の場合は、中間領域が少なくとも2つ必要となる
なぜなら、一般的には「中間値2=中間値1+次の項目」と順に計算していくためである
つまり一般的な場合は、5つの変数の足し算ならば、中間値2つを加えて、計7つの領域を必要とする
しかし>>144の結果のアドレスを見ると、確かに中間値は交互にアドレスが異なり2種類だが、全体で6つの領域で済んでいるところに注目
5つの変数の領域は避けられないから、余分に確保されたのは1つのみで済んでいる
これがRust
今回用意したTest型はCopyを実装しなかったため、最初の「中間値1=a+b」を計算した時点てaとbは消費されてそれらの領域は解放される
そのため次の「中間値2=中間値1+c」の時に、中間値2の領域として既に解放されたaの領域が使われた
実際に中間値2のアドレスがaと同じになっていることで確認できる
同様に中間値3は中間値1と同じアドレスとなっている
結論
Rustでは消費し終えた変数や中間値が使用していたヒープ領域もすぐに再利用されて使い回されるため、
>>137のようなケースでも最小限のメモリしか必要とせずに済む
なぜなら、一般的には「中間値2=中間値1+次の項目」と順に計算していくためである
つまり一般的な場合は、5つの変数の足し算ならば、中間値2つを加えて、計7つの領域を必要とする
しかし>>144の結果のアドレスを見ると、確かに中間値は交互にアドレスが異なり2種類だが、全体で6つの領域で済んでいるところに注目
5つの変数の領域は避けられないから、余分に確保されたのは1つのみで済んでいる
これがRust
今回用意したTest型はCopyを実装しなかったため、最初の「中間値1=a+b」を計算した時点てaとbは消費されてそれらの領域は解放される
そのため次の「中間値2=中間値1+c」の時に、中間値2の領域として既に解放されたaの領域が使われた
実際に中間値2のアドレスがaと同じになっていることで確認できる
同様に中間値3は中間値1と同じアドレスとなっている
結論
Rustでは消費し終えた変数や中間値が使用していたヒープ領域もすぐに再利用されて使い回されるため、
>>137のようなケースでも最小限のメモリしか必要とせずに済む
146デフォルトの名無しさん
2022/05/23(月) 11:54:34.12ID:n+tkR/ue glibc mallocの仕様なのでCやC++でも同じです
147デフォルトの名無しさん
2022/05/23(月) 14:37:05.11ID:GiQn/B1E Rubyを長期間動かすとGCがメモリを
細分化してしまうという話かなんかと
混同してんのかな
細分化してしまうという話かなんかと
混同してんのかな
148デフォルトの名無しさん
2022/05/23(月) 15:10:34.13ID:K4XvBL00149デフォルトの名無しさん
2022/05/23(月) 15:44:46.83ID:dNJCbMGg たぶん1行目も0x55790623d9d0なのを見落としてる
150デフォルトの名無しさん
2022/05/23(月) 15:46:07.93ID:wWZ2mUik151デフォルトの名無しさん
2022/05/23(月) 15:51:35.00ID:K4XvBL00 >>149-150 あ、ほんとだありがとう。
152デフォルトの名無しさん
2022/05/23(月) 16:28:21.49ID:wuIMUAe9 試しに>>143で中間値をもう一つ必要とする例でやってみた
println!("{:?}", (a + b) + (c + d) + e);
メモリ1 = Test::new(1)
メモリ2 = Test::new(10)
メモリ3 = Test::new(100)
メモリ4 = Test::new(1000)
メモリ5 = Test::new(10000)
メモリ6 = Test::new(11) // (a + b)
メモリ1 = Test::new(1100) // (c + d)
メモリ3 = Test::new(1111) // (a + b) + (c + d)
メモリ6 = Test::new(11111) // (a + b) + (c + d) + e
即座に解放された変数領域を2つ使う点で異なるが結果的に計6つ使用に収まっているな
println!("{:?}", (a + b) + (c + d) + e);
メモリ1 = Test::new(1)
メモリ2 = Test::new(10)
メモリ3 = Test::new(100)
メモリ4 = Test::new(1000)
メモリ5 = Test::new(10000)
メモリ6 = Test::new(11) // (a + b)
メモリ1 = Test::new(1100) // (c + d)
メモリ3 = Test::new(1111) // (a + b) + (c + d)
メモリ6 = Test::new(11111) // (a + b) + (c + d) + e
即座に解放された変数領域を2つ使う点で異なるが結果的に計6つ使用に収まっているな
153デフォルトの名無しさん
2022/05/24(火) 10:09:58.38ID:PPYrRT7r154デフォルトの名無しさん
2022/05/30(月) 14:58:44.37ID:MKPVbFKD155デフォルトの名無しさん
2022/05/30(月) 15:12:27.13ID:MKPVbFKD >>145
>Rustでは消費し終えた変数や中間値が使用していたヒープ領域もすぐに再利用されて使い回されるため
変数が確保されるのは関数コールの度に毎回上書きされるスタックであてtヒープではない
そもそもヒープ領域の確保廃棄で何も問題なければメモリフラグメントなど発生するはずがない。
したがって長期間リブートを想定しないRTOSで、
予めメモリプールを確保してその中で固定的にメモリ割り当てなど行うこと自体全くの無意味ってことだが、
現実はそーじゃない。こんなもんエンベ試験あたりのイロハだろw
>Rustでは消費し終えた変数や中間値が使用していたヒープ領域もすぐに再利用されて使い回されるため
変数が確保されるのは関数コールの度に毎回上書きされるスタックであてtヒープではない
そもそもヒープ領域の確保廃棄で何も問題なければメモリフラグメントなど発生するはずがない。
したがって長期間リブートを想定しないRTOSで、
予めメモリプールを確保してその中で固定的にメモリ割り当てなど行うこと自体全くの無意味ってことだが、
現実はそーじゃない。こんなもんエンベ試験あたりのイロハだろw
156デフォルトの名無しさん
2022/05/30(月) 15:42:14.93ID:9QWL5Xmb >>154
マルチタスク、マルチユーザーOSというキーワードが出てくるのがよくわからないけど、
物理アドレスの話してるとしたらスタックだろうがヒープだろうがOSの都合で変わりうるんだからヒープのフラグメントの話とはなんら関係ないよね
仮想アドレスの話をしているなら、自プロセスの他スレッドの挙動によってフラグメントしうると言うのは正しいけど
だいたいのmalloc実装ではarenaはスレッドローカルになるからフラグメントは置きにくいと思うよ
というか、どういうシチュエーションで何を実験したときにどのような問題が起きたのか、前提を明確にしてよ
組み込みのRTOSとかいう特殊環境が当たり前のように語られると意見のすりあわせができぬ
マルチタスク、マルチユーザーOSというキーワードが出てくるのがよくわからないけど、
物理アドレスの話してるとしたらスタックだろうがヒープだろうがOSの都合で変わりうるんだからヒープのフラグメントの話とはなんら関係ないよね
仮想アドレスの話をしているなら、自プロセスの他スレッドの挙動によってフラグメントしうると言うのは正しいけど
だいたいのmalloc実装ではarenaはスレッドローカルになるからフラグメントは置きにくいと思うよ
というか、どういうシチュエーションで何を実験したときにどのような問題が起きたのか、前提を明確にしてよ
組み込みのRTOSとかいう特殊環境が当たり前のように語られると意見のすりあわせができぬ
157デフォルトの名無しさん
2022/05/30(月) 15:55:38.95ID:MKPVbFKD158デフォルトの名無しさん
2022/05/30(月) 15:57:12.40ID:MKPVbFKD159デフォルトの名無しさん
2022/05/30(月) 16:07:33.52ID:MKPVbFKD >>156
>マルチタスク、マルチユーザーOSというキーワードが出てくるのがよくわからないけど
汎用OSで自分の起動したタスクしか動いてないと思ってるわけ?
RTOSを持ち出したのは自分のタスクしか実行していなくても、フラグメントを起こす具体例として持ち出した。
そのRTOSでも細心の実装心掛けてるのに汎用OSなんでいわずもがなって話。
今時は、HWのメモリが大きくなってせいぜいページング時のプチフリーズ程度で気付いてない奴もいるだろうが、
やっぱりフラグメントは常時発生してる。
てか、メモリデフラグとか動かしたことないのか?
>マルチタスク、マルチユーザーOSというキーワードが出てくるのがよくわからないけど
汎用OSで自分の起動したタスクしか動いてないと思ってるわけ?
RTOSを持ち出したのは自分のタスクしか実行していなくても、フラグメントを起こす具体例として持ち出した。
そのRTOSでも細心の実装心掛けてるのに汎用OSなんでいわずもがなって話。
今時は、HWのメモリが大きくなってせいぜいページング時のプチフリーズ程度で気付いてない奴もいるだろうが、
やっぱりフラグメントは常時発生してる。
てか、メモリデフラグとか動かしたことないのか?
160デフォルトの名無しさん
2022/05/30(月) 16:23:56.84ID:S6YD6bxt それなんかRustと関係あるんすか?
161デフォルトの名無しさん
2022/05/30(月) 16:55:49.66ID:ccLFuKy8162デフォルトの名無しさん
2022/05/30(月) 18:21:04.97ID:9QWL5Xmb163デフォルトの名無しさん
2022/05/30(月) 22:33:20.68ID:SMH6yVl4 ページ単位で割り当てるのにどうやってフラグメンテーション起こすんだろう
164デフォルトの名無しさん
2022/05/31(火) 14:19:31.88ID:X/NoC31E じゃあなんでLinuxやBSD、Windowsはメモリコンパクション機能を実装してるの?
165デフォルトの名無しさん
2022/05/31(火) 14:23:20.93ID:5HfxTPdy >>164 LinuxやBSD、Windowsはメモリコンパクション機能を実装してるの?
166デフォルトの名無しさん
2022/05/31(火) 16:38:22.49ID:COFqsPBY なんで、mallocの話がOSの話とすり替わってたの?
167デフォルトの名無しさん
2022/05/31(火) 19:29:31.55ID:6cb4XAup >>140あたりでもう一緒くたにされてるからしょうがない
たぶん誰も問題意識を共有できてない
たぶん誰も問題意識を共有できてない
168デフォルトの名無しさん
2022/05/31(火) 20:07:12.82ID:qkI00F5r たぶんmallocとOSが密に関連するようなRTOS?が前提なんだと思うよ
>>140は業務で触ってるとかで特性をよく知っているがそのコンテキストが他の人と共有できていないのだろう
>>140は業務で触ってるとかで特性をよく知っているがそのコンテキストが他の人と共有できていないのだろう
169デフォルトの名無しさん
2022/05/31(火) 20:16:37.40ID:/PJVfDdU ずっと暴れている>>140だけが『所有権』と『OS』を同時に登場させていて二つの別レイヤのメモリ管理の話を区別できていない
ここはRustアンチスレなのにプログラミング言語Rustとは無関係な話で暴れていている
ここはRustアンチスレなのにプログラミング言語Rustとは無関係な話で暴れていている
170デフォルトの名無しさん
2022/05/31(火) 21:05:52.27ID:ycu/V5YM 便乗すんな複おじ
171デフォルトの名無しさん
2022/05/31(火) 22:22:41.63ID:qkI00F5r まあ所有権の話は唐突でよく分かんないけど彼の中では理屈的に繋がりがあるのではないのかな
もうちょっと丁寧に書いてくれれば分かりそうな気もするんだけど
もうちょっと丁寧に書いてくれれば分かりそうな気もするんだけど
172デフォルトの名無しさん
2022/07/07(木) 09:23:29.02ID:kCv7I/gK あーうぜー
1.61.0ビルドしてるけどなんだかいろいろとボコボコDLしてくる()
1.61.0なのに 1.60.0-xxx をDLしてくるし()
あーうぜー
1.61.0ビルドしてるけどなんだかいろいろとボコボコDLしてくる()
1.61.0なのに 1.60.0-xxx をDLしてくるし()
あーうぜー
173デフォルトの名無しさん
2022/07/09(土) 14:07:59.53ID:52J5yu6r いつのまにかpython module のビルドに入り込んでるのな
悪質
悪質
174デフォルトの名無しさん
2022/08/26(金) 16:38:04.30ID:IVLb+hqW 腐れ言語
早く外せよ
早く外せよ
175デフォルトの名無しさん
2022/09/04(日) 20:06:08.29ID:9yOWYxc4 なんか第二Javaという感じの臭いがする
非人間的な設計で人間を不幸にしていく悪しき文明というか
非人間的な設計で人間を不幸にしていく悪しき文明というか
176デフォルトの名無しさん
2022/09/07(水) 04:11:07.00ID:h5FYCJvl 確かに奴隷言語っぽいね
177デフォルトの名無しさん
2022/10/08(土) 07:50:08.22ID:fwLI4Y/X linus はこれがいいみたいだけどな()
git も Rust もゴミ
git も Rust もゴミ
178デフォルトの名無しさん
2022/10/10(月) 15:43:56.96ID:OkLu+Ovr meson のビルドで、
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [64 lines of output]
こんなエラーが出た
すげーイラっとくる
> .toml
クズ言語
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [64 lines of output]
こんなエラーが出た
すげーイラっとくる
> .toml
クズ言語
179デフォルトの名無しさん
2022/10/12(水) 21:08:34.50ID:BNoDz+WR >>177
重要な部分はRustで作らないと思うよ
重要な部分はRustで作らないと思うよ
180デフォルトの名無しさん
2022/10/20(木) 18:29:22.69ID:uCae9JR1 なんでこれ、こんなにコンパイル遅いの?
181デフォルトの名無しさん
2022/10/20(木) 18:33:14.88ID:sgmqUmRA >>177
俺もgitもgithubも使いにくいと思っていた。
俺もgitもgithubも使いにくいと思っていた。
182デフォルトの名無しさん
2022/10/20(木) 18:58:12.23ID:1LIQj8JQ git自体は悪いと思わんが、なんかgit奉行が色々言い出すのがうざいわ。
rustもそういう匂いがぷんぷんする。
rustもそういう匂いがぷんぷんする。
183デフォルトの名無しさん
2022/10/20(木) 19:21:40.91ID:LtHEChVu どのバージョン管理ソフトが良いの?
184デフォルトの名無しさん
2022/10/21(金) 01:23:53.55ID:sdgXBR6P185デフォルトの名無しさん
2023/08/11(金) 13:18:17.34ID:98F5eoJ/ cargo check error: failed to run custom build command for `glib-sys v0.17.10`
いい加減にしろよカス言語
いい加減にしろよカス言語
186デフォルトの名無しさん
2023/08/11(金) 13:34:35.94ID:v1edpQDw cargo publish して初めて出るエラー (cargo のあっち側の環境でコンパイルしてる) ってうざいよね
187デフォルトの名無しさん
2023/08/12(土) 00:05:38.13ID:qDONLKM9188デフォルトの名無しさん
2023/08/15(火) 08:53:12.04ID:ca01mENm firefox のビルドもrust が邪魔しまくりだよね()
189デフォルトの名無しさん
2023/10/02(月) 13:43:22.96ID:sFvf9xp1 RustとC++の相性は最悪だが
RustとCはまあまあイケる
いいじゃんいいじゃん
RustとCはまあまあイケる
いいじゃんいいじゃん
190デフォルトの名無しさん
2023/10/03(火) 16:57:54.88ID:rr8MlNTB カス言語ではない
191デフォルトの名無しさん
2023/10/05(木) 17:14:00.69ID:WXXGTjkD C美しい
C++カス
Rustもうちょっとがんがれ
C++カス
Rustもうちょっとがんがれ
192デフォルトの名無しさん
2024/04/21(日) 15:50:07.23ID:aDRU4sod Rust リファクタリングしてるときに
trait 境界が変わって
あれ?ってなることが多いな
trait 境界が変わって
あれ?ってなることが多いな
193デフォルトの名無しさん
2024/04/21(日) 18:44:44.75ID:GAd5jyBU >>192
trait境界を満たせなくなるとコンパイラが教えてくれるので安全にリファクタリングできて良いよね
trait境界を満たせなくなるとコンパイラが教えてくれるので安全にリファクタリングできて良いよね
194デフォルトの名無しさん
2024/04/23(火) 10:33:27.89ID:9zVe0TBb >>0185
お前はディストリ自分で組まないの?
情弱だな(プ
お前はディストリ自分で組まないの?
情弱だな(プ
195デフォルトの名無しさん
2024/04/23(火) 10:47:04.81ID:bJrnaJAq 創価
196デフォルトの名無しさん
2024/04/27(土) 21:26:16.94ID:+PotGQRe crates.io が死ぬと詰むな・・・
197デフォルトの名無しさん
2024/04/28(日) 14:02:08.42ID:e+80DOh2 なんなの vendoring とか stable channel とか
意識高そうですね()
意識高そうですね()
198デフォルトの名無しさん
2024/06/08(土) 09:22:59.84ID:Kcr3cAzI199デフォルトの名無しさん
2024/06/08(土) 10:03:29.15ID:9nPXIyFb >>198
Rustに該当する話が一つもないのにRustを批判?
Rustに該当する話が一つもないのにRustを批判?
200デフォルトの名無しさん
2024/06/09(日) 16:29:53.15ID:IIKkP3Jm 信者は信者スレに帰れ
201デフォルトの名無しさん
2024/09/21(土) 15:07:34.01ID:v+xBeerr おまいらホントRuby好きだな
202デフォルトの名無しさん
2024/09/21(土) 15:35:51.56ID:oJtK/qJ9 遅いのがなあ
レスを投稿する
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 [ぐれ★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 中国高官と話す外務省局長の表情、やばい ★2 [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 【悲報】日本人「日本が中国と戦争になったら世界中の国が応援してくれるぞ!」 [616817505]
- 小野田経済安保相「すぐに経済的威圧するところへの依存はリスク」😲 [861717324]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 【ほんこん悲報】吉本新喜劇の中国公演が中止に! [523957489]
