1 名前:デフォルトの名無しさん mailto:sage [2022/06/27(月) 08:17:03.45 ID:gDlfKP6u.net] 公式 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/
831 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 00:07:36.94 ID:h/WE7ZWH.net] >>820 すまん rust だと cargo test で単体テストを実施するみたいだけど mook/stub をどうやって使うかはよくわからんかったわ C++ とかだと googlemook とか使ってテスト用のモッククラスを作って入れ替えるかたちだね
832 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 00:33:03.55 ID:TCGzsvbI.net] mockall使うとか
833 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 06:28:19.26 ID:p/pWEmYs.net] cargo testで関数テスト、モジュールテスト、モジュール間テストなどあらゆるテストをやっているけどダメなの?
834 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 06:47:39.41 ID:h/WE7ZWH.net] >>823 >>820 > その場合モックへ切り替える機構はどうするんだろ に答えてやってくれ
835 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 19:21:24.42 ID:kI3cAlPQ.net] モックやスタブは別モジュール化しておいて mod tests内では本物モジュールをuseする代わりにそれをuseするだけじゃないの?
836 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 19:31:47.69 ID:V9yeC/LF.net] あと#[cfg(test)]でそれをuse そして#[cfg(not(test))]で本物use
837 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 19:31:51.25 ID:i/jndsoD.net] 他の言語でもユーティリティを使わずに、DIやモックを自分でやったことがないんだろうな 説明が面倒だ
838 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 19:38:20.09 ID:V9yeC/LF.net] >>827 テスト以外の開発の話でも フレームワークに依存してやってる人は 単純なこと含めて本質的なことを理解してない人が多く フレームワークなしでは何も分からず何も出来なくなってしまう例を時々見かける
839 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 21:10:39.16 ID:qW/k82Qg.net] cfg使えば良いじゃないって人は#ifまみれで一見しただけじゃ 何がどう動くんだか判らないCのコードを正当化するつもりなのだろうか Rustは人間が注意すれば問題ないみたいな考えはレガシーで時代遅れだ という思想の言語だと思っているんだが違うのかな
840 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 21:41:35.64 ID:w5YNQb64.net] >>829 #ifは使わないし cfg(test)はテスト分離のため必須でしょ どんな環境でも魔法は無いよ
841 名前:デフォルトの名無しさん mailto:sage [2022/09/26(月) 23:33:07.51 ID:h/WE7ZWH.net] >>829 cfg使わないで済むいい方法があるなら書いてよ...
842 名前:デフォルトの名無しさん mailto:sage [2022/09/27(火) 01:17:35.37 ID:OwORQ6vn.net] mod tests に cfg(test) は必要だとして 依存性の注入にはtrait使えって事なのでは
843 名前:デフォルトの名無しさん mailto:sage [2022/09/27(火) 07:51:04.95 ID:f9SEu4pT.net] traitで置き換え可能にするのが面倒というのはありそうだな。
844 名前:デフォルトの名無しさん mailto:sage [2022/09/27(火) 08:15:53.87 ID:SBVoZTui.net] AMD64のデフォルトのオペランドサイズは32bitなのにusizeが64bitなのは何でなのかな
845 名前:デフォルトの名無しさん mailto:sage [2022/09/27(火) 11:05:22.42 ID:OwORQ6vn.net] size_tが64bitだからでは
846 名前:はちみつ餃子 mailto:sage [2022/09/27(火) 12:28:55.13 ID:ozjafOA0.net] >>834 usize はポインタのサイズということになっている。
847 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>831 単体テストで、依存を分離するのは当然のことすぎてみんな説明が億劫になってる C++だろうがRubyだろうが、モックやスタブを使って、関数同士やクラス同士の依存を切り分けてテストするのは当たり前 そうしないとそもそも単体テストにならないじゃん わかってる人にしかわからないであろう簡略な説明をすると、テスト用のエントリポイントで、テストに使うモックオブジェクトを指定するだけだよ そういうことができるようにあらかじめコード設計しておかないといけないがな 考えてなかったならリファクタが必要
848 名前:デフォルトの名無しさん mailto:sage [2022/09/27(火) 19:48:22.41 ID:J8MleXan.net] そんなフワフワした説明されても...
849 名前:デフォルトの名無しさん mailto:sage [2022/09/27(火) 19:51:56.44 ID:AWnlNGZp.net] 本物と異なり決まった値を返す送信元スタブと 本物と異なりassertだけする送信先モックを mod testsの中では本物の代わりにuseするだけだよね 入れ替えちゃうからtrait制約で本物も偽物も受け付け対応とかわざわざする必要ないよね
850 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 00:44:24.76 ID:JQpGo85s.net] >>839 useしたモックをどうやって注入すんの 関数の引数もstatic変数でも良いけど、テスト対象の実装がモックも本物も選択的に使えるようにするならば、 genericな型を受け付けるような実装にしておかないといけないのでtraitが登場するのでは それともmod testsの外もcfgで置き換えると言っている?
851 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 00:48:00.37 ID:JQpGo85s.net] 要は use imp::Foo; fn target(foo: Foo) {} がテスト対象だとして mod tests { use mock::Foo; #[test] fn test() { target(Foo::new()); } } してもコンパイル通らないよね targetがimp::Fooもmock::Fooも受け付けるようにするにはtraitが必要では
852 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 07:20:15.72 ID:1i04Jlqk.net] traitが無い言語では無理ってこと??
853 名前:デフォルトの名無しさん mailto:sage [2022/09/28(水) 11:35:17.56 ID:RLf9Yg7w.net] >>842 他の言語は他のやり方でやってるだけだろ
854 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 01:43:05.00 ID:xXycU9Ev.net] u32 を格納する型が必要になり、また、逆に u32 に変換する必要もあるという状況で せっかくだから u32 に変換可能な型は受け入れようと考えてこんなコードを書きました。 しかしエラーになります。 struct Code(u32); impl<T: Into<u32>> From<T> for Code { fn from(x: T) -> Self { Code(x.into()) } } impl From<Code> for u32 { fn from(Code(x): Code) -> Self { x } } 結果的に自分自身への変換を許すことになってしまうのが既存 (標準ライブラリ) の定義と衝突しているという理屈は理解しているのですが、 問題を解消するためにこの定義が受け入れる範囲から自分自身 (Code) は除外するように うまく制約を付ける方法は思いつきません。 そもそもこんなところで勝手に変換するのがよくない作法だとかそういうのは脇に置いて 「自分自身だけ除外するような制約」を上手いこと表現できませんかね?
855 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 02:16:48.63 ID:zId7dOnm.net] 無い
856 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 02:20:01.39 ID:7xp1eqla.net] そっかー
857 名前:デフォルトの名無しさん mailto:sage [2022/09/29(木) 02:40:21.97 ID:U5dWXlr2.net] そういうのはIntoCodeみたいな感じで別トレイトにすることが多い気がする https://docs.rs/axum/latest/axum/response/trait.IntoResponse.html
858 名前:デフォルトの名無しさん [2022/09/30(金) 02:17:04.59 ID:Yj/X+hjS.net] 初歩的なことですまんけどさ メソッド内で↓みたいなのってよく見るけど、こう言うのってself.asdfのまま使用するのに比べてどういった利点があるの? let asdf = self.asdf;
859 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 10:23:40.27 ID:1sTGpNyR.net] 名前を短くする目的が99パー
860 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 11:00:13.39 ID:tNhbOFxw.net] クロージャーで構造体のフィールドにアクセスすると構造体ごとムーブしちゃうんでそれ対策じゃないかな 2021で対策されたからどんどん減ってくだろうけど https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=ebea0bd9611104e7a90eb8dfcb9899c9
861 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 12:43:57.87 ID:NYKsqXq4.net] 書き方は違うけどフィールドそれぞれに対して処理を行う場合に抜け漏れがないことをコンパイラにチェックさせる目的でローカル変数にすることはある let Foo { foo, bar. baz } = self; としておくと後続の処理で使わないフィールドがあったときにコンパイラが警告してくれる 構造体に新たにフィールド追加した場合も分割代入の箇所でコンパイルエラーになるので修正必要箇所を洗い出すことができる
862 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 13:52:13.77 ID:yzoXDHK/.net] >>851 なんかすごくモヤモヤする
863 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 14:15:24.65 ID:oHn8O8ll.net] 本人は俺ってスゲー、天才やん! って思ってるんだろうけど後でコード見たらなんでこんなイミフなことしてるんだ?バカじゃねーの ってなるパターンかと まあこういう工夫をすること自体は悪くない
864 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 14:42:00.50 ID:M1og6e+j.net] フィールドそれぞれに処理をするシチュエーションがわからない
865 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 14:50:06.85 ID:temvUu5a.net] >>851 俺もそのdestructuring assignment自体は使いまくる しかし目的が漏れチェックとは違うのでこうだな let Self { foo, bar, .. } = self;
866 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 14:55:47.39 ID:t/wNXSJY.net] >>851 これいいな
867 名前:デフォルトの名無しさん [2022/09/30(金) 15:59:33.74 ID:XmkFmofe.net] こうやって自己満足の意味不明なコードが量産されていく
868 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 16:19:08.34 ID:GH/ZHf2N.net] 全フィールド舐めるのが重要な処理ってシリアライズとかだろうか そんな小手先のテクニックとかじゃなくてproc_macro組んだ方がいいと思う シリアライズしたいだけならserde使って#[derive(Serialize)] これも結局proc_macroだわな
869 名前:デフォルトの名無しさん mailto:sage [2022/09/30(金) 17:36:27.38 ID:NYKsqXq4.net] コマンドライン引数や設定ファイルの定義をclap::Argやserde::Deserializeで宣言的にやって、 それらを処理するところで分割代入してローカル変数にして処理してる 人間が意識的に気をつける必要がある箇所を極力減らしたい気持ちでやっている 好き嫌いあるかも知れないけど趣味プロダクトだしコーディングの意図をコメントに残してるから許せ
870 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 02:29:47.97 ID:hYwRxeDD.net] >>844 impl<T: Into<u32>> From<T> for Code {}の定義はFromの反射性と衝突するから間違ってる。 Into<u32>を受け付けたいなら関数のパラメタの型をT: Into<u32> or impl Into<u32>にすればいい。 まあ、実装上の規約として必要なんで内部ではtrait IntoFooはパターンとして使われるけど外に漏らすようなものでもない。
871 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 02:38:45.63 ID:6voBA5Ft.net] &(T, U)と(&T, &U)って等価ですか?
872 名前:デフォルトの名無しさん mailto:sage [2022/10/01(土) 05:47:36.69 ID:6w1pI6Co.net] 等価ではありません
873 名前:デフォルトの名無しさん [[ここ壊れてます] .net] アドレスを考えれば明白に別物 一方で let t = (123, "abc"); let (x, y) = &t; と自動マッチングしてくれて &t の型は &(i32, &str) x の型は &i32 y の型は &&str となる つまり&(T, U)が(&T, &U)に分割代入される
874 名前:デフォルトの名無しさん mailto:sage [2022/10/02(日) 10:11:02.15 ID:vdaryILR.net] test
875 名前:デフォルトの名無しさん mailto:sage [2022/10/03(月) 22:39:32.97 ID:zgM1XF6F.net] amd64ターゲットでアセンブラリストを吐かせてみたらr13が全く使用されていないんだけど r14、r15よりr13を空けておく理由がなにかあるのかな
876 名前:デフォルトの名無しさん mailto:sage [2022/10/03(月) 23:46:41.15 ID:cMmfYMlm.net] >>865 そんな不吉なレジスタなんか使うな!
877 名前:デフォルトの名無しさん [2022/10/04(火) 00:38:55.95 ID:1GTeu6AF.net] うまく表現できないのですが、cやc++なら部分から始められる(動くものが作ることができる)のですけど、rustはそんな気がしないというか 伝わりにくいかもしれませんけど
878 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 00:52:50.22 ID:4fgdKnMe.net] そういう事象をちゃんと論理がとおった表現ができないからrustが使えないんだよきみは!
879 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] 作りたいものの設計のイメージがc++でできているならそれをrust化するのは比較的簡単だろうしそれができないならrustの基本的な理解が足りないだけかと
880 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] Rustはデータ構造を最初に設計しないといけないというのはあるな C++でもちゃんとそういうやり方が出来てるなら素直に移行できるだろうけど 雑にポインタ持ち回ったり実装の都合でアドホックに相互参照入れちゃったりする人には厳しいだろう
881 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 08:55:50.45 ID:fDq9dWrD.net] C系は良くも悪くも動いてしまうんよな そんで知らぬ間に副作用まみれになっている
882 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 09:10:45.14 ID:9SKodj4D.net] >>867 慣れの問題も大きいのでは
883 名前:はちみつ餃子 mailto:sage [2022/10/04(火) 09:22:15.67 ID:P4nmisNi.net] 雑に始めてから整理していくスタイルなら C++ のほうがやりやすいというのは理解できる。 でも雑に始めたら整理する機会などないのが現実。
884 名前:デフォルトの名無しさん [2022/10/04(火) 09:24:31.25 ID:BONyu2jp.net] >>867 ですが、 部分から始められるというのは、部分的な学習からということです ここまで学習すればここまではできるとか rustでは最初のプログラムを作るにもたくさんのことを知らなければならないというか Haskellをかじったことがあり、とても興味深いのですが わかりにくい独り言に、レスをくださってありがとうございました
885 名前:はちみつ餃子 mailto:sage [2022/10/04(火) 09:48:05.73 ID:P4nmisNi.net] >>874 > 部分的な学習から できない。 部分的に学習して何かができたように見えても必ず間違ったものを書いているのが C++ というもの。 学習を進めていくにつれて間違っていたことに何度も気づくのでうんざりした経験があるだろ?
886 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 10:23:23.92 ID:5od2FDFX.net] 部分的な学習ってのは C with classes -> STL -> move みたいな感じじゃない? 他人のコード読むなら全部必要だけど、独習してる分には最初テンプレートとかなくてもいけるでしょ
887 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 12:43:12.54 ID:7zYgBA5I.net] >>875 >>876 横からだけど、「部分的な学習」はもっと手前のところ。初心者でも 空のコード->リテラル->関数呼出->ライブラリ使用->変数定義・使用 あたりで使い方が広がるんだけど、Rustは関数呼出-変数あたりに概念のデカイ塊がある。 このあたりをまとめて覚えないと機能するプログラムを組めないので、学習者には辛い状態が続く。 Rustはc++以上に挫折しやすいと思う。
888 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 12:54:59.39 ID:zVqHX6VA.net] 借用と実体(所有権)を常に意識しなきなならんからね Cだと全部ポインタ使うから意識しないんだけどね
889 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 13:01:26.34 ID:NJ6V6LdV.net] どんなプログラミング言語でもいいから何か言語を学習済みの人にとって 他の言語を学習するのは部分的に段階的にすることが可能だよ もちろんRustでも同じで初心者向けの学習本 The Rust Programming Language https://doc.rust-jp.rs/book-ja/ を順番に少しずつ進めれば部分的に段階的に学習できるよ
890 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 13:14:23.44 ID:fXb8hG+g.net] >>877 段階を経ず一気に進める無謀なことをする人だけが挫折するかもしれないが無謀なその人が悪い >>878 いきなりそこまで進める人は単なる無謀者 まずは他の言語と同じ使い方 ・実体のコピー ・参照(=借用) のみ使っている限り所有権なんて知らなくてよい 参照を戻り値としない限りライフタイムも知る必要ない まずは部分的な学習をすればいい その後で所有権とライフタイムを学べばよい
891 名前:はちみつ餃子 mailto:sage [2022/10/04(火) 13:25:41.11 ID:P4nmisNi.net] >>877 > 関数呼出-変数あたりに概念のデカイ塊がある C++ にもある。 あるのに中途半端な状態で間違った使い方が出来てしまうのが問題の根源。 まともに機能していないことに気づかずに 機能するプログラムを作れていると誤解して後になって結局は行き詰る。 >> 878 意識する必要はある。 コンパイラが検証してくれないのだからむしろ C のほうが強く意識する。
892 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 13:37:36.16 ID:pLeAl7hn.net] まずは(Copy実装型の)数値演算だけやって変数と関数の使い方を覚えればいいだけじゃん 所有権なんて出て来ないぜ その後にようやく数値の配列をやってその参照渡しと可変参照渡しを学ぶ といったように順番にちよっとずつ学習していけば全くの初心者でも躓くことはない
893 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 13:44:23.36 ID:0vVjyJiG.net] 相変わらず複オジはクソだな
894 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 13:49:35.50 ID:ez1nu7fa.net] 部分的な学習ができないと主張してるやつは、いきなり無茶なことをしてるバカだけだな。
895 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 14:54:07.07 ID:zVqHX6VA.net] >>880 でも標準機能の中でその理解が必要なんだよ into_iterとかiterとか その辺は本当にちゃんと理解してないとまともなループする書けない
896 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 15:06:46.90 ID:ZhUau2yw.net] 言語の学習ではあまりないと思うけど複数のコンポーネントを全て完動させないと到達出来ない領域があるのは確か レイヤーが下がるとそう言うのも珍しくない
897 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 15:37:58.58 ID:attOzucb.net] >>885 それは一気に全てを理解しないといけないと思い込んでるアホ人間だから 初心者のうちはfor文なんてざっくりした理解で十分に学習をどんどん進められる 後にIntoIteratorを理解する段階になってようやくfor文を完全に正解に理解すればよい
898 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 15:56:25.04 ID:NBwKbSDK.net] 初心者がなんか言ってるwww
899 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:01:39.35 ID:zVqHX6VA.net] >>887 いやそれは無理があるだろ 所有権と借用の理解は型変換の時にも必須 collectとか使うときにも必須 競プロみたいな数値だけ扱うようなプログラムならかけるけど
900 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:03:22.02 ID:LLFCSjL7.net] >>886 それは言語の学習と関係ないよね Rust固有の話でもないね つまり今回の話と全く関係ないでしょう ちなみにそういう時はサンプルコードなどをまずは魔法の呪文とブラックボックスとして受け入れましょう そして一つずつ把握する範囲を広げていけばよいのです 失敗する人は最初から全てを把握しようとする人だけです
901 名前:はちみつ餃子 mailto:sage [2022/10/04(火) 16:06:42.76 ID:P4nmisNi.net] >>885 問題点が分かってきた。 「部分的な学習」というのは項目をひとつきちんと理解してから次の項目の学習に移るみたいなスタイルを前提としているんじゃないか? 俺が思ってた学習スタイルは「概念が存在していることは知っている」という程度の全体像から解像度を上げていくような方向性だった。 機能は互いに連携するので「この部分は完璧にわかっているけど他はまだ」なんて状況は有りえんし、そういう学習方法できちんと身につくとは思わない。 (もちろん人によってやりやすいスタイルはあるのだろうけども、個人的にはオススメ出来ない。) 流し読み程度でも入門書を一度読めば (細かい借用規則を覚えていなくても) iter を使うくらいは出来るよ。 そこから何度でも読んで細かい理解を深めていくんだよ。
902 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:09:22.52 ID:Yud6QviI.net] >>889 キチガイは黙っていろ どんな世界でもそんなに一気に大きく手を広げて学習しようとして上手くいくわけがない 単純に一つずつやっていくのが正しい collectなんて後で困らん そもそもイテレータ使わなきゃcollectは出て来ない ぶっ飛んだことを書き込んでいることを自覚しろ
903 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:10:09.70 ID:froE0MIe.net] これがいつもの複オジ演w
904 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:15:28.56 ID:Qrm8xufh.net] >>889 collectを使わなくてもプログラムを書けるから少しずつ学習していく方法でも支障はないし collectを一旦は魔術だとみなして仕組みの詳細まで把握せずに利用して進めていく学習方法でも支障はないし FromIteratorなんてあとから学べば十分ですよ
905 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:17:47.88 ID:zVqHX6VA.net] いやcollectをここまで安全かつ効率よく実装してる言語はないのにそれを使わないのは論外
906 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:19:54.90 ID:zVqHX6VA.net] 戦国時代に例えるならここに名刀があります ワタクシは未熟だからこの刀は使いませんと言って 戦に出て殺されるみたいな話 その名刀を最初から使えるように訓練すべき
907 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:20:34.14 ID:QGiHkjYG.net] 馬鹿じゃねぇの
908 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:26:15.56 ID:Qrm8xufh.net] >>895 使いたいならば使えばよいだけですよ 初心者がFromIteratorの仕組みまで理解しないとcollectを使っちゃいけないのですか? この場合の『部分的に学習』とはcollectの機能の一部をまずは表層的にのみ理解して使ってみることです そしてこの『部分的に学習』は可能です
909 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:29:20.57 ID:BXFwwNrI.net] 隔離スレに帰れ
910 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:29:25.15 ID:zVqHX6VA.net] いやだから「表層的な学習」だとコンパイルすら通せないんだって
911 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:31:30.86 ID:zVqHX6VA.net] 何度も言ってるけどRustはコンパイルを通せば 意図してないエラーはまず起きないし Nullで落ちるなんてこともない
912 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 16:35:17.34 ID:vFqvnIUB.net] 頭がいいと思い込んでる馬鹿がいきなり複雑な難しいことに挑戦して失敗して 難しい!とわめく馬鹿パターンはどんな分野でもある その馬鹿が>>896
913 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 17:00:26.62 ID:zVqHX6VA.net] 「段階的学習」というのは数学や物理においては成立する言葉だがプログラミングにおいては成立しない なぜなら「知識の差」が普遍的に影響を受けてしまうから 例えば数学では代数学の理論を知らなくても初等整数論は学べるがプログラミングではそのようなことはないとわかる
914 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 17:01:28.47 ID:zVqHX6VA.net] 例えばアルゴリズムの問題もそう 「知らない」ことが致命的になり得る
915 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 17:06:11.40 ID:zVqHX6VA.net] collectを知らないものが自前でfor文で同じことを実装していたらどうなるだろうか? レビューで指摘され赤っ恥を書かされてプライドはズタズタ それが原因で鬱になるかもしれん さらにパフォーマンス悪くなる 精神的にも肉体的にもダメージを負うことになる
916 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 17:18:30.46 ID:vFqvnIUB.net] >>905 真逆だ 初心者の学習過程ならばcollectを使わずに実装することは適切な練習問題だ その段階を経てからcollectを学習した者こそ身に付く
917 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 17:46:08.51 ID:5flxOiHV.net] 段階的学習って↓を読み進めればいいだけじゃないの? https://doc.rust-jp.rs/book-ja/
918 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 18:05:45.53 ID:qunzxQTR.net] >>907 その通りなんだけど Rustは段階的な学習ができない!と主張している変な人がいるのよ
919 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 18:41:19.07 ID:NDareeYW.net] この複オジ演パターンはもうみんな気づいてるよね
920 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 18:43:17.38 ID:ye813FXw.net] 赤い人をNGしときゃいいやん
921 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 19:01:55.07 ID:7zYgBA5I.net] >>907 初心者・初学者に「the bookを読め」はさすがにむちゃだろ。 やっぱり「初心者はRust使わず他の言語から勉強しろ」が正解なのかね。
922 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 19:07:38.54 ID:gMN5eNCr.net] >>891 さすが餃子さん分かってらっしゃる 最初は大まかな理解→もう少し詳細な理解→最後に完璧な理解という解像度の段階的な学習を中心に 項目や範囲を広げていく網羅度の段階的な学習を組み合わせることでRustの学習を含めて一般的な事柄にも適用できる
923 名前:はちみつ餃子 mailto:sage [2022/10/04(火) 20:17:29.13 ID:P4nmisNi.net] >>911 そこで言ってる「初心者」は「Rust の初心者」ではなく「プログラミングの初心者」の意味? そうだとすると the book はちょっとハードルが高いということはあるかもしれんな。 でも C++ と比較すると C++ のほうがもっとハードルが高いと思う。 コンパイラが検出しないところで未定義に入り込むことがあまりに多い。 初心者が間違うのは当然のことだが、正しいのか間違っているのかわからないというのは間違っていることが明白であるよりもしんどい。 そこで間違ったまま邁進できるようなメンタルの持ち主はそれはそれで遠からず行き詰るし。
924 名前:デフォルトの名無しさん [2022/10/04(火) 20:27:55.40 ID:9Mq2x6bG.net] >>867 ですが、 >>876 さんがおっしゃることが僕の意図を言い当てています c++を使わなくなって 15年は経ちますが、その頃の c++にはテンプレートはありましたがスマートポインタやラムダ式、その他諸々のモダンな機能はまだありませんでした(と思います) クラス付きのCの部分で仕事をしていました モダンなc++へ再入門するか、rustを学ぶか迷って rustに触れて今に至りました
925 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 20:36:11.60 ID:pQmQIrKs.net] >>914 C程度の予備知識があるならば >>907 のRust Bookだけで容易に段階的に学習できるから何ら問題は起きず大丈夫
926 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 21:10:32.92 ID:d7kGndGU.net] 所有権も借用も生存期間も理解してなければ メソッド呼び出し一つ満足にできないんだから それら無しに動くものが作れるわけない 学習自体は言語に限らずどんな学習でも部分的段階的にやるもの それ以外の方法なんてないんだから論点ずれてる
927 名前:デフォルトの名無しさん mailto:sage [[ここ壊れてます] .net] >>916 それはさすがに無知すぎやろ Rustは数値など所有権とは無縁な型で構成されているから 所有権なんて理解しなくてもプログラムを組める 段階的に後から所有権を学ぶことができる
928 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 23:03:40.79 ID:HL14YOAo.net] >>917 所有権も知らずにイキってた人はさすがに言う事が違うねぇww
929 名前:デフォルトの名無しさん mailto:sage [2022/10/04(火) 23:58:47.13 ID:vxOZn4OH.net] 数値型って所有権がっつり関係してると思うけど
930 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 00:06:13.80 ID:SE95U4Vu.net] >>919 数値型はCopyを実装しているので所有権は無くムーブも起きない
931 名前:デフォルトの名無しさん mailto:sage [2022/10/05(水) 02:07:12.38 ID:1K+My+/e.net] 数値型だけで>>867 の言う「動くもの」を作ってみれば?