[表示 : 全て 最新50 1-99 101- 201- 301- 2ch.scのread.cgiへ]
Update time : 09/03 20:58 / Filesize : 75 KB / Number-of Response : 305
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

プログラミング言語 Rust 4【ワッチョイ】



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

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を返す関数のシグネチャも独力だと分からなかったんだよ。もっと情報の少ないクレートでやる必要が出てきたら詰んじゃう

184 名前:デフォルトの名無しさん mailto:sage [2023/01/19(木) 13:09:59.92 ID:CHvJHSS40.net]
[T]と[T; N]があるように
strに対するSizedなstr<N>とかできんかね

185 名前:デフォルトの名無しさん mailto:sage [2023/01/29(日) 03:46:54.24 ID:qSgQK/Ke0.net]
ttps://doc.rust-lang.org/beta/unstable-book/language-features/yeet-expr.html

名前の元ネタがよくわからん

186 名前:デフォルトの名無しさん mailto:sage [2023/01/29(日) 04:28:40.21 ID:iZgCgX3R0.net]
>>185
trY Early-ExiT で yeet じゃない?
experimental だからわざとクソ命名してそう。

187 名前:デフォルトの名無しさん mailto:sage [2023/01/29(日) 08:29:44.05 ID:VTBemk9l0.net]
意味合いとしては
> Yeet is a slang phrase meaning to throw with force
とのことらしい
https://internals.rust-lang.org/t/syntax-for-returning-early-with-an-error/14181
https://www.urbandictionary.com/define.php?term=Yeet

yeetの初出はここらしい
https://mobile.twitter.com/josh_triplett/status/1248658754976927750
命名に関するbikeshedを避けつつ機能を実験するために導入するみたいね
(deleted an unsolicited ad)



188 名前:デフォルトの名無しさん mailto:sage [2023/02/04(土) 16:11:28.39 ID:4OrKEijd0.net]
Servoプロジェクトが再始動
https://servo.org/blog/2023/01/16/servo-2023/
https://servo.org/blog/2023/02/03/servo-2023-roadmap/

189 名前:デフォルトの名無しさん [2023/02/26(日) 21:57:18.73 ID:vJeOsMT8M.net]
新スレとして再利用と聞いてage






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<75KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef