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

1デフォルトの名無しさん (ワッチョイ 83b3-KDL3)2017/12/24(日) 18:27:01.98ID:EGydBhQv0
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

67デフォルトの名無しさん (ワッチョイ ffeb-moIH)2018/02/18(日) 08:27:52.42ID:5lvSpjte0
分解の方がよほどsyntax sugarじゃないのかいな
NightlyのInPlace, Placer使わなくても、Stableの環境でmacro使って実現出来そう

68デフォルトの名無しさん (ワッチョイ 97b3-28Ds)2018/02/18(日) 10:49:08.55ID:/vdt0GUK0
boxって名前はBox<T>以外に使う場面で綺麗に見えない
place <- exprは代入みたい

69デフォルトの名無しさん (ブーイモ MMcf-jtfM)2018/02/20(火) 18:44:44.84ID:QamN8HfjM
tokio-coreなくなるんか
一通り組み上がった後の悲しいニュース

70デフォルトの名無しさん (ワッチョイ bfe4-Ql/f)2018/02/20(火) 21:05:12.64ID:n66ylLug0
まじか、ちょっと辛いな
依存してるライブラリも結構あるよね

71デフォルトの名無しさん (ワッチョイ 9ff7-QEWT)2018/02/21(水) 00:49:13.91ID:s9stOBAB0
ワッチョイなしの方アンチが暴れてる

72デフォルトの名無しさん (ワッチョイ ff98-e/1Q)2018/02/21(水) 00:56:09.93ID:kjg0KAFU0
tokio系列のやつってtokioとかtokio-coreとかtokio-ioとかtokio-protoとか複数あってよく分からんのよね
tokio-ioのリポジトリにはtokioに移動したからもう使うなって書いてあるし
tokio-coreは移動じゃなくて廃止予定って書いてある…
tokio-protoはそのまま?tokio-timerとかtokio-serviceとかよく知らんリポジトリもあるし…
誰か各クレートの特徴(役割)と関係性を教えてくれ

>>71
あっちは、アンチが立てたキチガイ専用スレだからいいんだよ

74デフォルトの名無しさん (ブーイモ MMcf-jtfM)2018/02/21(水) 19:11:26.04ID:2b1o4F67M
コミットを追うと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デフォルトの名無しさん (ワッチョイ 97b3-T3WU)2018/02/21(水) 23:28:42.27ID:J5LO2Gvl0
[] [[[ [[ [] ][ [] [ ] [] ][]] [[[ [] }

76デフォルトの名無しさん (ワッチョイ fc23-Yogk)2018/02/22(木) 13:48:53.41ID:H839Tp+80
tokio-protoとtokio-serviceってtrait宣言が主体のインターフェース定義クレートだったような?
前者はクライアント、後者はサーバに適したインターフェースが定義されてた覚えがある
io, timer, cpupoolなんかはユーティリティ機能が実装されてたよな

統合の基準はどこかで議論されたんだろうけど、どこでやってたのかな

77デフォルトの名無しさん2018/02/28(水) 17:58:52.09
【お知らせ】Packt出版より Network Programming with Rust が発売されました。

78デフォルトの名無しさん (ワッチョイ 67b3-C/rw)2018/03/07(水) 19:47:20.60ID:LRCrToXv0
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と出ました

だめなコードはらないと何がしたいか分かりません

80デフォルトの名無しさん (ワッチョイ df9f-UDKA)2018/03/07(水) 20:41:08.80ID:jzt3Aumo0
だよなw 何をしたいのか分からんよなw

81デフォルトの名無しさん (ワッチョイ 67b3-y/90)2018/03/07(水) 21:26:04.44ID:LRCrToXv0
>>79
大量のフィールドに値を入れるのって
一行一行書くしかありませんか?

82デフォルトの名無しさん (ワッチョイ df9f-UDKA)2018/03/07(水) 21:29:17.37ID:jzt3Aumo0
一行にしたいなら
foo = Foo { a: aaa[0], b: aaa[1], c: aaa[2] };
でも良いだろ。
部分書換なら
foo = Foo { a: aaa[0], .. foo };
とかもある。

83デフォルトの名無しさん (ワッチョイ 7e95-gb/e)2018/03/08(木) 01:34:04.75ID:4NfI3sqt0
1.24.1は何のリリース?

84デフォルトの名無しさん (ワッチョイ beeb-YOOT)2018/03/11(日) 12:10:25.91ID:eSLd4gfv0
朗報: ついにウェブプラットフォームでRustが速度性能トップを取る
https://www.techempower.com/benchmarks/#section=data-r15&hw=ph&test=plaintext

なお、JSON操作を伴うとJavaにも劣る模様
ツリー制御が不得意すぎて笑うわ

85デフォルトの名無しさん (ワッチョイ 23b3-I9YF)2018/03/11(日) 13:43:13.82ID:Q5vGc4iJ0
JSON serializationはそんなに悪くないんじゃね?tokio-minihttpで96.2%出てる。
それよりSingle QueryとMultple Queryが遅いのが問題じゃね?

86デフォルトの名無しさん (ワッチョイ 2f97-6XBc)2018/03/11(日) 17:59:47.19ID:9uw0Jco60
serdeでシリアライズだけするぶんにはjavaの1.4倍くらい早かったんだけどなあ(俺調べ)

87デフォルトの名無しさん (ワッチョイ 1f0e-kj1m)2018/03/17(土) 21:44:59.24ID:zUTKt+H50
Rust book first editionからの変更知りたいんだけどバージョン差分どこでまとめられてる?

88デフォルトの名無しさん (ワッチョイ 1f0e-kj1m)2018/03/17(土) 21:47:17.89ID:zUTKt+H50

89デフォルトの名無しさん (ブーイモ MM5b-FuQQ)2018/03/18(日) 07:04:56.79ID:esGNO3D8M
1.24.1てなんなんだろ

90デフォルトの名無しさん (ワッチョイ 1bd2-SmQe)2018/03/18(日) 20:50:19.82ID:M8FazHkP0
>>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デフォルトの名無しさん (ワッチョイ 2bb3-ogOK)2018/03/18(日) 21:36:06.49ID:kfSBwJmk0
Iterator::mapに渡すクロージャ内で、クロージャ内の変数への参照を持つstructを返したい時ってどう対処するのが正解ですか?
https://play.rust-lang.org/?gist=a15e0dfa10339570fef5b9225761a9f0&version=stable

92デフォルトの名無しさん (ワッチョイ bdb3-kj1m)2018/03/18(日) 23:09:22.36ID:UNqGf23T0
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デフォルトの名無しさん (ワッチョイ 2bb3-yeMC)2018/03/19(月) 07:39:54.89ID:bmK7HIBH0
>>92
ありがとうございます
仮引数mのライフタイムはmain関数が抜けるまでだから通るということで合っていますか
またVecではなくIterator::Mapだと駄目な理由は、Iterator::Mapはcollectされるまでクロージャが実行されないから…とかでしょうか

94デフォルトの名無しさん (ワッチョイ bdb3-kj1m)2018/03/19(月) 13:44:00.51ID:aUxUFBJe0
>>93
仮引数mのライフタイムはクロージャ内なのは変わらないよ。>>92は仮引数を参照じゃなく消費してるから通る(>>92の&mじゃなくてmで良い)
クロージャが実行されないから、ではなく、mochiの値が消費されてるのにその参照を持たせようとしてるから駄目
試しに>>91のコードでmochi.map(|m| { 0 })とか書いて、mochiをprintln!に渡してみようとすると怒られるよ。もう使ってるって。

そこらへんの細かいルールを覚えるの大変だし、コンパイラもまだ分かりやすいエラーメッセージ吐いてくれないから、
・参照を使うときは、参照元をちゃんと生かしておくこと
・参照を使った構造体は、元の値を修飾(見方を変える、新しい機能を持たせる等)するようなパターンに限定すること
を守るようにした方がいいよ

95デフォルトの名無しさん (ワッチョイ 2bb3-yeMC)2018/03/19(月) 21:04:17.46ID:bmK7HIBH0
>>94
「消費したものの参照を持たせるのは駄目」と「消費しているから通る」はそれぞれはわかる気がするのですが、両方となると…
前者の「消費したもの」と後者(main関数中生き続けるMochiのベクトル)は別物だと思うのですが、
前者で駄目な理由は関数中生き続けるMochiがない(mapを呼び出しただけでは駄目)ということですか?

96デフォルトの名無しさん (ワッチョイ bdb3-kj1m)2018/03/19(月) 23:26:36.74ID:aUxUFBJe0
「消費されるので通る」じゃ言葉足らずでした。「参照じゃなく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デフォルトの名無しさん (ワッチョイ abb6-ogOK)2018/03/20(火) 13:21:28.84ID:RDB2KieC0
>>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デフォルトの名無しさん (ワッチョイ bdb3-kj1m)2018/03/20(火) 14:30:32.82ID:UUyTwokV0
大きい文字列を扱うから参照にしたいってのは普通にあるし分かるけど
Hitoが&MochiでなくMochiをメンバに持つようになっても文字列のコピーは行われないよ

自分なら>>97のget_too_many_str()が返す&strの元を誰が保持するのかをまず気にする
そこをしっかり把握してれば文字列のコピーは最低限になるはずだから

99デフォルトの名無しさん (ワッチョイ eb2d-4xVl)2018/03/20(火) 16:38:27.06ID:P+YmZBwi0
>>97
んー、自分なら そこだけに使うMochiCow型作ってでも
ajiの型をCowにして凌ぐかな

100デフォルトの名無しさん (ワッチョイ 2bb3-yeMC)2018/03/21(水) 11:43:51.64ID:cBTkQiaM0
&strの元もloop内の変数が持っています
hのvecを作るにはコピーは避けられないようですね…
&strからStringに変えたところhvec.push(h)してもエラーにはなりませんでしたが、
スコープを抜けたはずの変数が使える理由ってどこかに書いていますか?

101デフォルトの名無しさん (ワッチョイ bdb3-kj1m)2018/03/21(水) 14:53:30.44ID:9rI6JIRt0
そりゃloop内の変数hから、loop外のhvecに所有権が移動したから

頭の中に入れておける物なんて極わずかだし、場当たり的にdoes not live longエラーに対処するのは大変なので、
・値の所有者はどの変数であるべきか
・データ構造はどうあるべきか
という観点だけ念頭にいれて、「性能を稼ぐために参照を使おう」って考えを一旦外すとスッキリするよ

102デフォルトの名無しさん (ワッチョイ ff9f-e5q7)2018/04/15(日) 17:27:59.27ID:YDqAu+LL0
こっちが本スレと聞いて

103デフォルトの名無しさん (ワッチョイ cfe8-2eiy)2018/04/15(日) 21:42:18.86ID:eccSQZbu0
しかしここには俺はいない

104デフォルトの名無しさん (ワッチョイ cfe8-2eiy)2018/04/15(日) 21:42:37.31ID:eccSQZbu0
まちがえた
俺しかいない

105デフォルトの名無しさん (ワッチョイ ffd2-EWy0)2018/04/15(日) 22:10:33.68ID:33fSNzq50
俺もいるぞ

106デフォルトの名無しさん (アウアウエー Sadf-Mqc2)2018/04/15(日) 22:44:53.22ID:UX4y5Mn1a
てst

107デフォルトの名無しさん (ワッチョイ cfe8-2eiy)2018/04/16(月) 07:13:50.32ID:pzKlDNeX0
まともな話題はslackいっちゃうのかな。

匿名で喋りたいのはアンチ向きか

108デフォルトの名無しさん (ワッチョイ a364-0hQO)2018/05/08(火) 02:44:07.65ID:kruQSPFC0
別にアンチって訳じゃないけど、コンパイルが遅すぎる(特に最適化掛けた場合に)のはどうかと思う。
実行が速くてもその生成に時間が掛かれば無意味でしょう……。

109デフォルトの名無しさん (ワッチョイ 8a2d-pRx+)2018/05/08(火) 05:31:20.68ID:4Vs0GKvV0
>>108
Rustで組んだ新Firefoxの動作が2倍ほど速くなったのは無意味?

110デフォルトの名無しさん (ワッチョイ 1f97-q47z)2018/05/08(火) 07:00:09.03ID:EnN/pyur0
逆なら理解できるけど

まあコンパイルは遅いわな。
ていうかcargoの仕組みが問題なだけか?

112デフォルトの名無しさん (ワッチョイ 0bb3-XZ5U)2018/05/08(火) 20:14:50.84ID:T0pMALEX0
rustcで単一ファイルだけコンパイルすると結構速いなと思った
cargoって警告無視のオプション(-Awarning)の有無でも一からビルドしようとしたりちょくちょくお粗末

113デフォルトの名無しさん (ワッチョイ f564-n6Dg)2018/05/10(木) 20:35:06.28ID:zLx1ZI770
なんかRustってテスト用と製品用で別々の最適化を施せるんじゃなかったっけ。
俺は自分の為だけにRustを使ってるのであまり気にしたことがないが。

https://blog.rust-lang.org/2018/05/10/Rust-1.26.html

impl Trait来たから
久しぶりにさわってみるかな

115デフォルトの名無しさん (JP 0Ha1-pXmg)2018/05/23(水) 12:09:39.17ID:6kVmIohDH
ほとんどc++に見えるの俺だけ?

116デフォルトの名無しさん (ワッチョイ 5523-/w+O)2018/05/23(水) 12:29:18.87ID:4/oN1Bt60
みんな言ってる

117デフォルトの名無しさん (ワッチョイ 89fa-9WOx)2018/05/23(水) 23:15:50.94ID:Au5e7VGg0
確実にどんな人でも可能なネットで稼げる情報とか
念のためにのせておきます
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

C717P

新着レスの表示
レスを投稿する