X



Rust part16
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2022/06/27(月) 08:17:03.45ID:gDlfKP6u
公式
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を学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

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

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

前スレ
Rust part15
https://mevius.5ch.net/test/read.cgi/tech/1652347700/
0901デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:31:30.86ID:zVqHX6VA
何度も言ってるけどRustはコンパイルを通せば
意図してないエラーはまず起きないし
Nullで落ちるなんてこともない
0902デフォルトの名無しさん
垢版 |
2022/10/04(火) 16:35:17.34ID:vFqvnIUB
頭がいいと思い込んでる馬鹿がいきなり複雑な難しいことに挑戦して失敗して
難しい!とわめく馬鹿パターンはどんな分野でもある
その馬鹿が>>896
0903デフォルトの名無しさん
垢版 |
2022/10/04(火) 17:00:26.62ID:zVqHX6VA
「段階的学習」というのは数学や物理においては成立する言葉だがプログラミングにおいては成立しない
なぜなら「知識の差」が普遍的に影響を受けてしまうから
例えば数学では代数学の理論を知らなくても初等整数論は学べるがプログラミングではそのようなことはないとわかる
0905デフォルトの名無しさん
垢版 |
2022/10/04(火) 17:06:11.40ID:zVqHX6VA
collectを知らないものが自前でfor文で同じことを実装していたらどうなるだろうか?
レビューで指摘され赤っ恥を書かされてプライドはズタズタ
それが原因で鬱になるかもしれん
さらにパフォーマンス悪くなる
精神的にも肉体的にもダメージを負うことになる
0906デフォルトの名無しさん
垢版 |
2022/10/04(火) 17:18:30.46ID:vFqvnIUB
>>905
真逆だ
初心者の学習過程ならばcollectを使わずに実装することは適切な練習問題だ
その段階を経てからcollectを学習した者こそ身に付く
0911デフォルトの名無しさん
垢版 |
2022/10/04(火) 19:01:55.07ID:7zYgBA5I
>>907
初心者・初学者に「the bookを読め」はさすがにむちゃだろ。

やっぱり「初心者はRust使わず他の言語から勉強しろ」が正解なのかね。
0912デフォルトの名無しさん
垢版 |
2022/10/04(火) 19:07:38.54ID:gMN5eNCr
>>891
さすが餃子さん分かってらっしゃる
最初は大まかな理解→もう少し詳細な理解→最後に完璧な理解という解像度の段階的な学習を中心に
項目や範囲を広げていく網羅度の段階的な学習を組み合わせることでRustの学習を含めて一般的な事柄にも適用できる
0913はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/10/04(火) 20:17:29.13ID:P4nmisNi
>>911
そこで言ってる「初心者」は「Rust の初心者」ではなく「プログラミングの初心者」の意味?
そうだとすると the book はちょっとハードルが高いということはあるかもしれんな。

でも C++ と比較すると C++ のほうがもっとハードルが高いと思う。
コンパイラが検出しないところで未定義に入り込むことがあまりに多い。
初心者が間違うのは当然のことだが、正しいのか間違っているのかわからないというのは間違っていることが明白であるよりもしんどい。
そこで間違ったまま邁進できるようなメンタルの持ち主はそれはそれで遠からず行き詰るし。
0914デフォルトの名無しさん
垢版 |
2022/10/04(火) 20:27:55.40ID:9Mq2x6bG
>>867 ですが、
>>876 さんがおっしゃることが僕の意図を言い当てています
c++を使わなくなって 15年は経ちますが、その頃の c++にはテンプレートはありましたがスマートポインタやラムダ式、その他諸々のモダンな機能はまだありませんでした(と思います)
クラス付きのCの部分で仕事をしていました
モダンなc++へ再入門するか、rustを学ぶか迷って rustに触れて今に至りました
0916デフォルトの名無しさん
垢版 |
2022/10/04(火) 21:10:32.92ID:d7kGndGU
所有権も借用も生存期間も理解してなければ
メソッド呼び出し一つ満足にできないんだから
それら無しに動くものが作れるわけない

学習自体は言語に限らずどんな学習でも部分的段階的にやるもの
それ以外の方法なんてないんだから論点ずれてる
0917デフォルトの名無しさん
垢版 |
2022/10/04(火) 22:06:44.90ID:GBsxPWRL
>>916
それはさすがに無知すぎやろ
Rustは数値など所有権とは無縁な型で構成されているから
所有権なんて理解しなくてもプログラムを組める
段階的に後から所有権を学ぶことができる
0923デフォルトの名無しさん
垢版 |
2022/10/05(水) 03:09:52.75ID:Ybu4BU3z
どうも段階的にやれると思ってる人はデータタイプを数値に限定してる気がする
数値はコピー可能でありRustのサンプルとしてよく使われるが
コピー可能なオブジェクトというのは普通のアプリケーションでは効率が悪すぎて使わない
つまり所有権の理解は必須なのだよ
0924デフォルトの名無しさん
垢版 |
2022/10/05(水) 03:15:49.43ID:UScD8/dK
初学者にマウント取りするだけで、ステップアップの具体的なノウハウを示したり
理解しやすいドキュメントを整備提供したりできない積極的に導けない人間ばかりの
コミュニティが形成されてる言語は決して流行らない

行き着く先は*BSDのような”魔法使い以外は帰れ帰れ”した結果の荒涼とした世界
0925デフォルトの名無しさん
垢版 |
2022/10/05(水) 03:19:22.28ID:Ybu4BU3z
数値といっても機械学習などで使うバカでかいTensorオブジェクトをコピーしたい人はいないだろう
コピーして効率よく処理できる仕組みがないからmoveが生まれた
0928デフォルトの名無しさん
垢版 |
2022/10/05(水) 07:53:16.44ID:MzMPKgoE
初学者にマウント取りたいやつがイキってる
0929デフォルトの名無しさん
垢版 |
2022/10/05(水) 10:48:19.99ID:gF0QOXVU
初学者にしてもスタイルは人それぞれだろうし皆がどうやってrust習得したか語ってくれた方が参考になりそう

自分はlifetimeが導入される前からrust触ってたからコンパイラに追加される機能を適宜試してみながら体で覚えた
0930デフォルトの名無しさん
垢版 |
2022/10/05(水) 11:23:13.56ID:1F438Xk1
初級者はHello, world!からって、かつての初級者はBASICから並みに罠じゃね
ほとんどのHello, world!は現代のプログラミングで必須の要素が欠落しまくっているからな
0931デフォルトの名無しさん
垢版 |
2022/10/05(水) 11:28:02.85ID:BbaUEliB
複オジも100点オジも
もう少しRust勉強してからレスするか
大人しくしとくかどっちかにしてくれ
0934デフォルトの名無しさん
垢版 |
2022/10/05(水) 12:32:57.65ID:OxlYZjk9
今担当してる作業が、あるまとまった処理を上手く対応付けするとちょっと複雑な数値演算処理だけに置き換えられるので、
その数値演算ライブラリを作っているのだけど、確かに所有権は全く出て来ない。
入出力は配列(スライス)の参照渡しと可変参照渡しとなっていてライフタイム明記も無し。

所有権を学ぶ前に参照(借用)だけで十分に色んな実践ができると思う。
そして参照は他の言語でも配列などは参照渡しになるから、新たにスライスだけ覚えればRustを段階的に学ぶことができる。
0935デフォルトの名無しさん
垢版 |
2022/10/05(水) 12:36:28.49ID:+KHGV4+/
俺はずっとJavaメインで、遊びでlispとかHaskellとか触る程度で低レイヤは触ってなかったんだけど、Rustでここまで現代的に書けるならアリだなって触り始めたクチだな。
0936デフォルトの名無しさん
垢版 |
2022/10/05(水) 12:59:55.95ID:EKfM3pGK
>>930
まずハロワやれと言われるレベルの初級者ってプログラミング自体初めてやるようなレベルの人でしょ
それならあれこれ教えたところでどうせ理解不能になるだけなのでとりあえず動くものを作らせることには意味がある
0937デフォルトの名無しさん
垢版 |
2022/10/05(水) 13:37:41.28ID:Pj9P59N0
ただいまんこのあとは
シコシコちんちん シコシコ イソチンチン
0938デフォルトの名無しさん
垢版 |
2022/10/05(水) 13:47:37.30ID:X575+w0V
かい
0939デフォルトの名無しさん
垢版 |
2022/10/05(水) 15:06:32.60ID:wne70pEz
>>930
何を勘違いしてるんだよw
ハロワはプログラミングの勉強じゃなくて>>932も書いてる通り環境の勉強だぞ
お前の言う必須の要素が何を指してるのか知らんけど例えばif文の勉強したい時に動かせるかどうかは重要だろ
0941デフォルトの名無しさん
垢版 |
2022/10/05(水) 16:19:48.70ID:7FrBhgJk
>>940
それも真
しかし>>934のような使い方だと所有権を意識する必要すらないのも真
同様に>>934のような使い方だと参照のライフタイムを意識する必要がないのも真
これは類似なものとしてC言語を使っている時に常に所有権とライフタイムを意識する必要性があるわけではないことも同様に例示される
0942デフォルトの名無しさん
垢版 |
2022/10/05(水) 17:04:57.53ID:NuKocPG+
噛み合ってない理由がわかった
競プロ勢が多いんだな
数値しか扱わないなら
ベターCとして書くことは容易だからね
0943デフォルトの名無しさん
垢版 |
2022/10/05(水) 17:33:30.37ID:66O9N6nP
競プロじゃないけどトレイトとかよく判らないから安定しているCとしてしか使っていないわ
0946デフォルトの名無しさん
垢版 |
2022/10/05(水) 23:31:57.40ID:lcOrUuZN
色々書いたうちCLI程度の規模のプログラムだと大半は所有権の移動がなくて所有権の意識が薄いな
オブジェクトをnewするところは厳密には移動と言えるかも知れないが単なる値返しと捉えるだろう
あとはオブジェクトの参照を渡していくだけたから単なる参照渡し
0948デフォルトの名無しさん
垢版 |
2022/10/05(水) 23:56:41.83ID:nYqhDlIA
数値型だけでは動くものが作れないことに気がついたみたいだな
Rustで所有権を理解せずに動くものを作るなんて柱を使わずに家を建てるようなもの
0949デフォルトの名無しさん
垢版 |
2022/10/06(木) 00:08:02.42ID:aXzDwmUt
>>946
関数が値返しと引数可変参照渡しへの書き込みだけならプログラムの規模や種類に関係なくそんなもんだろ
所有権が出てくる幕はない
もちろんライフタイムも出てこない
0950デフォルトの名無しさん
垢版 |
2022/10/06(木) 00:34:26.13ID:XbdFr8Zd
そういう点では所有権が出てこなくてもかなりの範囲のプログラムを書けるよ
0951はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/10/06(木) 00:34:32.05ID:rLXZsLBm
>>949
いくつかの自明な場合にはライフタイムを省略しても暗黙のルールが適用されるから書かなくてもよいだけで、ライフタイムが存在しないわけではないよ。
その暗黙のルールが比較的自然に定義されてるってことなんだろうね。
0952デフォルトの名無しさん
垢版 |
2022/10/06(木) 00:37:42.29ID:4kCBwc0q
>>951
それは違うな
>>949のケースは参照返しをしていないのだからライフタイムは出て来ない
ライフタイムの存在を意識する必要もない
0954デフォルトの名無しさん
垢版 |
2022/10/06(木) 01:33:20.48ID:QZHh62Nh
Rustを使ってると、参照を返すようなコードはだんだん避けるようになるかもしれないな
0955デフォルトの名無しさん
垢版 |
2022/10/06(木) 01:59:47.45ID:iRnDWdOb
競プロみたいにmain関数のみ
データ型は数値のみ
データ構造は固定配列のみ
サイズも高々数百から数千程度なのでスタック確保でオッケー
配列への参照のみ必要
結果は固定配列を新しく作ってそこに詰めていく
これなら所有権など一切いらない
0956デフォルトの名無しさん
垢版 |
2022/10/06(木) 02:04:59.09ID:MtARpYSM
この件は数値型や競プロは一切関係ない

ヒープを使うVecやStringやそれらを含む構造体を返しても『値返し』となる点がポイント
『参照返し』とならないため『ライフタイム』は登場せず『所有権』を意識する必要もない
そして『値返し』だけでも様々な実用的なプログラムをRustで作ることができる
0958デフォルトの名無しさん
垢版 |
2022/10/06(木) 02:38:59.47ID:v2j3J5Hy
>>954
個人的にはdangling pointetとか内部オブジェクトを書き換えられる心配しなくて良くなるから
他の言語より積極的に参照返すようになってる気がする
0959デフォルトの名無しさん
垢版 |
2022/10/06(木) 06:12:47.90ID:QjC44cq3
参照返しの安全性を保証できるRustいいよな
参照返しを使わず値返しだけでもかなり広い範囲のことを処理できる点も同意
0961デフォルトの名無しさん
垢版 |
2022/10/06(木) 15:10:52.39ID:9m7OD5Nx
参照を返す時のみ
ライフタイムの概念が登場
だから参照返しと値返しの区別は実質的に重要

もちろんRustでは常に(広義の)値返しとなる
そして参照返しとは参照を(広義の)値返しすること
参照返しの対義語として(狭義の)値返しを使ってもよい
0964デフォルトの名無しさん
垢版 |
2022/10/06(木) 15:29:37.21ID:phH8VW1M
>>962
それはそのフィールドが参照を返しているね
構造体がライフタイムを持つのはそのような時
0970デフォルトの名無しさん
垢版 |
2022/10/06(木) 15:45:23.29ID:JBcgzpIo
Rustでは参照返しが有る時だけライフタイムパラメータが付くんよ
例えば3つの参照返しが有る時に3つのライフタイムが異なれば3つのライフタイムパラメータが付くんよ
だから参照返しが有るか無いか区別されてしまうんよ
0971デフォルトの名無しさん
垢版 |
2022/10/06(木) 16:06:44.80ID:sWKfpE/G
結局Rustにおける値と参照とは何かを知るためには所有権の理解が必須なワケよ
0973デフォルトの名無しさん
垢版 |
2022/10/06(木) 16:23:06.37ID:bcHprxpF
>>971
参照を返さない限り所有権の理解は不要
Rustでは配列も構造体も更にはヒープを用いるVecやString等も値として返される
つまり参照を返さなくてもある程度の広範囲のプログラムを書くことができる
0976デフォルトの名無しさん
垢版 |
2022/10/06(木) 16:42:22.59ID:bM/kk4ia
所有権要らないならRust要らないじゃんって思いながらずっと読んでる

どういう結論に持っていきたいの
0977デフォルトの名無しさん
垢版 |
2022/10/06(木) 16:44:20.49ID:QZHh62Nh
釣りが目的で書き込んでるひとと、それに付き合ってレスしてるひとがいるからわけわからん
0978デフォルトの名無しさん
垢版 |
2022/10/06(木) 16:49:39.04ID:+ZB5z2+t
参照渡しだけして参照返しをしなければ
所有権もライフタイムも出てこないからそれらを意識することもない
結果として所有権とライフタイムを理解していなくてもそのスタイルでプログラムを組むことが出来てしまう
0980デフォルトの名無しさん
垢版 |
2022/10/06(木) 18:43:34.42ID:rjzElph2
逆にrustだとどういう時に参照返しが必要になるの?
0982デフォルトの名無しさん
垢版 |
2022/10/06(木) 19:17:16.58ID:mTG1aBjr
「参照で返す」「参照を返す」って表現する人 ←わかる
「参照返し」と言い続ける人 ←???
0984デフォルトの名無しさん
垢版 |
2022/10/06(木) 19:40:30.33ID:mTG1aBjr
値渡し参照渡しで言うと依然として単なる値渡しなのに
ただポインタを渡してるだけでそれを
「ポインタ渡し」とか言い出したり
ひどいやつだと「参照渡し」だと言いはったり
そういうのを過去にC言語界隈で見てきたから気になったんよ
独自解釈による珍妙なワードはこの世に必要ないと思うでしょ

>>983
そうですかボクからはもう何も言うことはありません
0985デフォルトの名無しさん
垢版 |
2022/10/06(木) 19:48:59.04ID:dbBfkB/k
>>984
それは君が区別すべきことを理解できていないから混乱している
会話や説明では何と何を区別するかが重要
もちろんRustでは常に指定した型そのものが渡され返される
だから区別するとしたら実体を渡したり返したりするのかその参照を渡したり返したりするのかが焦点となる
したがって参照渡しや参照返しという言葉がぴったり適して使われている
0986デフォルトの名無しさん
垢版 |
2022/10/06(木) 19:53:30.79ID:mTG1aBjr
あとポインタへのポインタを「ダブルポインタ」って呼んじゃう人もいたな
このスレでは「所有権の複製」ってのもあったな
0987デフォルトの名無しさん
垢版 |
2022/10/06(木) 19:58:06.41ID:tLVpM1Ll
>>986
英語でもダブルポインタと言うし何を問題にしているのかわからん
自分勝手な線引きやルールがあってそこから外れると融通が効かなくなるダメな人かね?
0988デフォルトの名無しさん
垢版 |
2022/10/06(木) 20:04:50.45ID:aGNYxTl9
ゲームの方のRustで、ホロライブのRustのSeason3が終わるから検索汚染も減るかもな
0989デフォルトの名無しさん
垢版 |
2022/10/06(木) 20:12:15.66ID:EteQ2MpB
参照で返すことを「参照返し」と言った途端ブチギレするのマジで意味不明なんだがその呼び方を否定するとどんなメリットがあるのだろうか
0991デフォルトの名無しさん
垢版 |
2022/10/06(木) 20:27:57.49ID:RK7Fg483
>>984を見るとCでポインタで渡すことをポインタ渡しと言われるだけで発狂するようだからその人はキチガイ
0993デフォルトの名無しさん
垢版 |
2022/10/06(木) 20:52:48.54ID:mb1xnKf4
他への参照を持つ実体を返すのは値返しか参照返しかはたまた別の何かか
なんて考えたくない
0994デフォルトの名無しさん
垢版 |
2022/10/06(木) 20:58:52.86ID:EteQ2MpB
「ポインタ渡し」がNGなら「ポインタを渡すこと」も日本語でそう表現していいよと言語の開発者がわざわざお墨付き与えなければNGだと思う
0995デフォルトの名無しさん
垢版 |
2022/10/06(木) 21:00:15.33ID:99NRyDSB
今回はRustの段階的学習の話だから、これだけのことではないかい。
参照返しが含まれていなければ、ライフタイムを把握する必要がなく、所有権を学習していない段階でも、そのプログラムを書くことができる。
参照返しが含まれていれば、ライフタイムを把握する必要があり、所有権を学習した以降となる。
0997デフォルトの名無しさん
垢版 |
2022/10/06(木) 21:09:49.66ID:Re0G7B20
ぼくちゃんrust入門者
ライフタイム注釈だけはどうにかならなかったのとか思った
でもいろいろ満足
tauriやるぞう
レス数が1000を超えています。これ以上書き込みはできません。

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