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
6 名前:デフォルトの名無しさん mailto:sage [2018/01/09(火) 09:45:01.64 ID:9pH3pf0PM.net] アンチスレのほうが伸びてるやん 枯れ木も山の賑わい
7 名前:デフォルトの名無しさん mailto:sage [2018/01/09(火) 11:34:47.34 ID:mVHM72Ck0.net] >>3 cglab.ca/%7Eabeinges/blah/too-many-lists/book/ 読めるようになってるな。
8 名前:デフォルトの名無しさん [2018/01/12(金) 20:30:43.24 ID:r1exnGKH0.net] 教えてください VecのDisplay::fmtをカスタマイズしたくて type MyType<T> = (Vec<T>); impl std::fmt::Display for MyType { }
9 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 20:43:39.15 ID:r1exnGKH0.net] 申し訳ありません 途中送信してしまいました コードをplaygroundに移しました https://play.rust-lang.org/?gist=10bd65d0bfaf8b5117399b18bd8eb0d2 VecのDisplay::fmtをカスタマイズしたくて上の様にMyTypeを作成したのですが Vecのメソッド委譲するためのコードを手書きする作業が煩雑になって困っています 何か上手い回避策は無いでしょうか?
10 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 21:23:37.23 ID:B4BnwQ220.net] >>9 私も初心者で分からないですが最終的に何がしたいんでしょうか?
11 名前:9 mailto:sage [2018/01/12(金) 21:44:35.31 ID:r1exnGKH0.net] >>10 レスどうもです Vec(他標準 struct)のDisplay::fmt出力をカスタマイズしたいんです 例えば ・要素数が多い場合、最初の数個を出力して残りを省略するとか ・要素の出力が長くなる場合、適当なところで改行するとか ・インデントを受け付けてネストしてる場合は改行とインデントで整形するとか その上でVecのインターフェースをそのまま使いたいんですが >>9 のように新規の構造体を作る場合 手書きで委譲せねばならず どうにか上手く出来ないもんかな……と
12 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 22:44:10.61 ID:B4BnwQ220.net] >>11 その用途ならVecに別な名前のメソッドを直接implしちゃってそっち呼び出せばいいような気がしたんですが println!("{}", v.my_fmt()); みたいに
13 名前:デフォルトの名無しさん mailto:sage [2018/01/12(金) 23:39:08.93 ID:XT/5sCZ8x.net] >>9 https://play.rust-lang.org/?gist=eec6671ba201493eb61891447824b92f&version=stable DerefとDerefMutを実装するといい。 ↓にあるDeref Coarcionっていうコンパイラの機能で、x: MyType<T>に対し、&xが&MyType<T>とも&Vec<T>ともみなしてくれるようになる https://doc.rust-lang.org/book/second-edition/ch15-02-deref.html#implicit-deref-coercions-with-functions-and-methods 更に追加でIntoとFromも簡単に実装できるから不自由は無くなるはず
14 名前:9 mailto:sage [2018/01/12(金) 23:49:12.53 ID:r1exnGKH0.net] >>12 ごもっともです self.0に委譲するマクロが上手く書けなかった経験があり それに引きずられて本質を見失ってました コードを整理していったらいけそうな感じになりました https://play.rust-lang.org/?gist=960819f1fb1b5f9988a1c58cab2b1b9e&version=stable ありがとうございます >>13 ああ、なるほど Derefは思い至ってませんでした メソッド委譲の解決になりそうで助かります こちらもありがとうございます
15 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 07:02:43.11 ID:PvY+igkm0.net] なるほど
16 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 10:23:49.57 ID:PvY+igkm0.net] https://stackoverflow.com/questions/45086595/is-it-considered-a-bad-practice-to-implement-deref-for-newtypes ぐぐったらこんな議論も。
17 名前:デフォルトの名無しさん mailto:sage [2018/01/13(土) 19:09:49.17 ID:zJNsIIn8x.net] >>16 の論旨は「MyType<T>は常にVec<T>として扱われても問題ないか?あるならDerefはおすすめしない」だと思うけど、 今回の場合はむしろMyType<T>は特別なことが無い限りVec<T>として使いたいんじゃないの?
18 名前:9 mailto:sage [2018/01/13(土) 20:15:02.44 ID:5hbvxbkG0.net] >>16 読みました 見覚えのあるピンク玉はrust playgroundの中の人でした 「smart_ptrぐらいの同一性がある場合にはDerefが必要だけど strにDeref<Taget = [u8]>が無いように Derefだとやりすぎな場合もあるからdelegate構文欲しいよね」 ってなとこでしょうか strの例は「替わりにas_bytesがあるよ」ということかなと strとsliceとか他のライブラリを眺めた個人的な結論としては has_aならAsRef、is_aならBorrowをimplして受ける関数で使い易くしておくのが Rust的な落とし所なのかなーといった印象です AsRef, Borrow, Derefの使い分けは宣言的にプログラマの裁量に任されてる感じ よくよく考えれば自分のコードにもas_xxx, as_xxx_mutが散見されている現状なので Mytypeにもas_vecを書けばそれでも良かったような気がします >>17 自分のケースの場合はそもそもMyTypeがいらなくなってしまったもので Derefはオーバーパワーかなと思ってます とはいえ smart_ptrのように扱うならDerefが有用ということが 知見として学べたので 大変ありがたかったです
19 名前:デフォルトの名無しさん mailto:sage [2018/01/14(日) 07:18:07.14 ID:oPMCDJ2h0.net] >>17 このスレを読んでる人に情報共有してるだけだよ
20 名前:デフォルトの名無しさん mailto:sage [2018/01/14(日) 15:21:10.36 ID:oPMCDJ2h0.net] 元スレやばいね
21 名前:デフォルトの名無しさん mailto:sage [2018/01/18(木) 23:48:10.50 ID:HIA6V+PM0.net] オライリー届いた。 分厚すぎてわろたわ。読むの大変そう。
22 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 13:41:23.22 ID:P6u1lvxj0.net] dyn Traitが入ってしばらくしたらBox<Trait>はdisconになるの?
23 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 14:45:47.97 ID:gyvOdhISa.net] deprecated扱いになって警告を出し次のepochで削除とかだったと思う
24 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 17:30:10.02 ID:P6u1lvxj0.net] impl Trait入ったらそもそもほとんど使わなくなるから気にしなくていいのか。
25 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 17:48:02.51 ID:gyvOdhISa.net] 使うケース減るのもそうだけどepochで機能削除する場合はソースコードの変換ツールが提供されるらしい あと古いepochのソースはそのままコンパイルできるらしいから特に対応不要らしい だから新しいepochにしか入っていない機能を使いたいcrateとかでなければ何もしなくても困らないはずだし その場合でも変換ツール通せば簡単に対応できるはず
26 名前:デフォルトの名無しさん mailto:sage [2018/01/29(月) 21:18:10.28 ID:ltX/HOsy0.net] なるほど
27 名前:デフォルトの名無しさん mailto:sage [2018/01/31(水) 12:10:20.24 ID:/dPh0x6ka.net] 2018年のロードマップのRFC出てる https://github.com/rust-lang/rfcs/pull/2314 impl Traitついに安定化されるのか
28 名前:デフォルトの名無しさん mailto:sage [2018/01/31(水) 19:12:32.86 ID:hEoUgsMbM.net] epoch releaseってのはどういうことなんだってばよ?
29 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 00:05:25.67 ID:VmMujkXk0.net] map: BTreeMap<K,V>で、keyが無かったら挿入、あったら格納されてる値vに応じて新しい値new_vに更新するか決めるってやりたいんだけど、 let v = map.entry(key).or_insert(new_v); if ... { *v = new_v; } よりもっと綺麗な書き方ある?
30 名前:デフォルトの名無しさん mailto:sage [2018/02/04(日) 01:05:26.32 ID:qOX3lZ+s0.net] and_modify() ?
31 名前:デフォルトの名無しさん mailto:sage [2018/02/06(火) 16:05:20.14 ID:95WYpRcW0.net] https://webassembly.studio/ CやRustでWebAssemblyできるOnlineIDEだそうな
32 名前:デフォルトの名無しさん mailto:sage [2018/02/07(水) 00:06:02.34 ID:z0wRGtUY0.net] Rust Never Sleeps: Community Grows, Eclipse-Based IDE Planned https://adtmag.com/articles/2018/02/01/rust-grows.aspx
33 名前:デフォルトの名無しさん mailto:sage [2018/02/07(水) 10:02:06.97 ID:tqZIcWxZM.net] >>31 ええやん
34 名前:デフォルトの名無しさん mailto:sage [2018/02/07(水) 10:05:39.88 ID:tqZIcWxZM.net] >>32 eclipseはいらんなあ
35 名前:デフォルトの名無しさん mailto:sage [2018/02/07(水) 21:39:04.86 ID:HRWlDALX0.net] オライリー本読んだ?
36 名前:デフォルトの名無しさん mailto:sage [2018/02/10(土) 17:28:13.69 ID:EA1ZzrT70.net] wasmってまだプリミティブすぎて使い物にならないのかと思ってたけど wasm-bindgen すげえな もうここまでできるのか
37 名前:デフォルトの名無しさん mailto:sage [2018/02/10(土) 18:48:11.24 ID:YRtNT72/0.net] Rustすごい! takahito takabayashiさんのツイート: "ファミコンのエミュレータをRust / WebAssembly で書き直した https://twitter.com/tatakaba/status/961532612723511296
38 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 12:24:11.46 ID:4ugd2bUvF.net] 梅手伝い
39 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 19:13:38.83 ID:g6Vhygc80.net] 苦労して書き直しても全然パフォーマンス上がらないのな… ぐうの音もでないほど効果があるユースケースってなんなんだ
40 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 21:38:29.65 ID:tHO1NU6P0.net] アルゴリズムが変わらないならそう変わらんのじゃないか 他人のひどいコードならともかく、同じ人が小規模なプログラムを書き直す程度だと特に C/C++からRustへ書き直して速度が上がったって話はあんま聞いたことが無い 速いネイティブライブラリを言語に組み込んでるJuliaとかなら、書き直すだけで速度上がったって話はちらほら pythonだったらnumpy使った方が楽でいいとかも
41 名前:デフォルトの名無しさん mailto:sage [2018/02/12(月) 22:31:51.98 ID:g6Vhygc80.net] いやだってjavascriptだぜ?アルゴリズムの問題か?
42 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 11:38:21.89 ID:L9OfLhwQ0.net] リリースビルドしてないとか
43 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 13:55:22.76 ID:U6RMU7ria.net] 結局本スレどこ?
44 名前:デフォルトの名無しさん mailto:sage [2018/02/13(火) 14:01:02.73 ID:L9OfLhwQ0.net] ここ
45 名前:デフォルトの名無しさん mailto:sage [2018/02/14(水) 10:32:44.85 ID:Sny1AUMZ0.net] c++もそうだがコンパイラに機能を詰め込むってのがそもそも筋が悪い
46 名前:デフォルトの名無しさん [2018/02/14(水) 16:35:43.73 ID:wToAct7f0.net] >>45 どういうこと?じゃあどうすればいいの?
47 名前:デフォルトの名無しさん mailto:sage [2018/02/14(水) 18:27:22.03 ID:KakS2s960.net] asm!だよ
48 名前:デフォルトの名無しさん mailto:sage [2018/02/14(水) 19:14:50.70 ID:Sny1AUMZ0.net] >>46 ライブラリ、もしくはツールに任せる。
49 名前:デフォルトの名無しさん [2018/02/15(木) 02:06:38.25 ID:mcN0VL7z0.net] >>48 やっぱりちょっと分からないな。 RustやC++のどの辺がコンパイラに機能を詰め込んでると思うの? ライブラリorツールに任せるってのもどの辺を任せたいのかな? 話がザックリし過ぎて言いたいことがよく分からないんだが。
50 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 14:13:53.00 ID:exgu/6oKM.net] プリプロセッサマクロのことかな?あとは型システムとかGCのことかな?ライブラリに任せるの意味がよくわからんが…
51 名前:デフォルトの名無しさん mailto:sage [2018/02/15(木) 17:01:00.96 ID:OS8rqPvzd.net] C++はコンパイラの方もだけど標準ライブラリでの機能実現も相応に多くて結果ソースの記述が煩雑になっているのは既知の事実でしょう ライブラリや実装に任せた結果APIの統一が取れなくなって結局細かな仕様策定を余儀なくされたSchemeを見ても銀の弾丸でない事は明らかだよね それに出来る事を増やすという点においてライブラリは有用だけど変数の不変性や型システムのような制限をする事に関してはコンパイラによしなにしてもらうより他ないよ
52 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 01:22:14.41 ID:W1XJdyx10.net] ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
53 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 07:39:34.93 ID:455TYoTb0.net] やっとstableでrustfmtできるようになったな
54 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 11:54:10.92 ID:sOKjApWVa.net] どうせ明日にはまたnightly限定になってるよ
55 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 14:44:20.68 ID:o2oszjec0.net] 最近のアップデートつまんねえなあ
56 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 15:41:33.96 ID:xYOe+Cvi0.net] >>45 は言語仕様の追加、更新が気に入らないんじゃないかな try!の代わりに?なんて以ての外だ、みたいな?それ以外に思い付かなかったけど 1.0以前に@や~を削除してライブラリにぶん投げた辺りは希望通りな気がする 基本的に電池入りじゃないRustはライブラリやマクロの代わりの言語仕様の追加じゃなく より効率的なバイナリを吐くための言語仕様の追加が多いイメージだけどなぁ、impl Traitとか
57 名前:デフォルトの名無しさん [2018/02/16(金) 17:59:54.40 ID:ItA0QsEV0.net] >>56 あー、そういうこと。?記法は確かに若干違和感あったかもな。 でも実際、あれは便利なんだよなぁ。 File::open(path)?.read_to_string(&mut buf)?みたいに繋げられるから。 try!(try!(File::open(path)).read_to_string(&mut buf))は読みづらい。 かといって、 let mut file = try!(File::open(path)); try!(file.read_to_string(&mut buf)) みたいに2行に分けるのも面倒だし、無駄なローカル変数も出来れば避けたい。 結局、あれが妥当な判断だったと思うけど。 まぁ、stableにする必要あったのか?ってところで賛否両論あるかもね。
58 名前:デフォルトの名無しさん mailto:sage [2018/02/16(金) 19:47:30.32 ID:o2oszjec0.net] box キーワードは何時 stable になるんだ?
59 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:13:34.80 ID:J1S1NncJ0.net] boxキーワードはどういう時にうれしいのかがわからん
60 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 11:16:00.80 ID:kwPbHgTn0.net] 明らかに二行に分けた方が読みやすいわけだが。 新しい機能マンセー厨ってそういう感覚の狂いについて無自覚過ぎんだよね。
61 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 13:27:59.06 ID:Nh87YVhF0.net] 俺も違和感はあるけど、多くの人が賛意を出して採用されたんだから >>60 や俺の感覚が狂ってるんじゃね?自身の感覚の狂いって当然ながら無自覚過ぎんよ boxは在り様の総意を取るの面倒だし、目下はBoxで運用できてるしで、いつまでもstableに来なさそう ヒープを多用したい人には文法にあればありがたいんだろうけど、そもそもヒープが好まれんしのう
62 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 14:16:54.60 ID:+W6LcK0d0.net] boxっていきなりヒープにメモリ確保されるのが保証されたりするんじゃないの? 今はコンパイラ次第じゃん
63 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 14:41:36.65 ID:IpKTSZVJ0.net] ironって今メンテされてないのか 最近のweb FWはrocketの方が人気なんかな nightly専用だからまだ手を付けてないんだけど
64 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 20:32:28.58 ID:QFQHB0DO0.net] >>59 https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/box-syntax-and-patterns.html > このように書くことでパフォーマンスを犠牲にすることなく、柔軟性を確保することができます。 知らないの?
65 名前:デフォルトの名無しさん mailto:sage [2018/02/17(土) 23:42:00.44 ID:9NiO1PZdF.net] それはInPlaceとかPlacerがあればよくてbox inはただのsyntax sugarでは
66 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 08:04:09.95 ID:SMMCMA600.net] 分解のほうは新しいの?
67 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 08:27:52.42 ID:5lvSpjte0.net] 分解の方がよほどsyntax sugarじゃないのかいな NightlyのInPlace, Placer使わなくても、Stableの環境でmacro使って実現出来そう
68 名前:デフォルトの名無しさん mailto:sage [2018/02/18(日) 10:49:08.55 ID:/vdt0GUK0.net] boxって名前はBox<T>以外に使う場面で綺麗に見えない place <- exprは代入みたい
69 名前:デフォルトの名無しさん [2018/02/20(火) 18:44:44.84 ID:QamN8HfjM.net] tokio-coreなくなるんか 一通り組み上がった後の悲しいニュース
70 名前:デフォルトの名無しさん mailto:sage [2018/02/20(火) 21:05:12.64 ID:n66ylLug0.net] まじか、ちょっと辛いな 依存してるライブラリも結構あるよね
71 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 00:49:13.91 ID:s9stOBAB0.net] ワッチョイなしの方アンチが暴れてる
72 名前:デフォルトの名無しさん [2018/02/21(水) 00:56:09.93 ID:kjg0KAFU0.net] tokio系列のやつってtokioとかtokio-coreとかtokio-ioとかtokio-protoとか複数あってよく分からんのよね tokio-ioのリポジトリにはtokioに移動したからもう使うなって書いてあるし tokio-coreは移動じゃなくて廃止予定って書いてある… tokio-protoはそのまま?tokio-timerとかtokio-serviceとかよく知らんリポジトリもあるし… 誰か各クレートの特徴(役割)と関係性を教えてくれ
73 名前:デフォルトの名無しさん mailto:sage [2018/02/21(水) 19:02:38.89 ID:ariB2x93M.net] >>71 あっちは、アンチが立てたキチガイ専用スレだからいいんだよ
74 名前:デフォルトの名無しさん [2018/02/21(水) 19:11:26.04 ID:2b1o4F67M.net] コミットを追うとtokio-coreはtokioに変わったように見える tokio-core=tokioでtokioの本体 tokio-ioはtokio-coreを使って非同期ioを実装したものだったがしゃらくせえのでtokio-coreに取り込んだのかな tokio-protoはtokio-coreを使ってネットワークプロトコルを実装したものだったがしゃらくせえからtokio-coreに取り込んだのかな つまり tokio = tokio-core + tokio-io + tokio-proto か?
75 名前:デフォルトの名無しさん [2018/02/21(水) 23:28:42.27 ID:J5LO2Gvl0.net] [] [[[ [[ [] ][ [] [ ] [] ][]] [[[ [] }
76 名前:デフォルトの名無しさん mailto:sage [2018/02/22(木) 13:48:53.41 ID:H839Tp+80.net] tokio-protoとtokio-serviceってtrait宣言が主体のインターフェース定義クレートだったような? 前者はクライアント、後者はサーバに適したインターフェースが定義されてた覚えがある io, timer, cpupoolなんかはユーティリティ機能が実装されてたよな 統合の基準はどこかで議論されたんだろうけど、どこでやってたのかな
77 名前:デフォルトの名無しさん mailto:sage [2018/02/28(水) 17:58:52.09 .net] 【お知らせ】Packt出版より Network Programming with Rust が発売されました。
78 名前:デフォルトの名無しさん [2018/03/07(水) 19:47:20.60 ID:LRCrToXv0.net] https://play.rust-lang.org/?gist=cb511b34bc3ffbb43b8589a24156337a&version=stable let mut foo = Foo{ a:0, b:0, c:0 }; let aaa = ["5", "432", "3"].iter().flat_map(|i| i.parse::<u32>()).collect::<Vec<_>>(); foo.a = aaa[0]; foo.b = aaa[1]; foo.c = aaa[2]; Rustってこれ以外に書き方ありませんか? tupleでやってみるとleft-hand of expression not validと出ました
79 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 20:33:15.97 ID:sBnyF32KM.net] だめなコードはらないと何がしたいか分かりません
80 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 20:41:08.80 ID:jzt3Aumo0.net] だよなw 何をしたいのか分からんよなw
81 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 21:26:04.44 ID:LRCrToXv0.net] >>79 大量のフィールドに値を入れるのって 一行一行書くしかありませんか?
82 名前:デフォルトの名無しさん mailto:sage [2018/03/07(水) 21:29:17.37 ID:jzt3Aumo0.net] 一行にしたいなら foo = Foo { a: aaa[0], b: aaa[1], c: aaa[2] }; でも良いだろ。 部分書換なら foo = Foo { a: aaa[0], .. foo }; とかもある。
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