X



Rustアンチスレ
0001デフォルトの名無しさん
垢版 |
2017/10/26(木) 23:37:04.08ID:9syp6YaG
Hello World以上の事をやるとコンパイルが通らない()Rustのアンチスレです
0145デフォルトの名無しさん
垢版 |
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のようなケースでも最小限のメモリしか必要とせずに済む
0147デフォルトの名無しさん
垢版 |
2022/05/23(月) 14:37:05.11ID:GiQn/B1E
Rubyを長期間動かすとGCがメモリを
細分化してしまうという話かなんかと
混同してんのかな
0148デフォルトの名無しさん
垢版 |
2022/05/23(月) 15:10:34.13ID:K4XvBL00
>>145
> しかし>>144の結果のアドレスを見ると、確かに中間値は交互にアドレスが異なり2種類だが、全体で6つの領域で済んでいるところに注目
7つ使ってるように見えるんだけど、何を見て6つで済んでるって言えるの?
0150デフォルトの名無しさん
垢版 |
2022/05/23(月) 15:46:07.93ID:wWZ2mUik
>>148
よく見ると2番目の中間値であるTest::new(111)のアドレスが変数aつまりTest::new(1)のアドレスと同じ
これはRust特有でその時点では変数a(や変数b)を使い終えて解放されているために再利用されたと推測できる
そのため6つメモリ領域で済んでいるのだろう

>>146
CやC++では使い終わった変数の領域が暗黙的には解放されないから7つのメモリ領域を使うと予想
0152デフォルトの名無しさん
垢版 |
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つ使用に収まっているな
0154デフォルトの名無しさん
垢版 |
2022/05/30(月) 14:58:44.37ID:MKPVbFKD
>>144
>>145
なーにを馬鹿な考察してんの?
おまえの実行するタスクの途中で他のタスクが実行され、そいつが解放したヒープを確保しないことを
なんで今時のマルチタスク、マルチユーザOSで保証できるのかと言ってる。
0155デフォルトの名無しさん
垢版 |
2022/05/30(月) 15:12:27.13ID:MKPVbFKD
>>145
>Rustでは消費し終えた変数や中間値が使用していたヒープ領域もすぐに再利用されて使い回されるため

変数が確保されるのは関数コールの度に毎回上書きされるスタックであてtヒープではない
そもそもヒープ領域の確保廃棄で何も問題なければメモリフラグメントなど発生するはずがない。
したがって長期間リブートを想定しないRTOSで、
予めメモリプールを確保してその中で固定的にメモリ割り当てなど行うこと自体全くの無意味ってことだが、
現実はそーじゃない。こんなもんエンベ試験あたりのイロハだろw
0156デフォルトの名無しさん
垢版 |
2022/05/30(月) 15:42:14.93ID:9QWL5Xmb
>>154
マルチタスク、マルチユーザーOSというキーワードが出てくるのがよくわからないけど、
物理アドレスの話してるとしたらスタックだろうがヒープだろうがOSの都合で変わりうるんだからヒープのフラグメントの話とはなんら関係ないよね

仮想アドレスの話をしているなら、自プロセスの他スレッドの挙動によってフラグメントしうると言うのは正しいけど
だいたいのmalloc実装ではarenaはスレッドローカルになるからフラグメントは置きにくいと思うよ

というか、どういうシチュエーションで何を実験したときにどのような問題が起きたのか、前提を明確にしてよ
組み込みのRTOSとかいう特殊環境が当たり前のように語られると意見のすりあわせができぬ
0157デフォルトの名無しさん
垢版 |
2022/05/30(月) 15:55:38.95ID:MKPVbFKD
>>142
> >>137のような解放直後に同じサイズで領域を確保する場合は領

なんで、マルチタスクのOSが、おまえの都合のいいタイミングで解法直後に確保できるのかと言ってる。
例えば、解法直後に割込タスクがおまえのプログラムを一時実行停止し、
そこで開放したばかりのメモリエリアを確保しないとなんで言い切れるんだと聞いてる。

そして、ページングの発生もなんでおこらないと決めてかかってるんだ? 今時のOSでww
おまえが書き出したメモリエリアはあくまでプログラム側から見た論理アドレスだろ?
そこが実はページング対象になってなかったとなぜ断言できるんだ。
0158デフォルトの名無しさん
垢版 |
2022/05/30(月) 15:57:12.40ID:MKPVbFKD
>>156
>物理アドレスの話してるとしたらスタックだろうがヒープだろうがOSの都

プログラムからは論理アドレスしか見えない
同じ領域を確保してるかどうかはプログラムからはわからない
0159デフォルトの名無しさん
垢版 |
2022/05/30(月) 16:07:33.52ID:MKPVbFKD
>>156
>マルチタスク、マルチユーザーOSというキーワードが出てくるのがよくわからないけど

汎用OSで自分の起動したタスクしか動いてないと思ってるわけ?
RTOSを持ち出したのは自分のタスクしか実行していなくても、フラグメントを起こす具体例として持ち出した。
そのRTOSでも細心の実装心掛けてるのに汎用OSなんでいわずもがなって話。
今時は、HWのメモリが大きくなってせいぜいページング時のプチフリーズ程度で気付いてない奴もいるだろうが、
やっぱりフラグメントは常時発生してる。
てか、メモリデフラグとか動かしたことないのか?
0161デフォルトの名無しさん
垢版 |
2022/05/30(月) 16:55:49.66ID:ccLFuKy8
>>154
まずは基礎知識を勉強しよう
Rustにおいてタスクとは非同期にスケジューリングされるスタックレスなコルーチンのこと
そうでない意味のタスクならばプログラミング言語Rustとは関係ない話

>>155
そのRustプログラム例はBoxを使っているのでスタック上てはなくちゃんとヒープを用いた実験となっている
そんな基本的なことも理解できないならば勉強して出直してきなさい

>>159
それはRustとは全く無関係ない話
基礎的なことを会得していないとそういった無関係な話を持ち出してしまう
0162デフォルトの名無しさん
垢版 |
2022/05/30(月) 18:21:04.97ID:9QWL5Xmb
>>157
ページサイズより大きい領域の獲得解放を繰り返す想定で良いのかな?
malloc/freeがmmap/munmap呼び出しと一対一対応するような
で、どのOSの実装で問題が起きたの?
0163デフォルトの名無しさん
垢版 |
2022/05/30(月) 22:33:20.68ID:SMH6yVl4
ページ単位で割り当てるのにどうやってフラグメンテーション起こすんだろう
0168デフォルトの名無しさん
垢版 |
2022/05/31(火) 20:07:12.82ID:qkI00F5r
たぶんmallocとOSが密に関連するようなRTOS?が前提なんだと思うよ
>>140は業務で触ってるとかで特性をよく知っているがそのコンテキストが他の人と共有できていないのだろう
0169デフォルトの名無しさん
垢版 |
2022/05/31(火) 20:16:37.40ID:/PJVfDdU
ずっと暴れている>>140だけが『所有権』と『OS』を同時に登場させていて二つの別レイヤのメモリ管理の話を区別できていない
ここはRustアンチスレなのにプログラミング言語Rustとは無関係な話で暴れていている
0171デフォルトの名無しさん
垢版 |
2022/05/31(火) 22:22:41.63ID:qkI00F5r
まあ所有権の話は唐突でよく分かんないけど彼の中では理屈的に繋がりがあるのではないのかな
もうちょっと丁寧に書いてくれれば分かりそうな気もするんだけど
0172デフォルトの名無しさん
垢版 |
2022/07/07(木) 09:23:29.02ID:kCv7I/gK
あーうぜー
1.61.0ビルドしてるけどなんだかいろいろとボコボコDLしてくる()
1.61.0なのに 1.60.0-xxx をDLしてくるし()

あーうぜー
0175デフォルトの名無しさん
垢版 |
2022/09/04(日) 20:06:08.29ID:9yOWYxc4
なんか第二Javaという感じの臭いがする
非人間的な設計で人間を不幸にしていく悪しき文明というか
0178デフォルトの名無しさん
垢版 |
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

クズ言語
0182デフォルトの名無しさん
垢版 |
2022/10/20(木) 18:58:12.23ID:1LIQj8JQ
git自体は悪いと思わんが、なんかgit奉行が色々言い出すのがうざいわ。
rustもそういう匂いがぷんぷんする。
0184デフォルトの名無しさん
垢版 |
2022/10/21(金) 01:23:53.55ID:sdgXBR6P
>>183
名前は変わったと思うが、MS製のVisual Source Safeなんかは直感的で便利
だったな。特に何も学ばなくても普通に使えた。
0185デフォルトの名無しさん
垢版 |
2023/08/11(金) 13:18:17.34ID:98F5eoJ/
cargo check error: failed to run custom build command for `glib-sys v0.17.10`

いい加減にしろよカス言語
0186デフォルトの名無しさん
垢版 |
2023/08/11(金) 13:34:35.94ID:v1edpQDw
cargo publish して初めて出るエラー (cargo のあっち側の環境でコンパイルしてる) ってうざいよね
0187デフォルトの名無しさん
垢版 |
2023/08/12(土) 00:05:38.13ID:qDONLKM9
>>185
Cコンパイラかリンカが入ってないんじゃね
そのメッセージの前に何か出ていると思うが

>>186
あっち側ってcrates.ioのこと?
リモート側でビルドなんか走るんだっけ
0189デフォルトの名無しさん
垢版 |
2023/10/02(月) 13:43:22.96ID:sFvf9xp1
RustとC++の相性は最悪だが
RustとCはまあまあイケる
いいじゃんいいじゃん
0190デフォルトの名無しさん
垢版 |
2023/10/03(火) 16:57:54.88ID:rr8MlNTB
カス言語ではない
0191デフォルトの名無しさん
垢版 |
2023/10/05(木) 17:14:00.69ID:WXXGTjkD
C美しい
C++カス
Rustもうちょっとがんがれ
0192デフォルトの名無しさん
垢版 |
2024/04/21(日) 15:50:07.23ID:aDRU4sod
Rust リファクタリングしてるときに
trait 境界が変わって
あれ?ってなることが多いな
0193デフォルトの名無しさん
垢版 |
2024/04/21(日) 18:44:44.75ID:GAd5jyBU
>>192
trait境界を満たせなくなるとコンパイラが教えてくれるので安全にリファクタリングできて良いよね
0194デフォルトの名無しさん
垢版 |
2024/04/23(火) 10:33:27.89ID:9zVe0TBb
>>0185
お前はディストリ自分で組まないの?
情弱だな(プ
レスを投稿する


ニューススポーツなんでも実況