1 名前:デフォルトの名無しさん [2017/12/24(日) 18:27:01.98 ID:EGydBhQv0.net] Mozilla発のプログラミング言語「Rust」のスレです ■公式 https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust ■ワッチョイ スレ建て時、一行目に !extend:on:vvvvv:1000:512 を入れること ■派生元スレ プログラミング言語 Rust 4 https://mevius.5ch.net/test/read.cgi/tech/1507970294/ VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
83 名前:デフォルトの名無しさん [2018/03/08(木) 01:34:04.75 ID:4NfI3sqt0.net] 1.24.1は何のリリース?
84 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 12:10:25.91 ID:eSLd4gfv0.net] 朗報: ついにウェブプラットフォームでRustが速度性能トップを取る https://www.techempower.com/benchmarks/#section=data-r15&hw=ph&test=plaintext なお、JSON操作を伴うとJavaにも劣る模様 ツリー制御が不得意すぎて笑うわ
85 名前:デフォルトの名無しさん mailto:sage [2018/03/11(日) 13:43:13.82 ID:Q5vGc4iJ0.net] JSON serializationはそんなに悪くないんじゃね?tokio-minihttpで96.2%出てる。 それよりSingle QueryとMultple Queryが遅いのが問題じゃね?
86 名前:デフォルトの名無しさん [2018/03/11(日) 17:59:47.19 ID:9uw0Jco60.net] serdeでシリアライズだけするぶんにはjavaの1.4倍くらい早かったんだけどなあ(俺調べ)
87 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 21:44:59.24 ID:zUTKt+H50.net] Rust book first editionからの変更知りたいんだけどバージョン差分どこでまとめられてる?
88 名前:デフォルトの名無しさん mailto:sage [2018/03/17(土) 21:47:17.89 ID:zUTKt+H50.net] https://github.com/rust-lang/rust/blob/master/RELEASES.md ここか
89 名前:デフォルトの名無しさん [2018/03/18(日) 07:04:56.79 ID:esGNO3D8M.net] 1.24.1てなんなんだろ
90 名前:デフォルトの名無しさん mailto:sage [2018/03/18(日) 20:50:19.82 ID:M8FazHkP0.net] >>83 >>89 なんで自分で調べようともしないの? Rust Languageさんのツイート: "Announcing Rust 1.24.1: we had some regressions in 1.24.0, so we've released a patch release. Please check it out! https://t.co/zrItc0qiqD" https://twitter.com/rustlang/status/969367994072739841 👀 Rock54: Caution(BBR-MD5:b73a9cd27f0065c395082e3925dacf01)
91 名前:デフォルトの名無しさん [2018/03/18(日) 21:36:06.49 ID:kfSBwJmk0.net] Iterator::mapに渡すクロージャ内で、クロージャ内の変数への参照を持つstructを返したい時ってどう対処するのが正解ですか? https://play.rust-lang.org/?gist=a15e0dfa10339570fef5b9225761a9f0&version=stable
92 名前:デフォルトの名無しさん mailto:sage [2018/03/18(日) 23:09:22.36 ID:UNqGf23T0.net] does not live longエラー関係は自分が思ってるより広い視点で見た方が解決するんじゃないかなあ Hito.konomi_no_mochiは参照なんだから、参照元としてVec<Mochi<'a>>を保持しないと駄目なんじゃね? =>mochiがMapになってて分かりにくい =>とりあえずcollectさせてVec<Mochi>持ったら動いた みたいな。 https://play.rust-lang.org/?gist=6c9947e3584f1feb5bb14f07d27aa9c7&version=stable 多分、頭の良い人ならもっと綺麗な説明と解法があるんだろうけど
93 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 07:39:54.89 ID:bmK7HIBH0.net] >>92 ありがとうございます 仮引数mのライフタイムはmain関数が抜けるまでだから通るということで合っていますか またVecではなくIterator::Mapだと駄目な理由は、Iterator::Mapはcollectされるまでクロージャが実行されないから…とかでしょうか
94 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 13:44:00.51 ID:aUxUFBJe0.net] >>93 仮引数mのライフタイムはクロージャ内なのは変わらないよ。>>92 は仮引数を参照じゃなく消費してるから通る(>>92 の&mじゃなくてmで良い) クロージャが実行されないから、ではなく、mochiの値が消費されてるのにその参照を持たせようとしてるから駄目 試しに>>91 のコードでmochi.map(|m| { 0 })とか書いて、mochiをprintln!に渡してみようとすると怒られるよ。もう使ってるって。 そこらへんの細かいルールを覚えるの大変だし、コンパイラもまだ分かりやすいエラーメッセージ吐いてくれないから、 ・参照を使うときは、参照元をちゃんと生かしておくこと ・参照を使った構造体は、元の値を修飾(見方を変える、新しい機能を持たせる等)するようなパターンに限定すること を守るようにした方がいいよ
95 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 21:04:17.46 ID:bmK7HIBH0.net] >>94 「消費したものの参照を持たせるのは駄目」と「消費しているから通る」はそれぞれはわかる気がするのですが、両方となると… 前者の「消費したもの」と後者(main関数中生き続けるMochiのベクトル)は別物だと思うのですが、 前者で駄目な理由は関数中生き続けるMochiがない(mapを呼び出しただけでは駄目)ということですか?
96 名前:デフォルトの名無しさん mailto:sage [2018/03/19(月) 23:26:36.74 ID:aUxUFBJe0.net] 「消費されるので通る」じゃ言葉足らずでした。「参照じゃなくmoveして延命している」の方が通じるかも >>91 のコードを整理すると 1. HitoはMochiの参照を持ってるから、Hitoが有効なスコープ中はMochiも有効じゃないといけない 2. mochiはinto_iterで作られてるからMochi型を吐き出す、けど所有はしない 3. なのにmochizukiはmochi.map()で各要素への参照しか持たない 4. mochiから吐き出されたMochiの受け皿が無いんでエラーになる これを解決するには 1を変えてHitoがMochiを所有するようにデータ構造を変える 2で作られたMochi型の値をしっかり保持する変数を用意する の2種類くらいしか思いつかん。 Does Not Live Longエラーはライフタイムがどうのこうのと小手先で弄るより、 値の所有者を明快にしたり、データ構造を見直してみると案外素直に直せるのが経験則。
97 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 13:21:28.84 ID:RDB2KieC0.net] >>96 loop{ let (a, cond): (&str, bool) = get_too_many_str(); let m = Mochi{aji: a}; let h = Hito {m : &m}; if(cond){ break; } } // ここでhのvecが欲しい この場合は、ムーブする(ループより長いライフライムの)変数がないので1の手法しかないということになりますか? そこそこでかい文字列を扱っているので気を使っていたのですが、この場合Stringにすべきでしょうか
98 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 14:30:32.82 ID:UUyTwokV0.net] 大きい文字列を扱うから参照にしたいってのは普通にあるし分かるけど Hitoが&MochiでなくMochiをメンバに持つようになっても文字列のコピーは行われないよ 自分なら>>97 のget_too_many_str()が返す&strの元を誰が保持するのかをまず気にする そこをしっかり把握してれば文字列のコピーは最低限になるはずだから
99 名前:デフォルトの名無しさん mailto:sage [2018/03/20(火) 16:38:27.06 ID:P+YmZBwi0.net] >>97 んー、自分なら そこだけに使うMochiCow型作ってでも ajiの型をCowにして凌ぐかな
100 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 11:43:51.64 ID:cBTkQiaM0.net] &strの元もloop内の変数が持っています hのvecを作るにはコピーは避けられないようですね… &strからStringに変えたところhvec.push(h)してもエラーにはなりませんでしたが、 スコープを抜けたはずの変数が使える理由ってどこかに書いていますか?
101 名前:デフォルトの名無しさん mailto:sage [2018/03/21(水) 14:53:30.44 ID:9rI6JIRt0.net] そりゃloop内の変数hから、loop外のhvecに所有権が移動したから 頭の中に入れておける物なんて極わずかだし、場当たり的にdoes not live longエラーに対処するのは大変なので、 ・値の所有者はどの変数であるべきか ・データ構造はどうあるべきか という観点だけ念頭にいれて、「性能を稼ぐために参照を使おう」って考えを一旦外すとスッキリするよ
102 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 17:27:59.27 ID:YDqAu+LL0.net] こっちが本スレと聞いて
103 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 21:42:18.86 ID:eccSQZbu0.net] しかしここには俺はいない
104 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 21:42:37.31 ID:eccSQZbu0.net] まちがえた 俺しかいない
105 名前:デフォルトの名無しさん mailto:sage [2018/04/15(日) 22:10:33.68 ID:33fSNzq50.net] 俺もいるぞ
106 名前:デフォルトの名無しさん [2018/04/15(日) 22:44:53.22 ID:UX4y5Mn1a.net] てst
107 名前:デフォルトの名無しさん mailto:sage [2018/04/16(月) 07:13:50.32 ID:pzKlDNeX0.net] まともな話題はslackいっちゃうのかな。 匿名で喋りたいのはアンチ向きか
108 名前:デフォルトの名無しさん mailto:sage [2018/05/08(火) 02:44:07.65 ID:kruQSPFC0.net] 別にアンチって訳じゃないけど、コンパイルが遅すぎる(特に最適化掛けた場合に)のはどうかと思う。 実行が速くてもその生成に時間が掛かれば無意味でしょう……。
109 名前:デフォルトの名無しさん mailto:sage [2018/05/08(火) 05:31:20.68 ID:4Vs0GKvV0.net] >>108 Rustで組んだ新Firefoxの動作が2倍ほど速くなったのは無意味?
110 名前:デフォルトの名無しさん [2018/05/08(火) 07:00:09.03 ID:EnN/pyur0.net] 逆なら理解できるけど
111 名前:デフォルトの名無しさん mailto:sage [2018/05/08(火) 08:36:06.07 ID:Hy6hpXT/M.net] まあコンパイルは遅いわな。 ていうかcargoの仕組みが問題なだけか?
112 名前:デフォルトの名無しさん mailto:sage [2018/05/08(火) 20:14:50.84 ID:T0pMALEX0.net] rustcで単一ファイルだけコンパイルすると結構速いなと思った cargoって警告無視のオプション(-Awarning)の有無でも一からビルドしようとしたりちょくちょくお粗末
113 名前:デフォルトの名無しさん mailto:sage [2018/05/10(木) 20:35:06.28 ID:zLx1ZI770.net] なんかRustってテスト用と製品用で別々の最適化を施せるんじゃなかったっけ。 俺は自分の為だけにRustを使ってるのであまり気にしたことがないが。
114 名前:デフォルトの名無しさん mailto:sage [2018/05/12(土) 12:11:46.40 ID:OzyUIrxEM.net] https://blog.rust-lang.org/2018/05/10/Rust-1.26.html impl Trait来たから 久しぶりにさわってみるかな
115 名前:デフォルトの名無しさん [2018/05/23(水) 12:09:39.17 ID:6kVmIohDH.net] ほとんどc++に見えるの俺だけ?
116 名前:デフォルトの名無しさん [2018/05/23(水) 12:29:18.87 ID:4/oN1Bt60.net] みんな言ってる
117 名前:デフォルトの名無しさん [2018/05/23(水) 23:15:50.94 ID:Au5e7VGg0.net] 確実にどんな人でも可能なネットで稼げる情報とか 念のためにのせておきます グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 C717P
118 名前:デフォルトの名無しさん [2018/05/28(月) 09:59:15.77 ID:N9/pBFPWH.net] rustを始めたんだけど 分かりそうで分からなくて イライラする なんだこの言語
119 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 11:01:04.58 ID:4ZqBL5Re0.net] 他の言語の経験にもよるけど 3000行ほど書けば慣れるよ(適当
120 名前:デフォルトの名無しさん [2018/05/28(月) 11:14:23.86 ID:N9/pBFPWH.net] actix_webでちょちょいとwebサービス作ろうと思っただけなんだが externとuseみたいに、なんで同じようなものが2つ有るのとか trait?、インプリすればいいだけならなんでこんな名前なんだとか
121 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 11:44:10.53 ID:4ZqBL5Re0.net] 察するにJava経験者かね externは外部ライブラリのモジュールを参照する宣言 modは自身のフォルダ以下のモジュールを参照する宣言 useはモジュールの要素(Struct or Trait)を取り込む宣言 pub use self::MyStruct; // 要素をexportしたり use std::io::Error as IOError; // as で別名つけたり use super::Result; // 上位の型を取り込んだり(mod.rs以外からだと同一フォルダのmod.rsを見にいくので注意) 肝はselfとsuperを使いこなすことかと このあたりリファレンスに書いてあるんで落ち着いて読んでもらえばいいけど インプリについては、Trait = Interface(Java)の理解でそれほど差し支えない気もするけど (定数は同じ階層のmoduleに移す) AssosiatedTypeがあるように"Traitはコンパイル時に解決できる"ものってのを 意識してればその内に腑に落ちるんじゃないかな ただこんなこと言うと 「RustのTraitは厳密なtraitじゃない論争」(Wikipedia参照)が始まっちゃうかもしれないので ゆるく受け流してほしいところ
122 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 12:36:48.84 ID:KX350+9ka.net] extern/use周りをrefineする話ってどうなった?
123 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 13:07:18.00 ID:Yj33g/c2M.net] >>122 一応2018の予定には入ってるけどまだ作業中じゃない? https://rust-lang-nursery.github.io/edition-guide/2018/transitioning/modules/path-clarity.html
124 名前:デフォルトの名無しさん [2018/05/28(月) 14:35:19.27 ID:N9/pBFPWH.net] チュートリアルの和訳のところを読んでいるけど 誰が訳したんだろう。。。
125 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 15:45:35.01 ID:AY4+K2YC0.net] extern crateは、includeとかload libraryぐらいの意味だと思えばいいと思うが、 「え、それ、Cargo.tomlにもう書いたやん」って思うのは当然の感覚だな
126 名前:デフォルトの名無しさん [2018/05/28(月) 15:47:39.28 ID:N9/pBFPWH.net] しばらくしたら言語仕様変わりそうだなあこれ 勉強していくべきなのかどうか迷う
127 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 16:38:01.86 ID:WepGeDn70.net] 仕様の改定はc++のようにコンパイラのリリースとは別に2〜3年毎に定めることになってる 将来のコンパイラでも古い仕様を選択して使えるはず
128 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 17:33:13.35 ID:dK7cJGyKa.net] どんな言語でも利用者多ければライブラリーのトレンド変わっていって学び直しはあるし 言語仕様の変更だけ特別視する理由が分からん
129 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 18:01:33.70 ID:b/gKZOsn0.net] ver1.0になったし、firefoxに200kstepのソースがあるから始めるなら今でしょ
130 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 21:33:55.19 ID:hIMCbSeD0.net] ruby1.8から1.9とか python2から3の変更とか 嫌じゃん 言語もライブラリも混在してぐちゃぐちゃ
131 名前: mailto:sage [2018/05/28(月) 22:15:42.81 ID:dVAXJXVu0.net] >>124 和訳は最新に追いついていないと思います、公式英文を確認したほうがいい
132 名前:デフォルトの名無しさん mailto:sage [2018/05/28(月) 23:47:10.84 ID:cVR0FGXk0.net] Rustの場合仕様変更の影響を受ける記述はコンパイラがwarning(とsuggestion)出してくれるみたいだし むしろライブラリのアップデートより楽なんじゃないかな
133 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 08:16:58.71 ID:dnBokp3T0.net] やりたいことをするのに1日使って50%しかできなかった 自分には無理だこの言語
134 名前:デフォルトの名無しさん mailto:sage [2018/05/29(火) 08:53:39.83 ID:GEfewF+tM.net] 50%できればすごいって
135 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 07:30:04.93 ID:gpIIxUGF0.net] 1.26の新機能自分のcrateにもう入れた?
136 名前:デフォルトの名無しさん mailto:sage [2018/06/01(金) 19:39:19.80 ID:RsiXZK4kM.net] 土台?
137 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 19:45:35.17 ID:woYxJr3K0.net] ここにまともなRustユーザいないのは年寄りしかいないからなのかなぁ
138 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 00:28:40.74 ID:U7oXkFlj0.net] slackかtwitterでコミュニケーションとれるので5chへ書き込みたい事情があまりない
139 名前: mailto:sage [2018/06/12(火) 00:34:57.69 ID:QT2PgMnm0.net] >>138 おすすめのハッシュタグはなんでしょうか?
140 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 08:25:35.49 ID:ESFTg/QrM.net] そう言われてみると確かにない。
141 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 09:41:15.21 ID:Sk+2Pu3l0.net] もっとメジャーになってslackが荒れて来たらここもワンちゃん
142 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 12:05:43.89 ID:QKuSZN5/a.net] ハッシュタグというより界隈の人間フォローしてる
143 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 19:39:13.56 ID:twlm3/XD0.net] slackで発言できないアンチにしか存在価値がないのかぁ
144 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 21:30:56.05 ID:d/RZ9PcJ0.net] slackのどこで喋ってるの?さ
145 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 07:40:50.77 ID:Iw3p0Ou70.net] アンチに限らず匿名文化は一定数必要でしょう。
146 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 13:01:46.22 ID:jLut3S1H0.net] つまり変な人でもスレに繰るなら、山の賑わい人気の証ってことね
147 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 20:45:08.63 ID:MX9PBj5g0.net] Vec内のアイテムを複数条件やand or等をユーザに指定させてフィルタリングをしたいのですが 無理にでもSQL使うべきでしょうか
148 名前:デフォルトの名無しさん mailto:sage [2018/06/23(土) 21:11:19.63 ID:SR6K28vn0.net] ユーザってのはどういうレイヤの話をしてるの?もう少し具体的に書かないと意味不明
149 名前:デフォルトの名無しさん mailto:sage [2018/06/24(日) 23:27:10.18 ID:FVTH6Flp0.net] values.iter().filter(hoge).filter(fuga).filter(piyo) フィルターを何度がけすると型がやばそう
150 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 00:28:41.79 ID:TWt9PpKD0.net] 強引にやるのはやばい感じだね https://ideone.com/3oy3FW
151 名前:デフォルトの名無しさん mailto:sage [2018/06/25(月) 07:08:50.50 ID:xxjb5DLL0.net] 調べてみるとfiltersというクレートがありました
152 名前:デフォルトの名無しさん mailto:sage [2018/06/28(木) 08:09:41.33 ID:t6K5m67F0.net] New Photon Release of Eclipse IDE Ships With Full Rust Support https://www.eclipse.org/org/press-release/20180627_new-photon-release-of-eclipse-ide-ships-with-full-rust-support.php
153 名前:デフォルトの名無しさん mailto:sage [2018/07/01(日) 02:21:52.91 ID:hOXxhpxn0.net] いやじゃ、いやじゃ、Eclipseなんぞ使いとうない
154 名前:デフォルトの名無しさん mailto:sage [2018/07/01(日) 03:02:12.97 ID:T78MqQu/0.net] みんなどんな環境で書いてるの?今はvscode使ってるんだけどrlsがあまりに不安定すぎてストレスが…
155 名前:デフォルトの名無しさん mailto:sage [2018/07/01(日) 06:22:17.39 ID:3lsiwbVs0.net] vscodeだよ racerも不安定だったような
156 名前:デフォルトの名無しさん mailto:sage [2018/07/01(日) 09:29:47.37 ID:61/yGhxs0.net] emacs + flycheck racerは重すぎるんでOFFにしてる
157 名前:デフォルトの名無しさん [2018/07/01(日) 15:40:20.37 ID:ep584YMHF.net] 秀丸
158 名前:デフォルトの名無しさん [2018/07/01(日) 18:12:28.40 ID:VIP13YQk0.net] 禿丸ってなに?
159 名前:デフォルトの名無しさん mailto:sage [2018/07/01(日) 19:19:06.36 ID:3lsiwbVs0.net] こっちまでネタスレかよ
160 名前:デフォルトの名無しさん [2018/07/03(火) 18:54:31.94 ID:A246qspJM.net] https://i.imgur.com/VVJNac4.jpg
161 名前:デフォルトの名無しさん [2018/07/04(水) 21:50:46.22 ID:gFgZc5FG0.net] 5PW
162 名前:デフォルトの名無しさん [2018/07/05(木) 00:59:18.40 ID:lJi2a9VDM.net] おーい、hgmr
163 名前:デフォルトの名無しさん mailto:sage [2018/07/28(土) 09:13:36.59 ID:pjkfXvHGM.net] hnmr王子〜♪
164 名前:デフォルトの名無しさん [2018/07/29(日) 02:13:01.57 ID:QHCaZ13N0.net] まさか繋いでくれる人がいるとは思わなかった
165 名前:デフォルトの名無しさん mailto:sage [2018/07/31(火) 16:45:34.48 ID:0aJU5h1JM.net] 花村てなんや オーバーウォッチか
166 名前:デフォルトの名無しさん mailto:sage [2018/08/05(日) 20:37:41.10 ID:XPCi/u53M.net] 王子に対し無礼であろう! https://www.nhk.or.jp/archives/sp/search/special/detail/?d=youth007
167 名前:デフォルトの名無しさん mailto:sage [2020/11/25(水) 00:47:44.38 ID:lt8VNqOR0.net] るすと
168 名前:デフォルトの名無しさん [2022/05/03(火) 15:19:34.90 ID:FP7f4hyR0.net] Rの発音が難しい
169 名前:デフォルトの名無しさん mailto:age [2022/08/07(日) 14:18:50.38 ID:Xv2x2xOXM.net] うんこすレッド
170 名前:デフォルトの名無しさん [2022/11/13(日) 22:46:23.74 ID:gb51z1Py0.net] 日本語の発音ってかイントネーションはみんなどっち? ラスト(ミファファ=スタバ) ラスト(ミドド=ベスト(着る方))
171 名前:デフォルトの名無しさん mailto:sage [2022/11/16(水) 18:15:29.98 ID:QMFF+6AxM.net] 1オクターブ上のドでミドド
172 名前:デフォルトの名無しさん [2022/12/18(日) 17:46:12.72 ID:fqk1SiW30.net] 本スレ最近ひどいね age
173 名前:デフォルトの名無しさん [2023/01/09(月) 20:41:28.12 ID:XnWHdmBW0.net] Rustの型って何を言ってるのか良う分からないくらい一気に複雑になるんだけど、改善の兆しってある? filter(|x| ...).map.(|x| ...)ってやると戻り値がMap<Filter<...>>みたいに、情報量がほぼ増えないのに型の表記だけが増えてくのが見づらくてしゃあないんだが 「ここを関数に切り出しておきたい」ってのも難しくね? impl Traitあるだろって言われるけど、自分ひとりでできた試しが無い
174 名前:デフォルトの名無しさん (ワッチョイ 1301-nt2E) mailto:sage [2023/01/09(月) 22:31:09.52 ID:ZXgjuOo50.net] >>173 .filter(|x| ...).map.(|x| …)とやったら ざっくり言うと戻り値はIterator<Item=T>でowned, shared reference, mutable referenceの3種類 Map<Filter<...>>とかの詳細な型を知りたいと思うことは基本ないからそこまで困らない デコレータとかコンポジション的なものとして理解しとけばいいと思う 関数に切り出すのはGC言語と比べると難しい どの値の所有権をどの呼び出しレイヤーで保持すべきかを整理しながらリファクタリングする必要がある ただある程度パターンがあるからそれが理解できるとそこまで難しくはない
175 名前:デフォルトの名無しさん [2023/01/11(水) 20:45:10.66 ID:+OHiCBbi0.net] >>174 標準ライブラリでiteratorのメソッドならそうなんだろうな、って他言語でも溜め込んだ知識で何とかなるけどさ、 例えばwarpっていうWebフレームワークはリクエストの解決にfilterを使ってるんだけど、 https://docs.rs/warp/latest/warp/filters/index.html ↑ここからたどって、例えばリクエストのパスにマッチするフィルタを作成するwarp::filters::pathってのがあるんだけど、 こいつの戻り値が独自型のExactってやつなのね warp作ってる人はここに様々な条件を追加できるようにしているんだけど、pathの戻り値にどう組み合わせられるかってのをどう探せるんだろっていつもなってる 他のcrateも、単機能で目的果たせるライブラリならまだいいけど、高階関数で機能組み合わせてねってやつはrustdoc見ても意味が分からなくなってる
176 名前:デフォルトの名無しさん mailto:sage [2023/01/11(水) 23:31:54.91 ID:B6T7GQUU0.net] >>175 ExactがFilterだと分かれば別のFilterを組み合わせられることはわかるでしょ? warpのFilterシステムを理解させるための解説ドキュメントが不足してるのと 他で類似の仕組みをあまり経験したことがないのが理由なんじゃないのかな? 型が入れ子の形でチェインされてる状態に慣れてないから それがわかりにくさの原因のように感じるかもしれないけど JavaやgoのReader/Writerみたいにデコレータ的に型を重ねていくのはそんな特殊なことじゃないよ
177 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 07:36:35.15 ID:fjq3kaV70.net] iterator系の処理はどんな言語でもやりすぎると意味不明なんでいい単位で説明変数や関数に切り出すのは大事だよ。
178 名前:デフォルトの名無しさん mailto:sage [2023/01/12(木) 10:57:06.97 ID:yHqsf2Vi0.net] 関数単位で切り出す場合はimpl TraitやBox<dyn Trait>使った方が良いと思う 実装の詳細が型として露出してしまうのはよろしくないし 何より長い型を書き下すのはめんどくさい
179 名前:デフォルトの名無しさん (ワッチョイ d3c9-tb1I) [2023/01/13(金) 00:49:21.00 ID:Eg8x4Zf+0.net] >>176 いやExactがFilterかどうかが分からないんだ。自信が無い https://docs.rs/warp/latest/warp/filters/path/struct.Exact.html https://docs.rs/warp/latest/warp/trait.Filter.html ↑2つを見ても、ExactがFilterをimplしているとは書いてないんだ 知ってたらマジで教えてほしいんだが、どこ見ればいいの? >>178 そう思うのは人情だが、じゃあどういう型の関数にすればいいのかって話 ググらずに分かる?俺は分からなかった
180 名前:デフォルトの名無しさん [2023/01/13(金) 01:52:07.98 ID:USdCnak/0.net] >>179 非公開の(だけど実装が漏れている)FilterBaseトレイトを介してFilterを実装してるんだね…… FilterBaseが公開されていればExactのblanket implementationsに出てくるはず 同じことは指摘されているが放置されている模様 https://github.com/seanmonstar/warp/issues/742
181 名前:デフォルトの名無しさん mailto:sage [2023/01/13(金) 20:16:02.99 ID:Eg8x4Zf+0.net] もしかして特段に分かりづらい構造だったのかWarp
182 名前:デフォルトの名無しさん mailto:sage [2023/01/13(金) 21:03:44.68 ID:4YqzJ2Gc0.net] Sealed TraitっていうユーザーにTraitを実装させないための一般的なパターンなんだけど privateなTraitはドキュメントには現れないのでExactがFilterBaseを実装してることを確かめたければソースを見るしかない でも関数や構造体の説明にFilterだよって書いてるんだからまずはそこからじゃないか? path()「Create an exact match path segment Filter.」 Exact「A Filter matching an exact path segment.」
183 名前:デフォルトの名無しさん [2023/01/14(土) 03:14:01.24 ID:4QhVLL220.net] いや型の説明がコメントにしか無いかったら疑うのが基本じゃないか…? 説明にある通りの使い方はできるけど、何故そう使えるのか分からない、となった上での話 前にもちらっと書いたところもそうなんだけど、impl Filterを返す関数のシグネチャも独力だと分からなかったんだよ。もっと情報の少ないクレートでやる必要が出てきたら詰んじゃう