[過去ログ] Rust part24 (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
174(2): デフォルトの名無しさん [sage] 2024/06/16(日) 01:15:13.88 ID:dwkxcYMW(1/22) AAS
>>172172(1): デフォルトの名無しさん [sage] 2024/06/16(日) 00:50:00.04 ID:+a7ueRP7(1) AAS
>>169
スタック上への参照とヒープ上への参照をRustでは区別しない
ライフタイムさえ満たしていればどこを指していても区別なく参照を扱う
そのため、従来行われてきた「安全にヒープ上でに領域を確保してヒープ上への参照を返す」をしなくても
ライフタイムさえ満たしていればスタック上への参照を安全に渡したり返したり自由にできるようになった
そのため、従来はヒープ上に確保していていたケースがRustではスタック上に置くことができるようになり、その点でも高速化に寄与している
別にC言語だってallocaの返したポインタとmallocの返したポインタを区別しないけど
176: デフォルトの名無しさん [sage] 2024/06/16(日) 01:32:46.10 ID:dwkxcYMW(2/22) AAS
C言語と違って区別しないわけじゃないし、C言語と違って高速ってわけでもない
177: デフォルトの名無しさん [sage] 2024/06/16(日) 01:39:48.74 ID:dwkxcYMW(3/22) AAS
C言語同様に区別しないし、C言語同様に高速なんでしょう
179: デフォルトの名無しさん [sage] 2024/06/16(日) 03:32:45.56 ID:dwkxcYMW(4/22) AAS
へえ、コピーじゃなくて移動をデフォにしちゃうのか
181: デフォルトの名無しさん [sage] 2024/06/16(日) 04:10:20.19 ID:dwkxcYMW(5/22) AAS
>>180180(1): デフォルトの名無しさん [sage] 2024/06/16(日) 04:03:11.69 ID:WxpyLfm8(1) AAS
>>174
mallocで得たポインタとallocaで得たポインタは明確に区別しなければならない
mallocで得たポインタのみfreeの対象としなければならない
この区別はCプログラマーの責務でありミスると破綻する
コンパイラが区別してくれるわけじゃないからそう書いた
今はRustコンパイラの秘密を探ってるんだし
184: デフォルトの名無しさん [sage] 2024/06/16(日) 04:43:29.58 ID:dwkxcYMW(6/22) AAS
メモリはコピーじゃなくて(所有権の)移動がデフォ
所有者がスコープを抜けるとメモリは解放
所有者に別の値が代入された際もメモリは解放
代入元は所有権が移ると未初期化の扱いになる
これだけでもかなり面白いね
187: デフォルトの名無しさん [sage] 2024/06/16(日) 06:03:13.93 ID:dwkxcYMW(7/22) AAS
メモリはそれ自体は無論のこと、それを指すポインタもひとつしかないわけだ
188: デフォルトの名無しさん [sage] 2024/06/16(日) 07:56:02.10 ID:dwkxcYMW(8/22) AAS
この発想は正直なかったわ
ひとつのメモリをあちこちから参照すればするほど高効率みたいな思い込みがあるからね
192: デフォルトの名無しさん [sage] 2024/06/16(日) 10:32:48.33 ID:dwkxcYMW(9/22) AAS
で、配列の要素だったり構造体のメンバだったりは「移動済み」にできない?
193: デフォルトの名無しさん [sage] 2024/06/16(日) 10:36:59.18 ID:dwkxcYMW(10/22) AAS
とにかく&をつければアドレスを借用できて、その生存規則違反はコンパイラがはじく、と
196(1): デフォルトの名無しさん [sage] 2024/06/16(日) 11:21:38.24 ID:dwkxcYMW(11/22) AAS
ボローチェッカーは作るのも使うのも難しそう
よくこんなこと可能だと思ったもんだ
197: デフォルトの名無しさん [sage] 2024/06/16(日) 11:48:19.48 ID:dwkxcYMW(12/22) AAS
Rustの中ではつまらないというか泥臭い部分だね
199(1): デフォルトの名無しさん [sage] 2024/06/16(日) 12:23:11.10 ID:dwkxcYMW(13/22) AAS
ええっと、メモリの所有者が
・スコープを抜けること
・別の値が代入されること
・別の変数に所有権を移動させること
はもともと検出できる前提なのだよね
ボローチェッカーと言ってもその3つの組み合わせに毛が生えた程度なのかどうか
203: デフォルトの名無しさん [sage] 2024/06/16(日) 12:33:46.16 ID:dwkxcYMW(14/22) AAS
>>201機械語知ってるからそんな心配はない
204: デフォルトの名無しさん [sage] 2024/06/16(日) 12:36:26.13 ID:dwkxcYMW(15/22) AAS
>>202202(1): デフォルトの名無しさん [sage] 2024/06/16(日) 12:32:49.98 ID:EH7/X6SF(2/2) AAS
>>199
メモリとかアドレスとか言ってる時点で正確な理解から遠いと思う。
変数はメモリではないし、参照はアドレスではない。
処理系の実装としてはそのように対応するという想定はあるだろうけど機械語レベルの事情と言語のルールはレイヤが違う。
そうだね。Rustは高級アセンブラってわけではまったくないね。勘違いしてた
205(1): デフォルトの名無しさん [sage] 2024/06/16(日) 12:42:20.38 ID:dwkxcYMW(16/22) AAS
代入だったり関数呼び出しの引数だったりはコピーじゃなくて移動がキホンって時点で機械語ともC言語とも違う
213: デフォルトの名無しさん [sage] 2024/06/16(日) 16:23:56.88 ID:dwkxcYMW(17/22) AAS
NLLというくらいだからもともとLL
214: デフォルトの名無しさん [sage] 2024/06/16(日) 16:49:41.43 ID:dwkxcYMW(18/22) AAS
まあ一応(ボローチェッカーというものが)可能そう
215(1): デフォルトの名無しさん [sage] 2024/06/16(日) 17:20:46.77 ID:dwkxcYMW(19/22) AAS
コンパイラはプログラム中の全ての参照型に対してライフタイムを割り当てる、と
221(1): デフォルトの名無しさん [sage] 2024/06/16(日) 18:44:48.95 ID:dwkxcYMW(20/22) AAS
ひとつしかない所有者がスコープを抜ける、もしくは所有者に別の値が代入されると、そこから先にはメモリはもうない
222: デフォルトの名無しさん [sage] 2024/06/16(日) 18:57:47.09 ID:dwkxcYMW(21/22) AAS
なんとなく、所有者はスタックの根元の方に、参照はスタックの枝葉の方にいそうなイメージ
224(1): デフォルトの名無しさん [sage] 2024/06/16(日) 19:08:46.55 ID:dwkxcYMW(22/22) AAS
>>223つまり所有権も静的に解析できる?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.044s