[過去ログ] Rust part19 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
841: 2023/02/24(金)16:52 ID:nsUeAOhk(1) AAS
動かして学ぶ!Rust入門
発売日:2023年04月24日
定価:3,960円

【本書の概要】
Rustのプログラミング手法について、サンプルを元に手を動かしながら学ぶ書籍です。主に以下の3つについて丁寧に解説します。

●Rustの概要と開発環境
●Rustの基本的な文法と機能
省13
842: 2023/02/24(金)16:55 ID:7VL6jHM8(1) AAS
>なお本書はエンジニアのための情報共有コミュニティ「Zenn」で公開されている大人気の「Rust 入門」を元にした書籍です。

あーはいはい
結構です
843
(3): 2023/02/24(金)17:23 ID:C63NsF8r(1/5) AAS
外部リンク:zenn.dev
束縛
> let 文を使うことでオブジェクトと変数を 束縛 します.変数はそのスコープから外れたときに束縛していた所有権を放棄します.
> また,最初に束縛したオブジェクトの所有権は基本的に原本となり,原本および仮の所有権がすべて放棄された時にオブジェクトは破棄されます.

原本?
仮の所有権?

( ^ω^)…
844: 2023/02/24(金)17:52 ID:gyp0jO6s(1) AAS
これはまた凄いな
複製おじさん顔負けだわ
845: 2023/02/24(金)18:03 ID:m9pgynCe(1) AAS
少し読んでみたけど笑いを通り越して背筋が凍るんだが

ほんとにこれの書籍化?
URL間違ってない?
846: 2023/02/24(金)18:06 ID:/RJs/kHR(1/5) AAS
借用のことを仮の所有権と呼んでるのか
ひでーな
847: 2023/02/24(金)18:18 ID:C63NsF8r(2/5) AAS
オレオレ用語満載の書籍が
初心者界隈に何をもたらしてしまうか…
発売前にぜひご一考願いたい( ^ω^)
848
(1): はちみつ餃子 ◆8X2XSCHEME 2023/02/24(金)19:58 ID:4A+eO5tS(1) AAS
仮に (あくまでも仮に!) 完全に挙動を説明できているのだとしても
他の人が書いた説明と合わせて読もうとしたら食い違うわけだろ。
書いている人はわかりやすく言い換えてるつもりなんだろうとは思うけど
学習過程全体を考えたらあんまりわかりやすくなってない。

Rust の全てをカバーしてて他の資料を読む必要がないくらいに充実してるなら
独特の定義で押し通すのもありかもしれんが、現実にはそんなことありえないしな……。
849: 2023/02/24(金)19:59 ID:e5dQOFE4(1/9) AAS
>>843
オブジェクトという単語は各プログラミング言語で様々な意味で用いられているが
Rustでその文脈で用いられることは少なく
その説明ではオブジェクトではなく値(value)とした方がよい

Rustで用いられるオブジェクトの用法の多くはtrait objectであり
Rustで重要なオブジェクト安全もtrait objectの話
850: 2023/02/24(金)20:03 ID:C63NsF8r(3/5) AAS
>>848
> 他の人が書いた説明と合わせて読もうとしたら食い違うわけだろ。
> 書いている人はわかりやすく言い換えてるつもりなんだろうとは思うけど
> 学習過程全体を考えたらあんまりわかりやすくなってない。

そうそれ
無駄で邪魔でしかない
独自用語を野放図に用いる傲慢さ
省1
851: 2023/02/24(金)20:09 ID:hzPT7xYj(1) AAS
パーフェクトRust買った
これまで日本人の書いたRust本の中で1番良い出来だな
変なところに偏ってないし
852
(2): 2023/02/24(金)20:18 ID:kQOezMEX(1/12) AAS
参照が入ってる変数は仮でもなんでもなく参照の所有権を持ってるのに仮の所有権とか言われても困る
853
(1): 2023/02/24(金)21:02 ID:a3OsZb0h(1) AAS
オブジェクトと所有権を切り離せないものと考えてる辺り>>800と全く同じ見解じゃん
ご本人様ではないですよね?
854
(1): 2023/02/24(金)21:17 ID:X6Gu9Bob(1/2) AAS
たぶん参照自体じゃなく参照されてる値に対する「借用」のことを「仮の所有権」と表現してる

当然のように「オブジェクト」って言葉を使ってるけどもう少しvalueに寄せてほしいな

>> オブジェクト
>> 数値や関数や参照など,型の実体はすべて**オブジェクト**です.
>> つまり,式が返す値もまたオブジェクトになります.
>> 例えば, 1 という値も数値オブジェクトであり,1 == {1} という関係にあります.

ここの進次郎構文は何を表現してるの?
省1
855
(1): 2023/02/24(金)21:17 ID:/RJs/kHR(2/5) AAS
>>800だけどちがうよ
所有権なんて存在しない見解だよ
856: 2023/02/24(金)21:23 ID:e5dQOFE4(2/9) AAS
>>852
参照の所有権とは言わない
値に対する所有の唯一性が所有権で
値に対する参照が借用
そして所有>借用の生存期間ルールを満たした上で所有のスコープルールとなるため、

>>843
>> 原本および仮の所有権がすべて放棄された時にオブジェクトは破棄されます.
省2
857
(1): 2023/02/24(金)21:34 ID:KXIZdqg5(1) AAS
>>855
>所有権なんて存在しない見解だよ
所有権なんて存在しないてどういうこと?
858: 2023/02/24(金)21:39 ID:C63NsF8r(4/5) AAS
一個一個挙げてってもキリがないけど

> 所有権
> オブジェクトには 所有権 (Ownership) が付いています.この所有権には2つの属性があります.

付いています?
二つの属性がある?

( ^ω^)…
859
(1): 2023/02/24(金)21:40 ID:kQOezMEX(2/12) AAS
「参照」なんて呼んだって中身はただのポインタだから
アドレス値という値を持ってるし、当然その値の所有権もあるし、
&TはCopyで複製される値だし、&mut Tは非Copyでmoveされる値だぞ
860: 2023/02/24(金)21:41 ID:e5dQOFE4(3/9) AAS
>>853
値と所有者/所有権を切り離して考えるのが無意味なのは正しい
Rustでは値には必ず所有者が存在し、所有者は必ず値を持ち、これが所有権
それぞれ単独では存在できないため、切り離して考えることは無駄で意味がない
861: 2023/02/24(金)21:46 ID:AI6ToQ7h(1) AAS
>>854
何かしらの型の実体という意味で
オブジェクトという言葉を使ってるみたいだよ
値をオブジェクトと言い換えるくらいは可愛いもの
862: 2023/02/24(金)21:50 ID:yxaYrfxm(1) AAS
複オジの系譜ここに極まれり
863: 2023/02/24(金)21:50 ID:lvFucdpn(1/2) AAS
これ推理するの楽しいな

型の反対はオブジェクト
式の反対は値
そうしないと値の反対が二通り存在することになりかねない
864
(1): 2023/02/24(金)21:52 ID:e5dQOFE4(4/9) AAS
>>859
もちろん参照は実際にはポインタとして登場することが多いけど、必ずしもポインタが登場するわけではなくその保証はない
参照という概念レベルでのみ保証されており、最適化でポインタなんて消えることも多いため、ポインタの存在を仮定してはいけない
もちろん値としての参照がCopy実装型で、可変参照が!Copyなのはその通り
865
(2): 2023/02/24(金)21:54 ID:/RJs/kHR(3/5) AAS
>>857
自分が見つけられてないだけなら先に謝っておくけど
Rust公式ドキュメントも含めて誰も(値の)所有権という言葉を定義していないように見えるんだ
つまりそんなものは無いんだと今は自分の中で結論している

とか書くと狂人判定されるんだろなあ、もういいけど
866
(1): 2023/02/24(金)21:57 ID:kQOezMEX(3/12) AAS
>>864

&T と&mut Tはポインタだよ

外部リンク[html]:doc.rust-lang.org

Pointer types
References (& and &mut)
867
(2): 2023/02/24(金)22:03 ID:kQOezMEX(4/12) AAS
>>865
外部リンク[html]:doc.rust-lang.org

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 an owner.
・There can only be one owner at a time.
・When the owner goes out of scope, the value will be dropped.
省1
868
(1): 2023/02/24(金)22:04 ID:e5dQOFE4(5/9) AAS
>>866
すまんね
そこでポインタをアドレス値と言ってるから、そういう具体的なアドレス値に必ずしも対応するわけではないという説明
もちろん型の分類としてはpointer型でその通り
869: 2023/02/24(金)22:06 ID:e5dQOFE4(6/9) AAS
>>865
Rust公式本のここが分かりやすい
Ownership Rules
・Each value in Rust has an owner.
・There can only be one owner at a time.
・When the owner goes out of scope, the value will be dropped.
870: 2023/02/24(金)22:07 ID:e5dQOFE4(7/9) AAS
すまん、>>867と被ってしまった
871
(1): 2023/02/24(金)22:12 ID:kQOezMEX(5/12) AAS
>>868
具体的なアドレス値を利用していない場合に限っては最適化で消えることはあるけど
&Tも&mut Tも取り出したいときには中身のRaw Pointerの具体的なアドレス値を取り出すことはできるんだから
参照にポインタの存在を仮定してもなんの問題もなくない?
872: 2023/02/24(金)22:26 ID:e5dQOFE4(8/9) AAS
>>871
アドレス値として取り出すこともできるのはもちろんその通り
しかしRustの参照の概念を初心者に教える入門でアドレス値を仮定した教え方は完全に間違いです
873: 2023/02/24(金)22:36 ID:kQOezMEX(6/12) AAS
Safe Rustの範囲内で raw pointer として中身のアドレス値を取り出すこともできるものを
アドレス値を仮定してはいけないと言われてもお前の個人的思想なんかシラネー
874: 2023/02/24(金)22:42 ID:ifsiIFbz(1/2) AAS
俺も最初の頃は参照をアドレス値ポインタだと誤解してた
そしてRustではちょっとしたことまでわざわざポインタ経由でアクセスするのかよ無駄だなあと思ってたら
プログラムの生成コードを見るとアドレス値ポインタを使わずにちゃんと処理してた
参照はアドレス値ポインタを仮定しないもっと概念的なものであると今はわかるのうになった
875: 2023/02/24(金)22:43 ID:X6Gu9Bob(2/2) AAS
むしろC言語の知識があるRust初心者には
「参照はコンパイラが有効性をチェックする安全なポインタ」くらいの方が伝わりやすいと思う
メモリ上に値が保持されるならアドレスは存在するわけだし最適化でメモリにすら乗らないケースの方が特殊でしょ
876: 2023/02/24(金)22:57 ID:ifsiIFbz(2/2) AAS
参照経由でアクセスしてもポインタ使わずに済むときはポインタ出て来ないから
参照はポインタではなくアドレス値が必要になった時だけポインタになるものじゃないかな
ポインタになる場合も含むもっと上位な概念かな参照は
877
(1): 2023/02/24(金)23:00 ID:kQOezMEX(7/12) AAS
普通に公式がポインタだっつってんだからポインタなんだよ
お前の脳内ポインタ定義はどうでもええよ
878: 2023/02/24(金)23:03 ID:C63NsF8r(5/5) AAS
>>877
正しい
そしておまいはこのスレにしては珍しく聡明でレスも簡潔
879: 2023/02/24(金)23:03 ID:E8WzyA/e(1/2) AAS
このスレ、マイルールを他人に押し付ける奴が多いな
880: 2023/02/24(金)23:12 ID:zZXMvOGK(1) AAS
もうこの言語だいしゅき、ソートアルゴリズムの美しい実装でこだわり過ぎて目の下に幕ができそう♡
881
(1): 2023/02/24(金)23:14 ID:igKefKVx(1/4) AAS
ポインタ云々より「参照にも所有権がある」と言われたら初心者にとってはわかりにくいでしょ
所有権やそれに関連するルールを概念レベルで説明する際に
不必要に実装の詳細に依存すべきじゃないと思うよ
882: 2023/02/24(金)23:17 ID:E8WzyA/e(2/2) AAS
このスレだったっけ?
以前クイックソートの実装でHaskellが最も美しいかどうかでレスバしてたのは?
883
(2): 2023/02/24(金)23:19 ID:kQOezMEX(8/12) AAS
>>881
公式ドキュメントに
・Each value in Rust has an owner.
・All pointers are explicit first-class values.
とあって、 Pointer types のひとつとして References (& and &mut) が紹介されてんだから
参照にも所有権があるのは実装の詳細じゃなくて定義の問題だよ

参照はポインタの一種であり、ポインタは値の一種であり、すべての値にはownerがいるんだよ
省2
884
(1): 2023/02/24(金)23:21 ID:3W5ZdpBM(1) AAS
The bookだと参照はポインタに似てるけどポインタとは違うと書いてあるね

外部リンク[html]:doc.rust-lang.org
A reference is like a pointer in that it’s an address we can follow to access the data stored at that address; that data is owned by some other variable.
Unlike a pointer, a reference is guaranteed to point to a valid value of a particular type for the life of that reference.
885
(1): 2023/02/24(金)23:27 ID:kQOezMEX(9/12) AAS
>>884
もっかい貼るけど公式リファレンスね
外部リンク[html]:doc.rust-lang.org

Pointer types
All pointers are explicit first-class values. They can be moved or copied, stored into data structs, and returned from functions.

References (& and &mut)
(中略)
省4
886: 2023/02/24(金)23:30 ID:kQOezMEX(10/12) AAS
A reference is like a pointer in that it’s an address we can follow to access the data stored at that address;

The Book でも参照はアドレスだって言ってんじゃねーか!
887
(1): 2023/02/24(金)23:35 ID:/RJs/kHR(4/5) AAS
>>867
ではownerの定義はどこに?
何がownerになり得る?
ぱっと見ownerは変数だよと言えそうな気がするけど、temporary valueは束縛されないのでルールの例外になってしまう
MIRレベルだとtemporary valueも変数に束縛される(あってる?詳しくない)ならMIRレベルの変数がownerと言えるかもしれないけど、the Bookごときがそこまで考えて書いてると思う?

さらにRc<T>/Arc<T>はstd docやらnomiconやらで"shared ownership"なる表現を平気で使っていて、
そのOwnership Rulesを絶対視するなら2番目のルールに全力で中指突き立ててることになっちゃう、よね?
省2
888: 2023/02/24(金)23:36 ID:kMIGeBWL(1) AAS
>>885
それはポインタ型だな
参照が実際に受け渡される時は参照値となってポインタ型になるのは当たり前
889
(1): 2023/02/24(金)23:40 ID:igKefKVx(2/4) AAS
>>883
>・Each value in Rust has an owner.
↑これはThe Bookという初心者向けチュートリアルに書いてある概念レベルの話

>・All pointers are explicit first-class values.
> Pointer types のひとつとして References (& and &mut) が紹介されて
↑これらはリファレンスに書いてある実装レベルの話
後者は言語使用者に現在の実装を正確に伝えるためのもの
省4
890: 2023/02/24(金)23:44 ID:lvFucdpn(2/2) AAS
実装依存の悪口を言うだけの方がじつはわかりやすいんだよね
建設的な造語や新ルールを提案したりしないから
891
(1): 2023/02/24(金)23:45 ID:igKefKVx(3/4) AAS
>>887
これも同じで初心者にとってのわかりやすさと説明の正確さが両立しないのでお茶を濁してる点
ownerを変数だけに限定してしまうといろいろ困る
‘static &strのownerとか

変数には限られない何かownerという概念的存在がいるんだ!!!ということで理解しといて
892: 2023/02/24(金)23:45 ID:L3ynq/JH(1) AAS
>>883
それは値に所有権があるだけだぜ
そしてそれが参照の時はその本体より長生き出来ないんだから
「参照の所有権」なんて分かりにくい言葉は出す必要がない
それだと>>843
>原本および仮の所有権がすべて放棄された時にオブジェクトは破棄されます.
と発想が同じ
893
(1): 2023/02/24(金)23:46 ID:kQOezMEX(11/12) AAS
>>889
>↑これらはリファレンスに書いてある実装レベルの話
>後者は言語使用者に現在の実装を正確に伝えるためのもの

お前の妄想は知らねえよ
外部リンク[html]:doc.rust-lang.org
This book is the primary reference for the Rust programming language.

現在の実装じゃなくて言語としてのRustについてのリファレンスだよ
894: 2023/02/24(金)23:51 ID:jmHr5CjO(1) AAS
参照はそれが具体的な値としてやりとりされるときはアドレスになるのはわかるけどさ
参照とアドレスを同一視する教え方はよくないね
あまりにも実装寄りの考え方
895: 2023/02/24(金)23:52 ID:igKefKVx(4/4) AAS
>>893
で、そのprimary referenceには所有権の定義はないんですよね?
なぜなのかな?
896: 2023/02/24(金)23:56 ID:/RJs/kHR(5/5) AAS
>>891
> 変数には限られない何か
そんな定義があってたまるか
897: 2023/02/24(金)23:59 ID:kQOezMEX(12/12) AAS
最適化をかけると生成コード上では実体としてのポインタが消えたり消えなかったりするとか言ってる奴が
リファレンスの定義の話をしてる奴を「あまりにも実装寄り」とか言い出すのギャグだろ
898: 2023/02/24(金)23:59 ID:e5dQOFE4(9/9) AAS
値の所有権は所有する変数のスコープで尽きるけど、
参照値の所有権は参照先の値より長く生存できない点でちがっていて特殊
だから入門書のそこで参照の所有権という言葉を持ち出すのは混乱の元かな
899
(2): 2023/02/25(土)00:18 ID:KJsK2uHY(1/2) AAS
>>852
それは突っ込みどころを間違えてる
仮の所有権を参照の所有権と言い換えても
「原本および参照の所有権がすべて放棄された時にオブジェクトは破棄されます.」
となって間違いが悪化してしまう
900
(1): 2023/02/25(土)00:25 ID:ArOrHDqj(1/13) AAS
>>899
それはそうだね
俺は「仮の所有権」を「参照の所有権」に言い換えろなんて言ってないけどね
901
(1): 2023/02/25(土)00:28 ID:km4YkFaP(1) AAS
>>899
キミは頭悪いんやから黙っとき
これはイヤミじゃなくて助言な
902
(1): 2023/02/25(土)00:36 ID:KJsK2uHY(2/2) AAS
>>900
では言い換えるでもなく訂正するでもなく改善案となっているわけでもなく何をしたかったんだ?
唐突に頭悪いとか言い出すのは異常者か
903: 2023/02/25(土)00:45 ID:ArOrHDqj(2/13) AAS
>>902
「仮の所有権とか言われても困る」という感想を書きたかったんだよ
訂正や改善案を出したいなら5chじゃなくて著者の問い合わせ先とか出版社の編集部とかでやった方がいいんじゃない?

あと >>901 は別人ね、お前が信じるか信じないかは知らんけど
904: 2023/02/25(土)06:13 ID:nntoePxq(1) AAS
仮の所有権と書かれているのは借用のことを言いたいんだなーってわかる気がする
でもそこで参照の所有権はちょっと違うような違和感
905
(1): 2023/02/25(土)08:48 ID:NS6XQxEK(1) AAS
参照に所有権? それはそれで当然あるやろ
ってとこまで到達してる人と、できていない人
906: 2023/02/25(土)10:57 ID:alhcSVqs(1/2) AAS
参照することと所有することを区別するのをやめやがったのがJava
これを思い出せる人と記憶がない人の認識がずれてるんじゃないの
907: 2023/02/25(土)11:14 ID:wWCIK7/X(1) AAS
>>905
それ以前にオブジェクト(値)が破棄される話で参照の所有権は一切無関係やん
908: 2023/02/25(土)11:35 ID:ArOrHDqj(3/13) AAS
参照型の変数がスコープから外れたらただ単に「参照の値」がドロップされて参照先の値には影響を与えない
という話と
>原本および仮の所有権がすべて放棄された時にオブジェクトは破棄されます.
の記述は普通に関係ある話だけどね
909: 2023/02/25(土)11:42 ID:SzGKc5ny(1/4) AAS
所有権の複製オジに加えて
仮の所有権オジが出てきて
ある可能性が出てきたな

人類にはRustはまだ早かった説
Rustを正確に使うどころか正確に理解することすら困難だった説
910
(1): 2023/02/25(土)11:48 ID:iCEruD3M(1) AAS
GC言語では参照が生きてる限り参照先が消えないので意味があるけど
Rustで参照の所有権は意味がないよ
911: 2023/02/25(土)11:50 ID:ArOrHDqj(4/13) AAS
参照型の変数がスコープを外れたら何が起こるかって話だからRustでも意味あるよ
912: 2023/02/25(土)11:51 ID:KWSFcpUq(1) AAS
なんで明らかに理解できてないのにこんな自信満々なんだろうな
正直そのメンタルはほんの少しだけ羨ましいわ
913: 2023/02/25(土)11:59 ID:SzGKc5ny(2/4) AAS
>>910
意味のあるなしとかいう話かこれ?
参照にも所有権があるっていうだけの単なる事実でしょ
こだわるポイントが頭悪すぎない?
914
(1): 2023/02/25(土)12:28 ID:sdtPy+yt(1/8) AAS
Rust初心者が参照にも所有権があるんだ!普通の値と同じようにスコープを外れるまで所有権があるんだ!と騒いじゃう気持ちは分かるがもちろん無意味
普通の値ならばブロックスコープを外れるまで移動しない限り所有権があるのはもちろんだが
参照の場合は全く違っていてNLL (Non-Lexical Lifetime)により参照が入っている変数が普通の値なら所有権を持ちつづけている状況でも参照の場合はは無効に成り得る
つまり参照の所有権というものを考えたとしてもその格納されている変数のブロックスコープの間に所有権が保たれる保証はなく参照の所有権を考える意味がないのだ
これが普通の値の所有権との決定的な大きな違い
さらに加えて参照は参照先の生存期間を超えられないルールもあるためこの観点からも参照の所有権を考えても単独存在は出来ず意味がない
したがって参照の所有権なんてことを自慢気に言い出す人はまだRustの基本を理解できていない
915: 2023/02/25(土)12:36 ID:ArOrHDqj(5/13) AAS
参照についてだけわざわざ所有権に意味があるとかないとか考える意味がない

参照の値は参照先の値よりも先に破棄されなければならない
という追加のルールはあっても、所有権や値にまつわるルールの例外であるわけではない
参照は値のサブセット

すべてのvalueにはownerがいて、ownerがスコープを外れたらdropされる
referenceも例外ではない
916
(1): 2023/02/25(土)12:45 ID:xzT8w7BX(1) AAS
>>914
お前が所有権とライフタイムの区別がついてない初心者なだけやん……
917: 2023/02/25(土)13:06 ID:sdtPy+yt(2/8) AAS
>>916
ライフタイムが終わった時点で所有権も失う
所有権だけ単独で存在し続けられない
918
(1): 2023/02/25(土)13:07 ID:ArOrHDqj(6/13) AAS
>その格納されている変数のブロックスコープの間に所有権が保たれる保証はなく
コイツ所有権を「アクセスする権利」とかそういう感じで捉えてるのか
仮の所有権おじさんと同類じゃん

ownership って
値に対して ownership を負ってる奴はスコープから外れるときに値をdropしなきゃいけない
って責務の話であってアクセスする権利とかじゃないから保たれる保証がどうとか的外れだよ
919: 2023/02/25(土)13:08 ID:a4UZTu4a(1/4) AAS
PhantomData<&'a T>は参照を所有しているに含まれますか?
920: 2023/02/25(土)13:15 ID:SzGKc5ny(3/4) AAS
あと二ヶ月くらいであの本が世に出るのか
胸が熱くなるな(野次馬根性)
921
(1): 2023/02/25(土)13:24 ID:sdtPy+yt(3/8) AAS
>>918
アクセスする権利なんてひとこも言っていない
妄想で叩き出すのは人として外れている

あと参照&T &mut Tに特別なdrop処理はない
だから参照のdropを考える必要はない
1-
あと 81 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.024s