X



Rust part13
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2021/11/07(日) 10:04:59.35ID:pJhT3MIE
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

Web上の実行環境
https://play.rust-lang.org

日本語の情報
https://rust-jp.rs/

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/

※次スレは原則>>980が立てること

前スレ
Rust part12
https://mevius.5ch.net/test/read.cgi/tech/1629813327/
0953デフォルトの名無しさん
垢版 |
2022/02/11(金) 18:39:18.92ID:6AYXkq/G
>>949
closeシステムコールはfile descriptorをcloseする
file descriptorでcloseするとは誰も言わない
file descriptorはファイルを参照する値であるがファイル自体ではない
それと同様freeはアドレスという値を解放しているのであってアドレスという値で解放してるとは誰も言わない
「値で解放するの表現が正しい」(笑)って言う意見に耳を傾けるのはまだあなたが初心者を脱することができていない証拠

https://linuxjm.osdn.jp/html/LDP_man-pages/man2/close.2.html
こういうサイトにも「close() は、ファイルディスクリプターをクローズする。」 とある
0954デフォルトの名無しさん
垢版 |
2022/02/11(金) 18:51:10.18ID:XGwZjA15
>>951
真面目すぎてひねくれたパターンだろうな
出世もしないで片隅でコード書いてる人よくいるし
0955デフォルトの名無しさん
垢版 |
2022/02/11(金) 18:51:59.28ID:6Qn4bKwU
>>952
その最適化で消えるようなもんが言語仕様
例えばRustでは言語仕様で通常の参照ポインタはnullにならない
nullを言語仕様として扱わずNone値を持つOptionを導入にしている
そしてヌルポの先へアクセスすることを完全に封じている、というのが言語仕様

ところがその抽象レベルを離れて実装レベルになると話が違う
愚直にOptionを実装すると参照ポインタ以外にメモリを余分に使う
そこで最適化によってNone時は参照ポインタの実体アドレスを0すなわちnullポインタとしている
これでOption分の余分なメモリを使わずに済ませている

つまり言語仕様としての抽象化されたレベルと
実際にアドレスがどうなるかという具体化されたレベルは常に区別しないといけない
Rustプログラマーとしては実装でどうなるかは知らなくてもプログラミングできる
そしてまずはその抽象的なレベルのみ意識して学習すべき
0957デフォルトの名無しさん
垢版 |
2022/02/11(金) 21:48:20.48ID:Q/4j6JIT
>>925
まーたオジさんいい加減なこと書いてるねw
操作的意味論ではvariableとlocationとvalueを明確に区別するのが一般的
メモリ領域のことを値だと表現するのはRust的にも操作意味論的にも間違い
0958デフォルトの名無しさん
垢版 |
2022/02/11(金) 21:52:44.45ID:38j0NNSx
>>941
>Rustを含めアドレスという言語機能を持っている手続き型言語で変数と呼ばれているものはただのアドレスです

全く違うんですけどwww
都合悪くなってスレ流したいのかもしれないが
とりあえず嘘八百でスレ埋め立てるの辞めてくれ
0959デフォルトの名無しさん
垢版 |
2022/02/11(金) 22:35:25.65ID:6AYXkq/G
>>957
操作的意味論ではそれ以上簡約できない項を値と呼びます
varもlocもどちらもそれ以上簡約できないので値です
試しにTaPLで値ががどのようにBNFで帰納的定義されている集合なのか確認してみたら?
あなたが理解していないだけでは?
0960デフォルトの名無しさん
垢版 |
2022/02/11(金) 22:39:32.55ID:6AYXkq/G
>>958
スレ埋めてるのはどちらかというとこのような無意味なレスをするあなたでは?
私は自分のレスが正しいと知っておりますのでどうぞ余計なレスを書き込まないでこのスレを延命してくださいませ
0961デフォルトの名無しさん
垢版 |
2022/02/11(金) 22:48:24.70ID:6Qn4bKwU
6AYXkq/Gを相手にしても無駄だから元の話に戻りましょう
>>808について自分の意見は
○「型のインスタンスに所有権がある」
×「値に所有権がある」 ←値は途中で完全に置き変わっても構わないため×
×「変数に所有権がある」 ←変数はどんどん移動できて一時的な束縛にすぎないため×
×「アドレスに所有権がある」 ←アドレスは関数へ渡したり返したり途中で変わるため×
0962デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:10:21.43ID:g7TOVgtJ
>>961
「所有権がある」という意味が「所有権を持つ」という意味であれば
「値の所有者は変数」だから「所有権を持つのは変数」だよ
スコープを抜ける時に所有リソースを解放する責任というのかownershipを持つということ

型のインスタンス?
説明してもらわないと意味分からないな
0963デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:19:43.49ID:rRV0mw3H
>>961
> 値は途中で完全に置き変わっても構わないため

所有権というのは「後始末する責任」のこと。
内容が書き換えられることを許すのは所有権を手放しているわけではない。
0964デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:22:41.86ID:jgApYu5Z
>>961
> 「変数に所有権がある」 ←変数はどんどん移動できて一時的な束縛にすぎないため×
変数は移動できなくない? 何か別のことを言いたかったんかな?

変数が所有権を持つ、で良いんじゃないかな
値を変数に束縛するときに、変数が値を所有することになる
そして変数が値を所有したままスコープアウトすると、値をdrop(解放)する
0966デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:27:09.03ID:6Qn4bKwU
主語と目的語を逆に違う意味に誤解されるとわかったので補足します
○「型のインスタンスに対して所有権があるor生じる」
×「値に対して所有権があるor生じる」 ←値は途中で完全に置き変わっても構わないため×
×「変数に対して所有権があるor生じる」 ←変数はどんどん移動できて一時的な束縛にすぎないため×
×「アドレスに対して所有権があるor生じる」 ←アドレスは関数へ渡したり返したり途中で変わるため×

>>962
プログラミング言語の分野で一般的に用いられるインスタンスです
型とインスタンスは一般的に1対多の関係になります (シングルトンでは1対1ですが)
言語によっては型をクラスと表現する場合もあるようですがRustではそんな狭い範囲ではなく全ての型が対象です

>>963
そのように値は変わっていくものだから
値に対して所有権といっても曖昧さが残るでしょう
だから不変でない値に対して所有権があるとの考えはよろしくない
まだ>>964の言う変数を持ち出したほうがマシ

しかし変数との関係は一時的にすぎず所有権は別の変数へ移動していきます
所有権と常に1対1の関係にあるのは(型の)インスタンスです
0967デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:32:51.77ID:rRV0mw3H
>>964
変数が所有権を持つというのは変な解釈。
結果的にはそういう挙動ではあるんだが
値が変数に捉えられている間は寿命が継続されるというルールによって
変数のスコープと連動してるだけ。
所有権を持っているのはあくまで値。
0968デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:37:03.65ID:6Qn4bKwU
>>967
所有権を持っているのはインスタンスであって
値はそのときどきで変化するだけにすぎない存在だと思います
0970デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:45:01.94ID:MSfgatap
俺が入れ物に対して所有権があると>>900で書いたのも実質その型のインスタンスだ
インスタンスという言葉を使うと面倒になりそうなので抽象的に型の入れ物とした
いずれにせよ所有権の対象は値ではなく値が収容される入れ物orインスタンスだ
0971デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:45:21.67ID:rRV0mw3H
実際のところ「値」と「インスタンス」の間にそんなに意味の差はないです。
特的の型を元に作られたということを強調するときにインスタンスと言うことはありますが、
どの値も型を持つのでインスタンスではない値などありはしません。
0972デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:47:31.44ID:6Qn4bKwU
>>971
インスタンスはその型の形をした器(うつわ)であり解放されるまで不変
値はその器(うつわ)に入った内容にすぎず可変
0974デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:49:47.15ID:3qua/k5E
>>967
>所有権を持っているのはあくまで値。

で、その値は何の所有権を持ってるのさ?
0975964
垢版 |
2022/02/11(金) 23:51:18.52ID:jgApYu5Z
そもそも「所有権を持つ」ってのが苦しい
英訳すると "own the ownership" になってしまうが、そんな表現は公式ドキュメントでも避けられてるように思う

値が変数に束縛されるとき、その値を変数が所有することになる
変数をreturnしたり、変数を他の変数に代入するときには、所有権がtransferされることになる

ここまでは良いでしょ
例えば、公式ドキュメントにもこう書かれてる
https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html
> Returning values can also transfer ownership.

なので、強いて >>961 の中から選ぶなら変数が所有権を持つだけど、最初に書いたようにそもそも「所有権を持つ」が苦しいので、
「変数が値を所有する」とすれば良いと思う
0976デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:51:21.22ID:3qua/k5E
>>965
>「変数が値を所有する」

これが正解。
0977デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:51:57.38ID:MSfgatap
>>973
皆がその点については定義がはっきりしないからこれだけ揉めてるんだろ
「そんな定義はないです」は反論にすらなっていない
0978964
垢版 |
2022/02/11(金) 23:53:29.17ID:jgApYu5Z
ああ、別に「持つ」を必ずしも "own" で訳す必要もないね
さっきから変なことばかり書いててすまんね、今日は冷静になっていったんもう寝る
0979デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:54:02.65ID:rRV0mw3H
>>974
値自身を後始末する責任をもってる。
所有権という訳語がよくないというのはよく指摘されることだが、
何者かが値を所有しているという誤解のもとになるからだ。

変数が所有権を持っていることにしたら
一時オブジェクトの所有権はどうなってんだって話になるだろ。
0980デフォルトの名無しさん
垢版 |
2022/02/11(金) 23:57:48.33ID:6Qn4bKwU
>>975 >>976
そんな話は誰もしていないと思う
所有権は何に対して付随するのか生じているのかが論点
そして所有権が消滅するのは型のインスタンスが最後に解放される時
だから所有権と1対1の関係にあるのは(型の)インスタンスだと主張しています
0981デフォルトの名無しさん
垢版 |
2022/02/12(土) 00:03:26.33ID:mURtvSsP
>>972
> インスタンスはその型の形をした器(うつわ)であり解放されるまで不変

いいえ。
代入で内容が書き換えられる場合もあり、
そのときに drop が呼ばれます。
寿命の管理は値に付随します。
0982デフォルトの名無しさん
垢版 |
2022/02/12(土) 00:19:59.58ID:kNBFVDwU
とりあえずbookの
4.1. What is ownership?
(ttps://doc.rust-lang.org/book/ch04-01-what-is-ownership.html)
からOwnership Rulesの節を丸ごと抜いてきた(訳は適当)


Ownership Rules

First, let’s take a look at the ownership rules.
Keep these rules in mind as we work through the examples that illustrate them:

* Each value in Rust has a variable that’s called its owner.
* There can only be one owner at a time.
* When the owner goes out of scope, the value will be dropped.


まずは所有権(ownership)に関するルールを見てみよう
このルールを記憶に留めて以下の例示を読み進めてほしい

・Rustの各々の値(value)は所有者(owner)と呼ばれる1つの変数(variable)をもつ
・所有者は同時に1つしか存在しない
・その所有者がスコープからいなくなる時、その値は破棄される
0983デフォルトの名無しさん
垢版 |
2022/02/12(土) 00:26:03.97ID:lHDa3hl7
>>982
これが正解
0984デフォルトの名無しさん
垢版 |
2022/02/12(土) 00:26:42.42ID:/iL1/Dd6
>>981
内容が書き換えられてdropすることはない
所有権と値は関係ない
値に付随するものではない

>>982に明記されているように所有権を持つ所有者は変数
所有者である変数がスコープから外れるとdrop
0986デフォルトの名無しさん
垢版 |
2022/02/12(土) 00:37:10.88ID:/iL1/Dd6
インスタンスというのも一理ある
その型のインスタンスが作られてから解放されるまで一貫して一つの存在なのに対して
変数は次々と移り変わって行く乗り物と捉えることができる
そしてインスタンスがたまたま束縛されている変数がスコープから消えると乗っていたインスタンスも巻き添えで消えると考えられないこともない
0990デフォルトの名無しさん
垢版 |
2022/02/12(土) 01:58:18.50ID:eWE5dZha
横からすまんが、実際のメモリ上だと所有権ってどうなってるもんなの?
>>982にある仕組みからしたら・・・・メモリが確保されるのと同時に、併せて所有権情報(スタックへの参照か何か?)がメモリのどっか確保されるわけ?
俺、てっきりコンパイラへのただの指示だとばっか思ってたぜ
0991デフォルトの名無しさん
垢版 |
2022/02/12(土) 02:19:56.25ID:dWh4TlR2
横からキターーー

コンパイラの課すルールの話なので
所有権情報が実行時にメモリに確保されたりしないよ
0992デフォルトの名無しさん
垢版 |
2022/02/12(土) 04:01:34.21ID:tNCVqmWf
まじか、そうなんだ
0994デフォルトの名無しさん
垢版 |
2022/02/12(土) 07:47:32.16ID:XghCcbPA
struct S;
impl Drop for S {
fn drop(&mut self) {
println!("drop");
}
}
fn main() {
S;
}
↑じゃあこれは何が所有権をもってて何がdropさせてんの?
インスタンス説のほうがまだシックリくる?
変数も所有権を持てるしスコープ終了で手放せる?
0995デフォルトの名無しさん
垢版 |
2022/02/12(土) 08:42:47.12ID:4ZF6L5uh
>>961
お前が突っかかって来たんだろうが
ガイジwwww
0996デフォルトの名無しさん
垢版 |
2022/02/12(土) 08:42:55.77ID:4ZF6L5uh
うんこ
0997デフォルトの名無しさん
垢版 |
2022/02/12(土) 08:43:01.75ID:4ZF6L5uh
まんげ
0998デフォルトの名無しさん
垢版 |
2022/02/12(土) 08:43:06.69ID:4ZF6L5uh
ちんげ
0999デフォルトの名無しさん
垢版 |
2022/02/12(土) 08:43:39.79ID:4ZF6L5uh
>>957
お前の負けやでwwwwwwww
1000デフォルトの名無しさん
垢版 |
2022/02/12(土) 08:44:18.55ID:4ZF6L5uh
無教養のガイジども阿鼻叫喚していて草wっwr
ンゴwwwwwww
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 96日 22時間 39分 19秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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