公式
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 part19
https://mevius.5ch.net/test/read.cgi/tech/1673926892/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
探検
Rust part20
■ このスレッドは過去ログ倉庫に格納されています
2023/03/03(金) 00:45:28.73ID:vTVY069B
685デフォルトの名無しさん
2023/06/15(木) 23:59:14.48ID:sGVU6kWB >>682
ライフタイムの「仮引数」としては省略されると全部同じ扱いで合ってるよ。
https://doc.rust-lang.org/reference/lifetime-elision.html
一方で呼び出す側が認識しているライフタイムの「実引数」は違っていてもいい。
>>655の例で言えば、呼び出す側が x: &'b str と y: &'c str を渡して戻り値を z: &'d str に束縛するなら、'a は 'b: 'a, 'c: 'a, 'a: 'd を満たす最小のライフタイムに推論される。
そのような 'a があれば、&'b str <: &'a str etc. の部分型付け関係に基づいて、引数はすべて一度 &'a str にアップキャストされると思っていればいい。はず。
適切な 'a が無ければライフタイムに関するコンパイルエラーになる。
https://doc.rust-lang.org/reference/subtyping.html
https://rust-lang.github.io/rfcs/2094-nll.html
ライフタイムの「仮引数」としては省略されると全部同じ扱いで合ってるよ。
https://doc.rust-lang.org/reference/lifetime-elision.html
一方で呼び出す側が認識しているライフタイムの「実引数」は違っていてもいい。
>>655の例で言えば、呼び出す側が x: &'b str と y: &'c str を渡して戻り値を z: &'d str に束縛するなら、'a は 'b: 'a, 'c: 'a, 'a: 'd を満たす最小のライフタイムに推論される。
そのような 'a があれば、&'b str <: &'a str etc. の部分型付け関係に基づいて、引数はすべて一度 &'a str にアップキャストされると思っていればいい。はず。
適切な 'a が無ければライフタイムに関するコンパイルエラーになる。
https://doc.rust-lang.org/reference/subtyping.html
https://rust-lang.github.io/rfcs/2094-nll.html
686デフォルトの名無しさん
2023/06/16(金) 00:20:26.24ID:Ej8ifuNd Rustのコードが'まみれになるのはそういう理由だよね
687デフォルトの名無しさん
2023/06/16(金) 00:24:30.59ID:0npxuivH >>685
> パラメーター内の省略された各ライフタイムは、別個のライフタイム パラメーターになります。
> パラメーター内の省略された各ライフタイムは、別個のライフタイム パラメーターになります。
688デフォルトの名無しさん
2023/06/16(金) 00:30:18.44ID:rJ7TTESK >>685
いや、全部別になる
参照引き数が2つあれば'aと'b別になる
ソース
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html
The first rule is that the compiler assigns a lifetime parameter to each parameter that’s a reference.
In other words,
a function with one parameter gets one lifetime parameter: fn foo<'a>(x: &'a i32);
a function with two parameters gets two separate lifetime parameters: fn foo<'a, 'b>(x: &'a i32, y: &'b i32);
and so on.
(snip)
Let’s look at another example, this time using the longest function that had no lifetime parameters
when we started working with it in Listing 10-20:
fn longest(x: &str, y: &str) -> &str {
Let’s apply the first rule: each parameter gets its own lifetime.
This time we have two parameters instead of one, so we have two lifetimes:
fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
このようにコンパイラは解釈する
そして戻り値が一意に決まらないのでコンパイルエラーとなる
そのためコンパイラは改善提案の一つとして全部同じにする提案コードを出す
fn longest<'a,>(x: &'a str, y: &'a str) -> &'a str {
全部同じ扱いと思い込んでいる人はこの提案をコンパイラが解釈したと逆に思ってしまったのではないか
いや、全部別になる
参照引き数が2つあれば'aと'b別になる
ソース
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html
The first rule is that the compiler assigns a lifetime parameter to each parameter that’s a reference.
In other words,
a function with one parameter gets one lifetime parameter: fn foo<'a>(x: &'a i32);
a function with two parameters gets two separate lifetime parameters: fn foo<'a, 'b>(x: &'a i32, y: &'b i32);
and so on.
(snip)
Let’s look at another example, this time using the longest function that had no lifetime parameters
when we started working with it in Listing 10-20:
fn longest(x: &str, y: &str) -> &str {
Let’s apply the first rule: each parameter gets its own lifetime.
This time we have two parameters instead of one, so we have two lifetimes:
fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
このようにコンパイラは解釈する
そして戻り値が一意に決まらないのでコンパイルエラーとなる
そのためコンパイラは改善提案の一つとして全部同じにする提案コードを出す
fn longest<'a,>(x: &'a str, y: &'a str) -> &'a str {
全部同じ扱いと思い込んでいる人はこの提案をコンパイラが解釈したと逆に思ってしまったのではないか
690デフォルトの名無しさん
2023/06/16(金) 05:23:01.54ID:VMczRTMU 厳格な言語て嫌いでな
Verilogはなんの問題もなかったのに
VHDLはとうとう挫折した
てか予約後長いし,マクロがないのが許せなかったんだが
その意味でJavaも結局書く気にもならなんだわ
Verilogはなんの問題もなかったのに
VHDLはとうとう挫折した
てか予約後長いし,マクロがないのが許せなかったんだが
その意味でJavaも結局書く気にもならなんだわ
691デフォルトの名無しさん
2023/06/16(金) 14:09:49.37ID:J436PiNE692デフォルトの名無しさん
2023/06/16(金) 14:58:22.19ID:KrMgX33B 水ノ都さんこんにちは
693デフォルトの名無しさん
2023/06/16(金) 17:51:24.52ID:fkGXFirN 組み込み向けの解説記事でよさそうなのってない?
The Embedded Rust Bookは有名だけどSTM32ありきで書かれているしリンカとか肝心な部分の説明もないように見える
日本の人が書いているっぽいEmbedded Rust Techniquesの方がマシだがこれでも最低限か・・・
The Embedded Rust Bookは有名だけどSTM32ありきで書かれているしリンカとか肝心な部分の説明もないように見える
日本の人が書いているっぽいEmbedded Rust Techniquesの方がマシだがこれでも最低限か・・・
694デフォルトの名無しさん
2023/06/16(金) 18:25:34.38ID:b/MZViq+ >>693
The Book以外のドキュメントなら https://docs.rust-embedded.org/ からいろいろ探せるよ
あるいはEmbedded Rust Techniquesの人が書いてる「基礎から学ぶ組み込みRust」って本とか
The Book以外のドキュメントなら https://docs.rust-embedded.org/ からいろいろ探せるよ
あるいはEmbedded Rust Techniquesの人が書いてる「基礎から学ぶ組み込みRust」って本とか
695デフォルトの名無しさん
2023/06/16(金) 18:39:22.38ID:dwgGWWV8 Rust好きがまあまあ見てそうなこのスレでもこのレベルなんだから一般に広まるのは無理ゲーだと思うわ
696デフォルトの名無しさん
2023/06/16(金) 19:23:08.87ID:PpmLuWiO 問題点を具体的に言えずに曖昧に批判してるつもりの人がいるね
697デフォルトの名無しさん
2023/06/16(金) 19:40:36.76ID:dwgGWWV8 自分でスレを読めばいい
お前の足りない脳を誰かがフォローしてボローチェックまでしてくれるなんて思うなよ
お前の足りない脳を誰かがフォローしてボローチェックまでしてくれるなんて思うなよ
698デフォルトの名無しさん
2023/06/16(金) 19:42:26.19ID:QEmhRLek 言語の良し悪し以上にライブラリの分量が効いてくるんだわ。
そんでその大量にあるライブラリが利用しやすければなお良い。
やりたいことにマッチするライブラリがあるなら
自分で書かなくてよい部分が多くなるわけだし、
書く部分が少なければ少々の面倒くささなんてどうでもよくなる。
C や C++ の歴史の長さ故の物量に対抗するのは難しいけど
Rust は利用しやすさではかなり上回ってると思うので時間の問題だろ。
そんでその大量にあるライブラリが利用しやすければなお良い。
やりたいことにマッチするライブラリがあるなら
自分で書かなくてよい部分が多くなるわけだし、
書く部分が少なければ少々の面倒くささなんてどうでもよくなる。
C や C++ の歴史の長さ故の物量に対抗するのは難しいけど
Rust は利用しやすさではかなり上回ってると思うので時間の問題だろ。
699デフォルトの名無しさん
2023/06/16(金) 23:38:46.36ID:KXgq6I38 >>695
単に5chがオワコンなだけだぞ
単に5chがオワコンなだけだぞ
700デフォルトの名無しさん
2023/06/17(土) 20:33:46.40ID:pjy0GOzk >>683
ときにアセンブラで書必要に迫られる組込でRustあ日の目をみることなんてない
ときにアセンブラで書必要に迫られる組込でRustあ日の目をみることなんてない
701デフォルトの名無しさん
2023/06/17(土) 21:26:17.31ID:iUJ74AnJ >>694
その人は本を出していたのか。今度都内へ行ったときに見てみるか
その人は本を出していたのか。今度都内へ行ったときに見てみるか
702デフォルトの名無しさん
2023/06/17(土) 23:07:17.38ID:H9lc23A5 今日たまたま本屋で見かけた
売れるんかこれと思ったけど買う人がいる
売れるんかこれと思ったけど買う人がいる
703デフォルトの名無しさん
2023/06/18(日) 01:17:21.64ID:PsNivFBp Rustでlinuxに機能を追加するならどんな機能が欲しい?みんな自由に言ってみて。
704デフォルトの名無しさん
2023/06/18(日) 09:07:15.46ID:JHhjqwBk >>695
ほんそれ
ほんそれ
705デフォルトの名無しさん
2023/06/18(日) 09:08:49.10ID:JHhjqwBk >>698
crates.io はゴミだらけのイメージ(もちろんゴミじゃないのもあるがSN比が絶望的に悪い)
crates.io はゴミだらけのイメージ(もちろんゴミじゃないのもあるがSN比が絶望的に悪い)
706デフォルトの名無しさん
2023/06/18(日) 09:13:33.05ID:JHhjqwBk >>703
これと言って無いし今のlinuxで満足(不満もあるけどそれがRustで解決するとも思わない)
カーネルもシェルもAPIもRust化しないと意味無くね?
どうせ unsafe! unsafe!! unsafe!!!
これと言って無いし今のlinuxで満足(不満もあるけどそれがRustで解決するとも思わない)
カーネルもシェルもAPIもRust化しないと意味無くね?
どうせ unsafe! unsafe!! unsafe!!!
707デフォルトの名無しさん
2023/06/18(日) 09:15:13.52ID:QTU736PH >>705
まぁそれは何を比較するかじゃない?
ディストリビューション配布のCライブラリだと厳選されてるから当然クォリティ高いけど
GitHub上から探すとC系の方がS/N悪い(そもそもビルドできないとか)と感じるし
まぁそれは何を比較するかじゃない?
ディストリビューション配布のCライブラリだと厳選されてるから当然クォリティ高いけど
GitHub上から探すとC系の方がS/N悪い(そもそもビルドできないとか)と感じるし
708デフォルトの名無しさん
2023/06/18(日) 10:10:46.67ID:dnSpWVpE rustは他の言語からの移植性が著しく悪い
移植と言うより最初から作ってるのと変わらない
移植と言うより最初から作ってるのと変わらない
709デフォルトの名無しさん
2023/06/18(日) 10:29:41.24ID:dnSpWVpE c → rustの移植が楽ならほおっておいても全部rustになる
その視点が欠けてる
ライナスがLinuxやGit作ったときのようにその他の勢力がおバカさんで実質アシストしてる時と同じような状況
Cust作るためのおぜん立てをしてるようにも見える
その視点が欠けてる
ライナスがLinuxやGit作ったときのようにその他の勢力がおバカさんで実質アシストしてる時と同じような状況
Cust作るためのおぜん立てをしてるようにも見える
710デフォルトの名無しさん
2023/06/18(日) 10:37:34.85ID:dnSpWVpE 後世から見たらライナスはlinuxとgitとcustを作った偉人ですと言うことになるんだろう
711デフォルトの名無しさん
2023/06/18(日) 12:12:13.93ID:kd/h5bzN 仮にkernelや主要コマンドが全部rustに移植されたらその部分は安全にはなるわな
しかし現状そこまで行くかはわからん
なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
つまり主要なlibも全部rustで書き変えないとunsafeからは逃れられないけどものすごい作業量になりそう
いけるのかな?
しかし現状そこまで行くかはわからん
なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
つまり主要なlibも全部rustで書き変えないとunsafeからは逃れられないけどものすごい作業量になりそう
いけるのかな?
712デフォルトの名無しさん
2023/06/18(日) 13:00:20.06ID:TBj+uqoQ713デフォルトの名無しさん
2023/06/18(日) 13:12:59.30ID:aPOK9VRV714デフォルトの名無しさん
2023/06/18(日) 13:26:34.81ID:PsNivFBp >>712
個人的にRustはあれだけの実行速度、安全性の割にはかなり文法がシンプルで好きだけどね。
個人的にRustはあれだけの実行速度、安全性の割にはかなり文法がシンプルで好きだけどね。
715デフォルトの名無しさん
2023/06/18(日) 14:02:54.81ID:TBj+uqoQ >>714
蓼食う虫も好き好きだね。
蓼食う虫も好き好きだね。
716デフォルトの名無しさん
2023/06/18(日) 16:08:38.91ID:aKqZwOD/717デフォルトの名無しさん
2023/06/18(日) 23:54:05.72ID:V79KPNHt >>703
その発想からしてRustのパラダイムから逸脱しており反Rust
その発想からしてRustのパラダイムから逸脱しており反Rust
718デフォルトの名無しさん
2023/06/20(火) 17:00:50.46ID:Dvlv0UV+ >711
>なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
これ知るとRust安全神話なんて嘘八百八町なんよね
金儲けのために保守気取ってましたーに通じる
>なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
これ知るとRust安全神話なんて嘘八百八町なんよね
金儲けのために保守気取ってましたーに通じる
719デフォルトの名無しさん
2023/06/20(火) 19:31:43.67ID:WU95hkUv720デフォルトの名無しさん
2023/06/20(火) 19:54:19.85ID:kXFGlrCh unsafe=危険=意味なしみたいな人はRustを使うことが目的だと思っているんだろうね
安全なソフトウェアやシステムを開発することが目的ならそういう発想にはならないはずだ
安全なソフトウェアやシステムを開発することが目的ならそういう発想にはならないはずだ
721デフォルトの名無しさん
2023/06/20(火) 20:03:45.82ID:2T4Y6uqL 純粋なRustのライブラリはまだ完成度が微妙なんだよな。PythonとかC,C++と比べると。勿論、他言語のバインディングのライブラリは結構豊富なんだけど、それだとRustを使う意義がないからな。
722デフォルトの名無しさん
2023/06/20(火) 20:20:14.97ID:IIzrqfbq >>718
部分的にでもマシになるなら意味あるやん。
論理的な破綻がないように定理証明器をベースにした言語とかもあるけど、
そのために既存のライブラリが使えないようだとそれこそ使い物にならんだろ。
結局はバランスおじさん「結局はバランス」
部分的にでもマシになるなら意味あるやん。
論理的な破綻がないように定理証明器をベースにした言語とかもあるけど、
そのために既存のライブラリが使えないようだとそれこそ使い物にならんだろ。
結局はバランスおじさん「結局はバランス」
723デフォルトの名無しさん
2023/06/20(火) 20:41:02.57ID:7CvaHT3W >>718
それはunsafeとは何かを理解できていなくて初心者なのかも知れないけどかなりヤバイよ
ffiなんて例を出す必要はなくメモリ空間へのアクセスは最終的に生ポインタとなって当然unsafeになる
例えばslice[index]やslice.iter()の内部は当然unsafeな生ポインタを使って実装されている
ではunsafeで実装されているslice[index]やslice.iter()は危険か?となるがもちろん完全に安全だ
なぜならunsafeを内部に閉じ込めて安全なインタフェースを提供しているからである
これがRustの基本原理
ffiについても同様で例えばファイルのオープンや読み書きは通常OSへのシステムコールとなり通常ffiとなるため当然unsafe
しかしRustの標準ライブラリではそのunsafeを内部に閉じ込めて安全なインターフェイスとして提供している
このようにメモリアクセスもOS呼び出しもそれ自体は当然unsafeだがそれはモジュールの内部に閉じ込められている
そしてそれらを利用する側のプログラマーは安全なインターフェースのみを用いてsafeにプログラミングすることができる
そしてsafeな部分なコンパイラにより様々な安全性が自動的に保証されるという至上の恩恵をもたらすのがRust
それはunsafeとは何かを理解できていなくて初心者なのかも知れないけどかなりヤバイよ
ffiなんて例を出す必要はなくメモリ空間へのアクセスは最終的に生ポインタとなって当然unsafeになる
例えばslice[index]やslice.iter()の内部は当然unsafeな生ポインタを使って実装されている
ではunsafeで実装されているslice[index]やslice.iter()は危険か?となるがもちろん完全に安全だ
なぜならunsafeを内部に閉じ込めて安全なインタフェースを提供しているからである
これがRustの基本原理
ffiについても同様で例えばファイルのオープンや読み書きは通常OSへのシステムコールとなり通常ffiとなるため当然unsafe
しかしRustの標準ライブラリではそのunsafeを内部に閉じ込めて安全なインターフェイスとして提供している
このようにメモリアクセスもOS呼び出しもそれ自体は当然unsafeだがそれはモジュールの内部に閉じ込められている
そしてそれらを利用する側のプログラマーは安全なインターフェースのみを用いてsafeにプログラミングすることができる
そしてsafeな部分なコンパイラにより様々な安全性が自動的に保証されるという至上の恩恵をもたらすのがRust
724デフォルトの名無しさん
2023/06/20(火) 20:48:07.86ID:FDgZeyem 話の流れとは直接関係無いが、豆知識:
バグと言うものは、64BIT 整数を 32BIT 整数で受けたり、符号付きを符合なし
で受けたり(その逆でも)するだけでも起きるし、メモリ関連バグだけでは無い。
バグと言うものは、64BIT 整数を 32BIT 整数で受けたり、符号付きを符合なし
で受けたり(その逆でも)するだけでも起きるし、メモリ関連バグだけでは無い。
725デフォルトの名無しさん
2023/06/20(火) 20:50:12.42ID:FDgZeyem 例えば、OSの一度に行なえるファイル読み書きが10MBに制限
されている場合に、それを知らずにバイト数に20MBを指定して
しまったら、バグとなる。
テストでは10MBを超えるファイルを扱っていなかったら気付かない。
されている場合に、それを知らずにバイト数に20MBを指定して
しまったら、バグとなる。
テストでは10MBを超えるファイルを扱っていなかったら気付かない。
726デフォルトの名無しさん
2023/06/20(火) 21:06:06.55ID:wgbzrV/N727デフォルトの名無しさん
2023/06/20(火) 21:17:59.27ID:7CvaHT3W728デフォルトの名無しさん
2023/06/21(水) 20:47:56.17ID:DnSmyfOL Rustで最初に出したバグはデッドロックだったな
コンパイルエラーにしてくれるもんだと油断していた
コンパイルエラーにしてくれるもんだと油断していた
729デフォルトの名無しさん
2023/06/21(水) 21:05:00.78ID:W7d/0xn7 静的解析でデッドロックを検出するのは不可能
もちろんRustでも無理
もちろんRustでも無理
730デフォルトの名無しさん
2023/06/26(月) 18:26:13.57ID:H3+gGIMJ すいません、くだらない質問かもしれませんけど割り込ませて下さい
Haskellとかだと二項演算子(+)はNum classに属する型なら適用できます
自分が作った型でもその型において(+)をどう実装するか定義すれば(+)が利用できるようになります
例えば5元体の計算を行うF5 型を定義してそこで足し算とかをするには
data F5 = F5 Int deriving (Eq,Show) -- 型F5を作成
instance Num F5 where -- F5がNum classに属する宣言
(F5 x ) + ( F5 y) = F5 $ mod (x+y) 5
...略...
のようなものを作れば例えば
print $ ( F5 3 )^4
でF5 1を得る事ができます
同じような事はRustでできますか?
自分でこのような5元体の計算を行うための型を自作しそれの計算を二項演算子(+),(*)を用いた表記を可能にする方法とかありますか?
Haskellとかだと二項演算子(+)はNum classに属する型なら適用できます
自分が作った型でもその型において(+)をどう実装するか定義すれば(+)が利用できるようになります
例えば5元体の計算を行うF5 型を定義してそこで足し算とかをするには
data F5 = F5 Int deriving (Eq,Show) -- 型F5を作成
instance Num F5 where -- F5がNum classに属する宣言
(F5 x ) + ( F5 y) = F5 $ mod (x+y) 5
...略...
のようなものを作れば例えば
print $ ( F5 3 )^4
でF5 1を得る事ができます
同じような事はRustでできますか?
自分でこのような5元体の計算を行うための型を自作しそれの計算を二項演算子(+),(*)を用いた表記を可能にする方法とかありますか?
731デフォルトの名無しさん
2023/06/26(月) 18:32:46.35ID:DZPgqn/v >>730
std::ops::Add を実装すれば + が使えるし
std::ops::Mul を実装すれば * が使えるよ。
https://doc.rust-lang.org/std/ops/trait.Add.html
https://doc.rust-lang.org/std/ops/trait.Mul.html
std::ops::Add を実装すれば + が使えるし
std::ops::Mul を実装すれば * が使えるよ。
https://doc.rust-lang.org/std/ops/trait.Add.html
https://doc.rust-lang.org/std/ops/trait.Mul.html
732デフォルトの名無しさん
2023/06/26(月) 19:00:39.37ID:PhkZx7XR733デフォルトの名無しさん
2023/07/04(火) 01:09:18.95ID:2CEMaM2m 神クラス的なArcMutexのstructをごっそり差し替えし始めたらrust analyzerが糞遅くなって書くのが辛い
コード戻したくなる
助けて
コード戻したくなる
助けて
734デフォルトの名無しさん
2023/07/08(土) 03:39:28.67ID:kPVzZee0 キーボードの何かのキーが入力されてるか調べるけど
何もない場合は止まらずにそのまま次の処理を続けるはどうすればいいの?
何もない場合は止まらずにそのまま次の処理を続けるはどうすればいいの?
735デフォルトの名無しさん
2023/07/08(土) 04:25:29.10ID:hz58RfSC >>734
C言語の時と同じ
ノンブロッキング指定するだけでなく
cooked modeではなくraw modeをICANONに指定
これでバッファリングされることなくブロックされることなく読み出せる
libc叩かなくてもtermioなど好みのクレートを使う
C言語の時と同じ
ノンブロッキング指定するだけでなく
cooked modeではなくraw modeをICANONに指定
これでバッファリングされることなくブロックされることなく読み出せる
libc叩かなくてもtermioなど好みのクレートを使う
736デフォルトの名無しさん
2023/07/08(土) 07:46:14.85ID:kPVzZee0 なるほど
737デフォルトの名無しさん
2023/07/08(土) 08:39:38.42ID:kPVzZee0 窓だからGetAsyncKeyState呼び出すのが楽っぽい
738デフォルトの名無しさん
2023/07/13(木) 13:31:51.91ID:B+tQlcfl Rust言語で開発したWindowsカーネル、Canaryチャネルで展開開始
https://news.yahoo.co.jp/articles/de16ce55a291d59f7364096690fd601c5ee2ece2
https://news.yahoo.co.jp/articles/de16ce55a291d59f7364096690fd601c5ee2ece2
739デフォルトの名無しさん
2023/07/14(金) 11:16:58.08ID:tzjfWmow 値をコピーせずに参照を切り替えてFibonacci数列を計算したい
https://ideone.com/lnMyvH
はいけるんだけど
https://ideone.com/VerTGV
は
error[E0658]: destructuring assignments are unstable
と怒られます
どなたか対処法わかりますか?
https://ideone.com/lnMyvH
はいけるんだけど
https://ideone.com/VerTGV
は
error[E0658]: destructuring assignments are unstable
と怒られます
どなたか対処法わかりますか?
740デフォルトの名無しさん
2023/07/14(金) 11:27:16.72ID:Jafjy1es741デフォルトの名無しさん
2023/07/14(金) 12:09:03.76ID:8J2hXx2d742デフォルトの名無しさん
2023/07/14(金) 12:17:12.18ID:8J2hXx2d ちなみにコレxとyの参照してる値を保持してる内容を入れ替えてませんよね?
xとyの参照してるアドレスの入れ替えをしたいんですけど
それどうやって確かめたらいいんでしょう?
xとyの参照してるアドレスの入れ替えをしたいんですけど
それどうやって確かめたらいいんでしょう?
743デフォルトの名無しさん
2023/07/14(金) 12:25:35.09ID:8J2hXx2d そもそもうまく行ってると思ってたほうもうまくいってなかったorz
https://ideone.com/rny4y8
xとyの参照が切り替わってるんではなくて値そのものこくかんしてやがる
xとyの値に触らずxとyの参照先アドレスだけ切り替えるのってできないんでしょうか?
https://ideone.com/rny4y8
xとyの参照が切り替わってるんではなくて値そのものこくかんしてやがる
xとyの値に触らずxとyの参照先アドレスだけ切り替えるのってできないんでしょうか?
744デフォルトの名無しさん
2023/07/14(金) 12:36:55.78ID:8J2hXx2d ちょっと長くなるけどやりたい事書きます
例えばFという処理があってそれを初期値a0に何度も適用したいとします
Fの値を計算する関数を入力バッファと出力バッファのアドレスをとって入力バッファ側のデータを読んで出力バッファに書き出す関数を作ったとします
それを何度も繰り返す場合、出てきた出力バッファの内容をもう一度入力バッファにコピーする作業はあまりにも無駄なので出てきた出力バッファを今度はそのまま出力バッファとして使用したいんです
でもx,yは参照型でy=xとしたら何故かxの内容をyの内容に置き換えてしまってるみたいですけどコレ何故なんでしょう?
なんとかならないんですか?
例えばFという処理があってそれを初期値a0に何度も適用したいとします
Fの値を計算する関数を入力バッファと出力バッファのアドレスをとって入力バッファ側のデータを読んで出力バッファに書き出す関数を作ったとします
それを何度も繰り返す場合、出てきた出力バッファの内容をもう一度入力バッファにコピーする作業はあまりにも無駄なので出てきた出力バッファを今度はそのまま出力バッファとして使用したいんです
でもx,yは参照型でy=xとしたら何故かxの内容をyの内容に置き換えてしまってるみたいですけどコレ何故なんでしょう?
なんとかならないんですか?
745デフォルトの名無しさん
2023/07/14(金) 12:57:26.91ID:KGL+WmuV746デフォルトの名無しさん
2023/07/14(金) 13:20:43.04ID:bUq24laG747デフォルトの名無しさん
2023/07/14(金) 13:21:19.50ID:i4/iEcAZ そもそもE0658がideoneのrustcのバージョンが古すぎるせいだから>>1のPlayground使ってろ
748デフォルトの名無しさん
2023/07/14(金) 19:05:41.95ID:qocfo89A 亀だが
>>694
>基礎から学ぶ組み込みRust
見てきた。あの内容じゃWebの記事読んでおけば十分な感じだった
肝心の低レイヤー(CPUやペリフェラルとのインターフェイス)の解説がペラい
特に現状ではメーカーのサポートが得られない以上HALやBSPに相当する部分を
自前で用意せざるを得ないケースは少なくないと思うけど
その辺が十分に解説されているようには見えなかった
>>694
>基礎から学ぶ組み込みRust
見てきた。あの内容じゃWebの記事読んでおけば十分な感じだった
肝心の低レイヤー(CPUやペリフェラルとのインターフェイス)の解説がペラい
特に現状ではメーカーのサポートが得られない以上HALやBSPに相当する部分を
自前で用意せざるを得ないケースは少なくないと思うけど
その辺が十分に解説されているようには見えなかった
749デフォルトの名無しさん
2023/07/14(金) 21:27:06.52ID:+dZRH6iE そりゃマイナーなチップのHALを自分で作るなんて
マニアックすぎる内容で商業出版は無理だろ
そこまでやるならもう既存の実装見に行ったほうが早いよ
マニアックすぎる内容で商業出版は無理だろ
そこまでやるならもう既存の実装見に行ったほうが早いよ
750デフォルトの名無しさん
2023/07/17(月) 14:57:59.69ID:ckC6D+AP 期待してたけどめちゃくちゃ頼りないスタイルガイドが出てきたな
「こういう場合はこうフォーマットしましょう」だけじゃなくもう少し踏み込んで欲しかった
https://doc.rust-lang.org/nightly/style-guide/statements.html
「こういう場合はこうフォーマットしましょう」だけじゃなくもう少し踏み込んで欲しかった
https://doc.rust-lang.org/nightly/style-guide/statements.html
751デフォルトの名無しさん
2023/07/17(月) 15:40:03.84ID:qDsaxMYb スタイルガイドの目的はrustfmtの挙動を文書化して開発を進めやすくするってことだから
まさに「こういう場合はこうフォーマットしましょう」のための文書だよ
まさに「こういう場合はこうフォーマットしましょう」のための文書だよ
752デフォルトの名無しさん
2023/07/17(月) 17:17:17.76ID:WT/Een/k もう少し踏み込んで欲しかった、と言ってる人にそれを言ってもどうもならないわな
別にスタイルガイドの定義の話あなたが勝手に始めただけですよね
論破ですよね
別にスタイルガイドの定義の話あなたが勝手に始めただけですよね
論破ですよね
753デフォルトの名無しさん
2023/07/17(月) 17:39:41.44ID:Lx49eL3d なにいってだこいつ
754デフォルトの名無しさん
2023/07/18(火) 03:22:09.12ID:wb1VWGHJ755デフォルトの名無しさん
2023/07/18(火) 03:37:10.43ID:wb1VWGHJ756デフォルトの名無しさん
2023/07/18(火) 09:14:53.67ID:nuoH1aU3 一般的なスタイルガイドを知ってる人と知らない人の違いだね
常識だと思ってた
常識だと思ってた
757デフォルトの名無しさん
2023/07/18(火) 13:02:43.58ID:W9LkQalw 公式のスタイルガイドはrustfmtに実装するフォーマッティング以外はスコープ外
フォーマッティングガイドラインと改名したほうがいいわな
フォーマッティングガイドラインと改名したほうがいいわな
758デフォルトの名無しさん
2023/07/19(水) 11:14:31.27ID:HXkvqxP4 関数呼び出しの質問です
私の認識では
「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
であってますか?
それでお聞きしたいのはrust compilerって呼び出した関数側が実際引数を変更するかしないか判定して“immutatibleな変数を変更しようとした、なめとんかボケ”って怒ってくることがあります
コレ逆に言えば例えプログラマが変更しない変数をmutableで呼び出しを指定してもcompilerはどうせ変更されないんだからコピーもしないでいいよねと気を利かせてコピーしないとかしてくれると考えて大丈夫ですか?、
私の認識では
「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
であってますか?
それでお聞きしたいのはrust compilerって呼び出した関数側が実際引数を変更するかしないか判定して“immutatibleな変数を変更しようとした、なめとんかボケ”って怒ってくることがあります
コレ逆に言えば例えプログラマが変更しない変数をmutableで呼び出しを指定してもcompilerはどうせ変更されないんだからコピーもしないでいいよねと気を利かせてコピーしないとかしてくれると考えて大丈夫ですか?、
759デフォルトの名無しさん
2023/07/19(水) 11:21:25.92ID:yw4UHEnD760デフォルトの名無しさん
2023/07/19(水) 11:41:04.52ID:HXkvqxP4 すいません
具体的なコーどはちょっと用意します
別件なんですけど
let mut i : u64;
let p : u64 = 2u64.pow(32)-2u64.pow(10)+1;
for i in 2..100000 {
if i.pow(524288)%p != 1 && i.pow(1048576)%p == 1 {
println!("{}",i);
}
}
と書いたところ
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
--> compiler.rs:136:8
と怒られます
u64って指定するだけではダメなんでしょうか?
どう書いたら通してもらえますか?
よろしくお願いします
具体的なコーどはちょっと用意します
別件なんですけど
let mut i : u64;
let p : u64 = 2u64.pow(32)-2u64.pow(10)+1;
for i in 2..100000 {
if i.pow(524288)%p != 1 && i.pow(1048576)%p == 1 {
println!("{}",i);
}
}
と書いたところ
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
--> compiler.rs:136:8
と怒られます
u64って指定するだけではダメなんでしょうか?
どう書いたら通してもらえますか?
よろしくお願いします
761デフォルトの名無しさん
2023/07/19(水) 11:47:10.22ID:x9es5cRL unsafe { 引数のポインタ拾って描き替えたら }
呼び出し側も描き換わってたでござる
呼び出し側も描き換わってたでござる
762デフォルトの名無しさん
2023/07/19(水) 11:49:41.95ID:x9es5cRL >>760
for i in 2..100000u64 {
for i in 2..100000u64 {
763デフォルトの名無しさん
2023/07/19(水) 11:51:21.32ID:x9es5cRL >>762
あと mut i: u64 の i は for では使われてないし警告出てない?
あと mut i: u64 の i は for では使われてないし警告出てない?
764デフォルトの名無しさん
2023/07/19(水) 12:00:23.67ID:HXkvqxP4 ダメでした
error[E0308]: mismatched types
--> compiler.rs:136:12
|
136 | if i.pow(524288u64)%p != 1 && i.pow(1048576u64)%p == 1 {
| --- ^^^^^^^^^ expected `u32`, found `u64`
| |
| arguments to this function are incorrect
|
note: associated function defined here
= note: this error originates in the macro `uint_impl` (in Nightly builds, run with -Z macro-backtrace for more info)
help: change the type of the numeric literal from `u64` to `u32`
|
136 | if i.pow(524288u32)%p != 1 && i.pow(1048576u64)%p == 1 {
| ~~~
となります
powってu64はダメなんでしょうか?
error[E0308]: mismatched types
--> compiler.rs:136:12
|
136 | if i.pow(524288u64)%p != 1 && i.pow(1048576u64)%p == 1 {
| --- ^^^^^^^^^ expected `u32`, found `u64`
| |
| arguments to this function are incorrect
|
note: associated function defined here
= note: this error originates in the macro `uint_impl` (in Nightly builds, run with -Z macro-backtrace for more info)
help: change the type of the numeric literal from `u64` to `u32`
|
136 | if i.pow(524288u32)%p != 1 && i.pow(1048576u64)%p == 1 {
| ~~~
となります
powってu64はダメなんでしょうか?
765デフォルトの名無しさん
2023/07/19(水) 12:07:25.53ID:HXkvqxP4 ideoneでもダメです
https://ideone.com/FaBKXh
https://ideone.com/FaBKXh
766デフォルトの名無しさん
2023/07/19(水) 12:11:42.11ID:a/a2TjKK エラーメッセージから「ダメ」かどうかの1ビットしか読み取らない人にプログラミングは難しい。
767デフォルトの名無しさん
2023/07/19(水) 12:12:42.07ID:HXkvqxP4 あ、そもそもコレダメですね
仮にu64受け付けてくれてもダメやん
powは自作します
しかしu64版のpowってないんでしょうか?
仮にu64受け付けてくれてもダメやん
powは自作します
しかしu64版のpowってないんでしょうか?
768デフォルトの名無しさん
2023/07/19(水) 12:14:10.94ID:x9es5cRL overflowは知らん自己責任でやれ
https://ideone.com/JR2FhX
https://ideone.com/JR2FhX
769デフォルトの名無しさん
2023/07/19(水) 12:17:18.80ID:x9es5cRL770デフォルトの名無しさん
2023/07/19(水) 12:25:20.07ID:YST94QZy いろいろキッツいなぁー
loop-variableはfor-loopのブロックスコープ
u64::powはfn pow(self, exp: u32) -> u64
(u32以上の値をとってもオーバーフローするから)
>「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
>であってますか?
もちろん間違ってます
loop-variableはfor-loopのブロックスコープ
u64::powはfn pow(self, exp: u32) -> u64
(u32以上の値をとってもオーバーフローするから)
>「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
>であってますか?
もちろん間違ってます
771デフォルトの名無しさん
2023/07/19(水) 12:29:53.08ID:hsqLjzEB 余りをとっているから繰り返し自乗法を適当に実装すればオーバーフローは回避できる
772デフォルトの名無しさん
2023/07/19(水) 12:30:35.45ID:HXkvqxP4773デフォルトの名無しさん
2023/07/19(水) 12:41:14.04ID:HXkvqxP4 >>771
そうなんですよ
毎回あまり取らないとダメですよね
pの値も間違ってたし
やりたかったのはバッファサイズが1048576の有限体のフーリエ変換のための素数と位数1048576の元zetaを見つける作業でpはすぐ見つけてたんですけどzetaで手こずりました
まだrust慣れてないもので
これで行けました
https://ideone.com/haw9t8
見つけたzetaの候補3つ
4293918721
1557
7183
8874
そうなんですよ
毎回あまり取らないとダメですよね
pの値も間違ってたし
やりたかったのはバッファサイズが1048576の有限体のフーリエ変換のための素数と位数1048576の元zetaを見つける作業でpはすぐ見つけてたんですけどzetaで手こずりました
まだrust慣れてないもので
これで行けました
https://ideone.com/haw9t8
見つけたzetaの候補3つ
4293918721
1557
7183
8874
774デフォルトの名無しさん
2023/07/19(水) 15:49:39.29ID:HXkvqxP4 やはりダメです
型の指定の書き方がわかりません
次のコードです
https://ideone.com/QLw12c
有限体上のFourier変換を書きたいんですけどmutの書き方がらみで怒られます
どうすれば通せますか?
型の指定の書き方がわかりません
次のコードです
https://ideone.com/QLw12c
有限体上のFourier変換を書きたいんですけどmutの書き方がらみで怒られます
どうすれば通せますか?
775デフォルトの名無しさん
2023/07/19(水) 16:22:53.10ID:HXkvqxP4 とりあえずmutを全部につけまくったら通りました
https://ideone.com/EF9EEJ
https://ideone.com/EF9EEJ
776デフォルトの名無しさん
2023/07/19(水) 17:34:17.58ID:g8hXxOtp >>774
>どうすれば通せますか?
The Bookを読んで基本を身につければ通せます。
https://doc.rust-lang.org/book/
まずはplygroundとエラーメッセージの読み方から学ぶことをお勧めいたします。
>どうすれば通せますか?
The Bookを読んで基本を身につければ通せます。
https://doc.rust-lang.org/book/
まずはplygroundとエラーメッセージの読み方から学ぶことをお勧めいたします。
777デフォルトの名無しさん
2023/07/19(水) 17:52:11.79ID:HXkvqxP4 ありがとうございます
コンパイルは無事通ったんですけどstack overflowで実行できませんでしたw
どうせならどでかいのでやってみようと欲張ったらダメでしたw
まぁ縮める分には見つけたpやzetaはそのまま使えるのでまた時間ある日に続きやります
やっぱり新しい言語挑戦するのは時間かかりますね
ついでにひとつお聞きしたいんですけど、今回は「Rustの売りのなるべくstuckでやる」でやってみたんですけど流石にこのサイズはstackにとれないようです
コレ同じ事ヒープでやってもRustコンパイラはフラグメンテーションが怒らないように良きにはからってくれますよね?
コードは>>775です、まだ作りかけですけど
Fourier変換でO(n log n)で掛け算するプログラムの実装の演習の自習中です
コンパイルは無事通ったんですけどstack overflowで実行できませんでしたw
どうせならどでかいのでやってみようと欲張ったらダメでしたw
まぁ縮める分には見つけたpやzetaはそのまま使えるのでまた時間ある日に続きやります
やっぱり新しい言語挑戦するのは時間かかりますね
ついでにひとつお聞きしたいんですけど、今回は「Rustの売りのなるべくstuckでやる」でやってみたんですけど流石にこのサイズはstackにとれないようです
コレ同じ事ヒープでやってもRustコンパイラはフラグメンテーションが怒らないように良きにはからってくれますよね?
コードは>>775です、まだ作りかけですけど
Fourier変換でO(n log n)で掛け算するプログラムの実装の演習の自習中です
778デフォルトの名無しさん
2023/07/19(水) 23:54:55.34ID:6nPpRSza >>758
>> rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される
Rustは常にcall by valueでvalueをコピーする
大きなものをコピーされたくないならば
渡すvalueとしてその参照を指定する
すると参照すなわちポインタ値のみがコピーされて渡される
>> ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない
immutatibleな呼び出しなんて概念はない
immutableな参照を渡すかmutableな参照を渡すかの選択肢はある
そのポインタ値は常にコピーされる
ポインタ値のコピーはどんな速い言語を作っても避けられずそれが最速
ただし例えば数値単体を渡すなら参照(ポインタ値)を渡すよりも速い
>>777
数MBのデータはスタック領域に入らないのでヒープ領域に開始時に確保すればよい
>> rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される
Rustは常にcall by valueでvalueをコピーする
大きなものをコピーされたくないならば
渡すvalueとしてその参照を指定する
すると参照すなわちポインタ値のみがコピーされて渡される
>> ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない
immutatibleな呼び出しなんて概念はない
immutableな参照を渡すかmutableな参照を渡すかの選択肢はある
そのポインタ値は常にコピーされる
ポインタ値のコピーはどんな速い言語を作っても避けられずそれが最速
ただし例えば数値単体を渡すなら参照(ポインタ値)を渡すよりも速い
>>777
数MBのデータはスタック領域に入らないのでヒープ領域に開始時に確保すればよい
779デフォルトの名無しさん
2023/07/20(木) 15:25:39.14ID:6BSTmMYa780デフォルトの名無しさん
2023/07/20(木) 16:14:28.16ID:zz9s86Uo 古典的なcall by valueの定義におけるコピーと
そのCopyとはまた違う話
ついでに言うとRustにおけるcall by valueの定義と
古典的call by valueの定義は違うので要注意
現代では古典的定義でcall by valueかどうかを考えるのはあまり意味がない
そのCopyとはまた違う話
ついでに言うとRustにおけるcall by valueの定義と
古典的call by valueの定義は違うので要注意
現代では古典的定義でcall by valueかどうかを考えるのはあまり意味がない
781デフォルトの名無しさん
2023/07/20(木) 19:56:50.64ID:neDY19sM >>779
そのコピーはビットコピーの話でCopy実装型の話とは別
Copy非実装型でもムーブするとビットコピーされる
そもそもCPUやメモリにムーブなんてものは存在しなくてMOV (MOVE)命令ですらビットコピーが行われる
ただしビットコピーは最適化で消えうる
例えば別の変数にムーブしても最適化でビットコピーは消えうる
サイズの大きな値を関数でムーブ返ししてもRTO (Return Value Optimization)により呼び出し元スタックフレームに直接生成できるならビットコピーは消えうる
サイズの小さい値を関数でムーブ返しするとレジスタ返しとなる等
そのコピーはビットコピーの話でCopy実装型の話とは別
Copy非実装型でもムーブするとビットコピーされる
そもそもCPUやメモリにムーブなんてものは存在しなくてMOV (MOVE)命令ですらビットコピーが行われる
ただしビットコピーは最適化で消えうる
例えば別の変数にムーブしても最適化でビットコピーは消えうる
サイズの大きな値を関数でムーブ返ししてもRTO (Return Value Optimization)により呼び出し元スタックフレームに直接生成できるならビットコピーは消えうる
サイズの小さい値を関数でムーブ返しするとレジスタ返しとなる等
782デフォルトの名無しさん
2023/07/20(木) 22:07:49.98ID:YJW86g9/ call by valueのコピーはビットコピーなんて定義はない
ビットコピーかどうかはimplementation detail
ビットコピーかどうかはimplementation detail
783デフォルトの名無しさん
2023/07/20(木) 22:17:52.36ID:mzA35L2k レジスタかメモリへのビットコピー以外に渡す手段はない
現行のコンピューターでは
現行のコンピューターでは
784デフォルトの名無しさん
2023/07/22(土) 01:08:25.26ID:9fslOp72 メモリ管理について質問です
Rustは「GCをしない言語」を謳っています
一応「GCを心配する必要はない、フラグメンテーションなも起きない、メモリ不足になったらそれはフラグメンテーションではなくて元々のメモリ不足」と言い切れればいいんですけど、実際にはそうではなく、下手なデータ管理をすればフラメンテーションは発生するようです
まぁそりゃそうなんですけど
https://hackernoon.com/ja/Rust%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%83%92%E3%83%BC%E3%83%97%E3%81%AE%E6%96%AD%E7%89%87%E5%8C%96%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%81%A6%E5%9B%9E%E9%81%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
ということはプログラマ極力フラグメンテーションが発生しないように注意したいところですが、しかしRustのアロケータはどういう状況でフラグメンテーションを発生させるか、どうやれば防げるかの資料が見つかりません、なので先のリンクの人は自分で調べてたみたいです
これ誰かご存知の方いますか?
具体的には同じ型のSizedのデータA,を作成して先にAを消し、その後同じ型のCを作った場合、Rustシステムはその時点で開いてる穴のAの抜け穴を利用してそこにCを割り当ててくれるんでしょうか、
それともBが消えるまではAのあった場所も“欠番扱い”になるんでしょうか?
Rustは「GCをしない言語」を謳っています
一応「GCを心配する必要はない、フラグメンテーションなも起きない、メモリ不足になったらそれはフラグメンテーションではなくて元々のメモリ不足」と言い切れればいいんですけど、実際にはそうではなく、下手なデータ管理をすればフラメンテーションは発生するようです
まぁそりゃそうなんですけど
https://hackernoon.com/ja/Rust%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%83%92%E3%83%BC%E3%83%97%E3%81%AE%E6%96%AD%E7%89%87%E5%8C%96%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%81%A6%E5%9B%9E%E9%81%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
ということはプログラマ極力フラグメンテーションが発生しないように注意したいところですが、しかしRustのアロケータはどういう状況でフラグメンテーションを発生させるか、どうやれば防げるかの資料が見つかりません、なので先のリンクの人は自分で調べてたみたいです
これ誰かご存知の方いますか?
具体的には同じ型のSizedのデータA,を作成して先にAを消し、その後同じ型のCを作った場合、Rustシステムはその時点で開いてる穴のAの抜け穴を利用してそこにCを割り当ててくれるんでしょうか、
それともBが消えるまではAのあった場所も“欠番扱い”になるんでしょうか?
785デフォルトの名無しさん
2023/07/22(土) 02:40:42.91ID:htX2UcZa >>784
アロケーションやフラグメンテーションはRustの言語システムの範囲外
例えばOSがない環境も含めてアロケータを自作もできるようになっている
普通にOSなどある環境を使うとRustはそこでの標準のアロケータをそのままグローバルアロケータとして用いる
つまり環境毎に異なるものが使われていてRustとは全く関係がない問題であることがわかる
もちろんRustでは自分でアロケータを変えることもできる
グローバルアロケータを丸ごと変える方法とBoxやVecなどで個別にアロケータを指定する方法がある
使用環境の標準のアロケータで何か問題が起きていると感じたらその例のように別のものと交換して比較してベストなアロケータを選べばよい
もう一つ全く別のアプローチとしてそれらアロケータに頼るのではなくプログラムのレベルでまとまったメモリの割り当て管理する方法もある
この方法は全て自分の制御下におけるため様々な特性のあるクレートがありもちろん自作もできる
アロケーションやフラグメンテーションはRustの言語システムの範囲外
例えばOSがない環境も含めてアロケータを自作もできるようになっている
普通にOSなどある環境を使うとRustはそこでの標準のアロケータをそのままグローバルアロケータとして用いる
つまり環境毎に異なるものが使われていてRustとは全く関係がない問題であることがわかる
もちろんRustでは自分でアロケータを変えることもできる
グローバルアロケータを丸ごと変える方法とBoxやVecなどで個別にアロケータを指定する方法がある
使用環境の標準のアロケータで何か問題が起きていると感じたらその例のように別のものと交換して比較してベストなアロケータを選べばよい
もう一つ全く別のアプローチとしてそれらアロケータに頼るのではなくプログラムのレベルでまとまったメモリの割り当て管理する方法もある
この方法は全て自分の制御下におけるため様々な特性のあるクレートがありもちろん自作もできる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 立憲・野田代表が主張 台湾有事答弁で「質問者批判は筋違い」「答弁がおかしい」「高市総理迎合のネット世論は危険」 [♪♪♪★]
- 【速報】 植田日銀総裁 「円安進行が物価高を起こしている」 ★2 [お断り★]
- 【存立危機】高市総理 南アフリカに出発 G20サミット出席へ 日中の接触があるかが焦点… [BFU★]
- 【🍝】「偽カルボナーラ」にイタリア激怒、パンチェッタの使用は「犯罪」と非難 ★2 [Ailuropoda melanoleuca★]
- 【貿易】北海道ホタテ業界、中国の輸入停止に「動揺なし」 脱中国進み、輸出可能な加工施設は道内でわずか1社 [1ゲットロボ★]
- 「ふざけんな!」 国会議員給与、『月5万円増』報道にネット騒然 「国民が物価高で困っているのに」「定数削減とか言いながら…」 [♪♪♪★]
- 日本円と日本国債終わる。勝った!!ネトウヨ国家日本を倒し終わった!! [805596214]
- ジャップランドにネトウヨがこんなに多いとは想わなかったよな🥺 [929293504]
- 【鈴木早苗】お米券おひとり様3000円に閣議決定 [993451824]
- 【高市悲報】日銀植田ようやく気付く「円安進行は、消費者物価の押し上げ要因になる」 [115996789]
- 国民・榛葉「中国が焦ってるw 効いてる効いてるwwwm9(^Д^)プギャー」 [592058334]
- 🏡なにゃこのスリャ!🐧⚡🏡
