X



プログラミング言語 Rust 4【ワッチョイ】
0001デフォルトの名無しさん (ワッチョイ 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
0005デフォルトの名無しさん (ワッチョイ 337f-G8t+)
垢版 |
2017/12/27(水) 10:23:26.96ID:TP7XdM/O0
製本?したものを上げてるサーバーが結構長いこと落ちてるね
1. cargo install mdbookでmdbookをインストール
2. git cloneで>>3のリポジトリを取ってくる
3. 取ってきたディレクトリでmdbookを実行
4. book/ にhtmlで製本されたものが出力される
ので、是非読んで欲しい。may not live longとかcannot moveとかで怒られまくってる人なら共感しながら読めるはず
0008デフォルトの名無しさん (ワッチョイ 392d-FSib)
垢版 |
2018/01/12(金) 20:30:43.24ID:r1exnGKH0
教えてください

VecのDisplay::fmtをカスタマイズしたくて
type MyType<T> = (Vec<T>);

impl std::fmt::Display for MyType {

}
0009デフォルトの名無しさん (ワッチョイ 392d-FSib)
垢版 |
2018/01/12(金) 20:43:39.15ID:r1exnGKH0
申し訳ありません 途中送信してしまいました
コードをplaygroundに移しました

https://play.rust-lang.org/?gist=10bd65d0bfaf8b5117399b18bd8eb0d2

VecのDisplay::fmtをカスタマイズしたくて上の様にMyTypeを作成したのですが
Vecのメソッド委譲するためのコードを手書きする作業が煩雑になって困っています

何か上手い回避策は無いでしょうか?
00119 (ワッチョイ 392d-FSib)
垢版 |
2018/01/12(金) 21:44:35.31ID:r1exnGKH0
>>10
レスどうもです
Vec(他標準 struct)のDisplay::fmt出力をカスタマイズしたいんです 例えば
・要素数が多い場合、最初の数個を出力して残りを省略するとか
・要素の出力が長くなる場合、適当なところで改行するとか
・インデントを受け付けてネストしてる場合は改行とインデントで整形するとか

その上でVecのインターフェースをそのまま使いたいんですが
>>9のように新規の構造体を作る場合 手書きで委譲せねばならず
どうにか上手く出来ないもんかな……と
0013デフォルトの名無しさん (アークセー Sxbd-YNmt)
垢版 |
2018/01/12(金) 23:39:08.93ID:XT/5sCZ8x
>>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も簡単に実装できるから不自由は無くなるはず
00149 (ワッチョイ 392d-FSib)
垢版 |
2018/01/12(金) 23:49:12.53ID:r1exnGKH0
>>12
ごもっともです
self.0に委譲するマクロが上手く書けなかった経験があり
それに引きずられて本質を見失ってました
コードを整理していったらいけそうな感じになりました
https://play.rust-lang.org/?gist=960819f1fb1b5f9988a1c58cab2b1b9e&;version=stable
ありがとうございます

>>13
ああ、なるほど
Derefは思い至ってませんでした メソッド委譲の解決になりそうで助かります
こちらもありがとうございます
0017デフォルトの名無しさん (アークセー Sxbd-YNmt)
垢版 |
2018/01/13(土) 19:09:49.17ID:zJNsIIn8x
>>16の論旨は「MyType<T>は常にVec<T>として扱われても問題ないか?あるならDerefはおすすめしない」だと思うけど、
今回の場合はむしろMyType<T>は特別なことが無い限りVec<T>として使いたいんじゃないの?
00189 (ワッチョイ 392d-FSib)
垢版 |
2018/01/13(土) 20:15:02.44ID:5hbvxbkG0
>>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が有用ということが
知見として学べたので 大変ありがたかったです
0025デフォルトの名無しさん (アウアウカー Sa33-jWYD)
垢版 |
2018/01/29(月) 17:48:02.51ID:gyvOdhISa
使うケース減るのもそうだけどepochで機能削除する場合はソースコードの変換ツールが提供されるらしい
あと古いepochのソースはそのままコンパイルできるらしいから特に対応不要らしい
だから新しいepochにしか入っていない機能を使いたいcrateとかでなければ何もしなくても困らないはずだし
その場合でも変換ツール通せば簡単に対応できるはず
0029デフォルトの名無しさん (ワッチョイ 57b3-skLA)
垢版 |
2018/02/04(日) 00:05:25.67ID:VmMujkXk0
map: BTreeMap<K,V>で、keyが無かったら挿入、あったら格納されてる値vに応じて新しい値new_vに更新するか決めるってやりたいんだけど、
let v = map.entry(key).or_insert(new_v);
if ... {
*v = new_v;
}
よりもっと綺麗な書き方ある?
0040デフォルトの名無しさん (ワッチョイ 99b3-bLbK)
垢版 |
2018/02/12(月) 21:38:29.65ID:tHO1NU6P0
アルゴリズムが変わらないならそう変わらんのじゃないか
他人のひどいコードならともかく、同じ人が小規模なプログラムを書き直す程度だと特に

C/C++からRustへ書き直して速度が上がったって話はあんま聞いたことが無い
速いネイティブライブラリを言語に組み込んでるJuliaとかなら、書き直すだけで速度上がったって話はちらほら
pythonだったらnumpy使った方が楽でいいとかも
0046デフォルトの名無しさん (ワッチョイ 2e98-BYkA)
垢版 |
2018/02/14(水) 16:35:43.73ID:wToAct7f0
>>45
どういうこと?じゃあどうすればいいの?
0049デフォルトの名無しさん (ワッチョイ ff98-znvk)
垢版 |
2018/02/15(木) 02:06:38.25ID:mcN0VL7z0
>>48
やっぱりちょっと分からないな。
RustやC++のどの辺がコンパイラに機能を詰め込んでると思うの?
ライブラリorツールに任せるってのもどの辺を任せたいのかな?
話がザックリし過ぎて言いたいことがよく分からないんだが。
0051デフォルトの名無しさん (スップ Sd3f-swnP)
垢版 |
2018/02/15(木) 17:01:00.96ID:OS8rqPvzd
C++はコンパイラの方もだけど標準ライブラリでの機能実現も相応に多くて結果ソースの記述が煩雑になっているのは既知の事実でしょう
ライブラリや実装に任せた結果APIの統一が取れなくなって結局細かな仕様策定を余儀なくされたSchemeを見ても銀の弾丸でない事は明らかだよね
それに出来る事を増やすという点においてライブラリは有用だけど変数の不変性や型システムのような制限をする事に関してはコンパイラによしなにしてもらうより他ないよ
0052デフォルトの名無しさん (ワッチョイ f7e0-T3WU)
垢版 |
2018/02/16(金) 01:22:14.41ID:W1XJdyx10
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
0056デフォルトの名無しさん (ワッチョイ 17eb-moIH)
垢版 |
2018/02/16(金) 15:41:33.96ID:xYOe+Cvi0
>>45は言語仕様の追加、更新が気に入らないんじゃないかな
try!の代わりに?なんて以ての外だ、みたいな?それ以外に思い付かなかったけど
1.0以前に@や~を削除してライブラリにぶん投げた辺りは希望通りな気がする

基本的に電池入りじゃないRustはライブラリやマクロの代わりの言語仕様の追加じゃなく
より効率的なバイナリを吐くための言語仕様の追加が多いイメージだけどなぁ、impl Traitとか
0057デフォルトの名無しさん (ワッチョイ ff98-znvk)
垢版 |
2018/02/16(金) 17:59:54.40ID:ItA0QsEV0
>>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にする必要あったのか?ってところで賛否両論あるかもね。
0061デフォルトの名無しさん (ワッチョイ ffeb-moIH)
垢版 |
2018/02/17(土) 13:27:59.06ID:Nh87YVhF0
俺も違和感はあるけど、多くの人が賛意を出して採用されたんだから
>>60や俺の感覚が狂ってるんじゃね?自身の感覚の狂いって当然ながら無自覚過ぎんよ

boxは在り様の総意を取るの面倒だし、目下はBoxで運用できてるしで、いつまでもstableに来なさそう
ヒープを多用したい人には文法にあればありがたいんだろうけど、そもそもヒープが好まれんしのう
0069デフォルトの名無しさん (ブーイモ MMcf-jtfM)
垢版 |
2018/02/20(火) 18:44:44.84ID:QamN8HfjM
tokio-coreなくなるんか
一通り組み上がった後の悲しいニュース
0072デフォルトの名無しさん (ワッチョイ 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とかよく知らんリポジトリもあるし…
誰か各クレートの特徴(役割)と関係性を教えてくれ
0074デフォルトの名無しさん (ブーイモ 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

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

統合の基準はどこかで議論されたんだろうけど、どこでやってたのかな
0078デフォルトの名無しさん (ワッチョイ 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と出ました
0083デフォルトの名無しさん (ワッチョイ 7e95-gb/e)
垢版 |
2018/03/08(木) 01:34:04.75ID:4NfI3sqt0
1.24.1は何のリリース?
0086デフォルトの名無しさん (ワッチョイ 2f97-6XBc)
垢版 |
2018/03/11(日) 17:59:47.19ID:9uw0Jco60
serdeでシリアライズだけするぶんにはjavaの1.4倍くらい早かったんだけどなあ(俺調べ)
0089デフォルトの名無しさん (ブーイモ MM5b-FuQQ)
垢版 |
2018/03/18(日) 07:04:56.79ID:esGNO3D8M
1.24.1てなんなんだろ
0091デフォルトの名無しさん (ワッチョイ 2bb3-ogOK)
垢版 |
2018/03/18(日) 21:36:06.49ID:kfSBwJmk0
Iterator::mapに渡すクロージャ内で、クロージャ内の変数への参照を持つstructを返したい時ってどう対処するのが正解ですか?
https://play.rust-lang.org/?gist=a15e0dfa10339570fef5b9225761a9f0&;version=stable
0092デフォルトの名無しさん (ワッチョイ 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
多分、頭の良い人ならもっと綺麗な説明と解法があるんだろうけど
0093デフォルトの名無しさん (ワッチョイ 2bb3-yeMC)
垢版 |
2018/03/19(月) 07:39:54.89ID:bmK7HIBH0
>>92
ありがとうございます
仮引数mのライフタイムはmain関数が抜けるまでだから通るということで合っていますか
またVecではなくIterator::Mapだと駄目な理由は、Iterator::Mapはcollectされるまでクロージャが実行されないから…とかでしょうか
0094デフォルトの名無しさん (ワッチョイ bdb3-kj1m)
垢版 |
2018/03/19(月) 13:44:00.51ID:aUxUFBJe0
>>93
仮引数mのライフタイムはクロージャ内なのは変わらないよ。>>92は仮引数を参照じゃなく消費してるから通る(>>92の&mじゃなくてmで良い)
クロージャが実行されないから、ではなく、mochiの値が消費されてるのにその参照を持たせようとしてるから駄目
試しに>>91のコードでmochi.map(|m| { 0 })とか書いて、mochiをprintln!に渡してみようとすると怒られるよ。もう使ってるって。

そこらへんの細かいルールを覚えるの大変だし、コンパイラもまだ分かりやすいエラーメッセージ吐いてくれないから、
・参照を使うときは、参照元をちゃんと生かしておくこと
・参照を使った構造体は、元の値を修飾(見方を変える、新しい機能を持たせる等)するようなパターンに限定すること
を守るようにした方がいいよ
0095デフォルトの名無しさん (ワッチョイ 2bb3-yeMC)
垢版 |
2018/03/19(月) 21:04:17.46ID:bmK7HIBH0
>>94
「消費したものの参照を持たせるのは駄目」と「消費しているから通る」はそれぞれはわかる気がするのですが、両方となると…
前者の「消費したもの」と後者(main関数中生き続けるMochiのベクトル)は別物だと思うのですが、
前者で駄目な理由は関数中生き続けるMochiがない(mapを呼び出しただけでは駄目)ということですか?
0096デフォルトの名無しさん (ワッチョイ 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エラーはライフタイムがどうのこうのと小手先で弄るより、
値の所有者を明快にしたり、データ構造を見直してみると案外素直に直せるのが経験則。
0097デフォルトの名無しさん (ワッチョイ 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にすべきでしょうか
0098デフォルトの名無しさん (ワッチョイ bdb3-kj1m)
垢版 |
2018/03/20(火) 14:30:32.82ID:UUyTwokV0
大きい文字列を扱うから参照にしたいってのは普通にあるし分かるけど
Hitoが&MochiでなくMochiをメンバに持つようになっても文字列のコピーは行われないよ

自分なら>>97のget_too_many_str()が返す&strの元を誰が保持するのかをまず気にする
そこをしっかり把握してれば文字列のコピーは最低限になるはずだから
0100デフォルトの名無しさん (ワッチョイ 2bb3-yeMC)
垢版 |
2018/03/21(水) 11:43:51.64ID:cBTkQiaM0
&strの元もloop内の変数が持っています
hのvecを作るにはコピーは避けられないようですね…
&strからStringに変えたところhvec.push(h)してもエラーにはなりませんでしたが、
スコープを抜けたはずの変数が使える理由ってどこかに書いていますか?
0101デフォルトの名無しさん (ワッチョイ bdb3-kj1m)
垢版 |
2018/03/21(水) 14:53:30.44ID:9rI6JIRt0
そりゃloop内の変数hから、loop外のhvecに所有権が移動したから

頭の中に入れておける物なんて極わずかだし、場当たり的にdoes not live longエラーに対処するのは大変なので、
・値の所有者はどの変数であるべきか
・データ構造はどうあるべきか
という観点だけ念頭にいれて、「性能を稼ぐために参照を使おう」って考えを一旦外すとスッキリするよ
0106デフォルトの名無しさん (アウアウエー Sadf-Mqc2)
垢版 |
2018/04/15(日) 22:44:53.22ID:UX4y5Mn1a
てst
0108デフォルトの名無しさん (ワッチョイ a364-0hQO)
垢版 |
2018/05/08(火) 02:44:07.65ID:kruQSPFC0
別にアンチって訳じゃないけど、コンパイルが遅すぎる(特に最適化掛けた場合に)のはどうかと思う。
実行が速くてもその生成に時間が掛かれば無意味でしょう……。
0110デフォルトの名無しさん (ワッチョイ 1f97-q47z)
垢版 |
2018/05/08(火) 07:00:09.03ID:EnN/pyur0
逆なら理解できるけど
0112デフォルトの名無しさん (ワッチョイ 0bb3-XZ5U)
垢版 |
2018/05/08(火) 20:14:50.84ID:T0pMALEX0
rustcで単一ファイルだけコンパイルすると結構速いなと思った
cargoって警告無視のオプション(-Awarning)の有無でも一からビルドしようとしたりちょくちょくお粗末
0115デフォルトの名無しさん (JP 0Ha1-pXmg)
垢版 |
2018/05/23(水) 12:09:39.17ID:6kVmIohDH
ほとんどc++に見えるの俺だけ?
0116デフォルトの名無しさん (ワッチョイ 5523-/w+O)
垢版 |
2018/05/23(水) 12:29:18.87ID:4/oN1Bt60
みんな言ってる
0117デフォルトの名無しさん (ワッチョイ 89fa-9WOx)
垢版 |
2018/05/23(水) 23:15:50.94ID:Au5e7VGg0
確実にどんな人でも可能なネットで稼げる情報とか
念のためにのせておきます
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

C717P
0118デフォルトの名無しさん (JP 0Hcd-6rHD)
垢版 |
2018/05/28(月) 09:59:15.77ID:N9/pBFPWH
rustを始めたんだけど
分かりそうで分からなくて
イライラする

なんだこの言語
0120デフォルトの名無しさん (JP 0Hcd-6rHD)
垢版 |
2018/05/28(月) 11:14:23.86ID:N9/pBFPWH
actix_webでちょちょいとwebサービス作ろうと思っただけなんだが

externとuseみたいに、なんで同じようなものが2つ有るのとか

trait?、インプリすればいいだけならなんでこんな名前なんだとか
0121デフォルトの名無しさん (ワッチョイ 512d-MMi0)
垢版 |
2018/05/28(月) 11:44:10.53ID:4ZqBL5Re0
察するに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参照)が始まっちゃうかもしれないので
ゆるく受け流してほしいところ
0124デフォルトの名無しさん (JP 0Hcd-6rHD)
垢版 |
2018/05/28(月) 14:35:19.27ID:N9/pBFPWH
チュートリアルの和訳のところを読んでいるけど
誰が訳したんだろう。。。
0126デフォルトの名無しさん (JP 0Hcd-6rHD)
垢版 |
2018/05/28(月) 15:47:39.28ID:N9/pBFPWH
しばらくしたら言語仕様変わりそうだなあこれ
勉強していくべきなのかどうか迷う
0157デフォルトの名無しさん (アウウィフ FF85-mzC7)
垢版 |
2018/07/01(日) 15:40:20.37ID:ep584YMHF
秀丸
0158デフォルトの名無しさん (ワッチョイ 79b3-HrKv)
垢版 |
2018/07/01(日) 18:12:28.40ID:VIP13YQk0
禿丸ってなに?
0161デフォルトの名無しさん (ワッチョイ 45fa-2e90)
垢版 |
2018/07/04(水) 21:50:46.22ID:gFgZc5FG0
5PW
0162デフォルトの名無しさん (ブーイモ MM2b-0Xn2)
垢版 |
2018/07/05(木) 00:59:18.40ID:lJi2a9VDM
おーい、hgmr
0164デフォルトの名無しさん (ワッチョイ 12d5-YWSl)
垢版 |
2018/07/29(日) 02:13:01.57ID:QHCaZ13N0
まさか繋いでくれる人がいるとは思わなかった
0168デフォルトの名無しさん (ワッチョイ dfad-VZQ6)
垢版 |
2022/05/03(火) 15:19:34.90ID:FP7f4hyR0
Rの発音が難しい
0170デフォルトの名無しさん (ワッチョイ 7501-zStA)
垢版 |
2022/11/13(日) 22:46:23.74ID:gb51z1Py0
日本語の発音ってかイントネーションはみんなどっち?
ラスト(ミファファ=スタバ)
ラスト(ミドド=ベスト(着る方))
0172デフォルトの名無しさん (ワッチョイ 1f5f-MR5z)
垢版 |
2022/12/18(日) 17:46:12.72ID:fqk1SiW30
本スレ最近ひどいね
age
0173デフォルトの名無しさん (ワッチョイ d3c9-tb1I)
垢版 |
2023/01/09(月) 20:41:28.12ID:XnWHdmBW0
Rustの型って何を言ってるのか良う分からないくらい一気に複雑になるんだけど、改善の兆しってある?
filter(|x| ...).map.(|x| ...)ってやると戻り値がMap<Filter<...>>みたいに、情報量がほぼ増えないのに型の表記だけが増えてくのが見づらくてしゃあないんだが

「ここを関数に切り出しておきたい」ってのも難しくね?
impl Traitあるだろって言われるけど、自分ひとりでできた試しが無い
0174デフォルトの名無しさん (ワッチョイ 1301-nt2E)
垢版 |
2023/01/09(月) 22:31:09.52ID:ZXgjuOo50
>>173
.filter(|x| ...).map.(|x| …)とやったら
ざっくり言うと戻り値はIterator<Item=T>でowned, shared reference, mutable referenceの3種類
Map<Filter<...>>とかの詳細な型を知りたいと思うことは基本ないからそこまで困らない
デコレータとかコンポジション的なものとして理解しとけばいいと思う

関数に切り出すのはGC言語と比べると難しい
どの値の所有権をどの呼び出しレイヤーで保持すべきかを整理しながらリファクタリングする必要がある
ただある程度パターンがあるからそれが理解できるとそこまで難しくはない
0175デフォルトの名無しさん (ワッチョイ d3c9-c71v)
垢版 |
2023/01/11(水) 20:45:10.66ID:+OHiCBbi0
>>174
標準ライブラリでiteratorのメソッドならそうなんだろうな、って他言語でも溜め込んだ知識で何とかなるけどさ、
例えばwarpっていうWebフレームワークはリクエストの解決にfilterを使ってるんだけど、
https://docs.rs/warp/latest/warp/filters/index.html
↑ここからたどって、例えばリクエストのパスにマッチするフィルタを作成するwarp::filters::pathってのがあるんだけど、
こいつの戻り値が独自型のExactってやつなのね

warp作ってる人はここに様々な条件を追加できるようにしているんだけど、pathの戻り値にどう組み合わせられるかってのをどう探せるんだろっていつもなってる
他のcrateも、単機能で目的果たせるライブラリならまだいいけど、高階関数で機能組み合わせてねってやつはrustdoc見ても意味が分からなくなってる
0176デフォルトの名無しさん (ワッチョイ 1301-nt2E)
垢版 |
2023/01/11(水) 23:31:54.91ID:B6T7GQUU0
>>175
ExactがFilterだと分かれば別のFilterを組み合わせられることはわかるでしょ?

warpのFilterシステムを理解させるための解説ドキュメントが不足してるのと
他で類似の仕組みをあまり経験したことがないのが理由なんじゃないのかな?

型が入れ子の形でチェインされてる状態に慣れてないから
それがわかりにくさの原因のように感じるかもしれないけど
JavaやgoのReader/Writerみたいにデコレータ的に型を重ねていくのはそんな特殊なことじゃないよ
0178デフォルトの名無しさん (ワッチョイ dbda-xq+Q)
垢版 |
2023/01/12(木) 10:57:06.97ID:yHqsf2Vi0
関数単位で切り出す場合はimpl TraitやBox<dyn Trait>使った方が良いと思う
実装の詳細が型として露出してしまうのはよろしくないし
何より長い型を書き下すのはめんどくさい
0179デフォルトの名無しさん (ワッチョイ d3c9-tb1I)
垢版 |
2023/01/13(金) 00:49:21.00ID:Eg8x4Zf+0
>>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 そう思うのは人情だが、じゃあどういう型の関数にすればいいのかって話
ググらずに分かる?俺は分からなかった
0180デフォルトの名無しさん (ワッチョイ 795f-H4iZ)
垢版 |
2023/01/13(金) 01:52:07.98ID:USdCnak/0
>>179
非公開の(だけど実装が漏れている)FilterBaseトレイトを介してFilterを実装してるんだね……
FilterBaseが公開されていればExactのblanket implementationsに出てくるはず

同じことは指摘されているが放置されている模様
https://github.com/seanmonstar/warp/issues/742
0182デフォルトの名無しさん (ワッチョイ 1301-nt2E)
垢版 |
2023/01/13(金) 21:03:44.68ID:4YqzJ2Gc0
Sealed TraitっていうユーザーにTraitを実装させないための一般的なパターンなんだけど
privateなTraitはドキュメントには現れないのでExactがFilterBaseを実装してることを確かめたければソースを見るしかない

でも関数や構造体の説明にFilterだよって書いてるんだからまずはそこからじゃないか?
path()「Create an exact match path segment Filter.」
Exact「A Filter matching an exact path segment.」
0183デフォルトの名無しさん (ワッチョイ eac9-KPE0)
垢版 |
2023/01/14(土) 03:14:01.24ID:4QhVLL220
いや型の説明がコメントにしか無いかったら疑うのが基本じゃないか…?
説明にある通りの使い方はできるけど、何故そう使えるのか分からない、となった上での話
前にもちらっと書いたところもそうなんだけど、impl Filterを返す関数のシグネチャも独力だと分からなかったんだよ。もっと情報の少ないクレートでやる必要が出てきたら詰んじゃう
0187デフォルトの名無しさん (ワッチョイ f6da-RqI+)
垢版 |
2023/01/29(日) 08:29:44.05ID:VTBemk9l0
意味合いとしては
> 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を避けつつ機能を実験するために導入するみたいね
https://twitter.com/5chan_nel (5ch newer account)
0189デフォルトの名無しさん (ドコグロ MM49-+MOc)
垢版 |
2023/02/26(日) 21:57:18.73ID:vJeOsMT8M
新スレとして再利用と聞いてage
0190デフォルトの名無しさん (ワッチョイ 615f-+MOc)
垢版 |
2023/03/02(木) 01:57:12.70ID:9x7ptNRV0
ProviderとDemandってCOMのQueryInterface的な使い方もできるのかな
0195デフォルトの名無しさん (ワッチョイ 4eda-Wvvr)
垢版 |
2023/03/15(水) 10:58:18.74ID:efRde3jV0
Linusの話は、メモリアロケーション失敗時にpanicするなという話だと思うけど、今回の変更とは全く関係ない

今回の変更でalloc crateがalloc_error_handlerのデフォルト実装を提供するようになった
新たに提供されたalloc_error_handlerはpanicする実装になっているので、メモリアロケーション失敗時にpanicになることは変わらない
単に、利用者がalloc_error_handlerを独自に実装する必要がなくなったというだけ

Linusの指摘に対しては、Box::try_newなどのアロケーション失敗を呼び出し元に通知するAPIを用意することで対応している
0197デフォルトの名無しさん (ワッチョイ 715f-SGwy)
垢版 |
2023/03/15(水) 13:35:50.81ID:jUGp7X9a0
Rust製の高速なwebpack互換バンドラ「Rspack」登場。現時点で5倍から10倍の性能向上
https://www.publickey1.jp/blog/23/rustwebpackrspack510.html

> Rust製の高速なバンドラとしては、webpackの主要な開発者がNext.jsに入社してwebpackの後継として開発している「Turbopack」もあります。
> 現時点ではまだwebpackが抜きん出た人気を得ていますが、現時点で主要な開発者が抜けてしまったwebpack後継の座を狙った競争が始まったといえそうです。
0199デフォルトの名無しさん (ワッチョイ e510-t3VU)
垢版 |
2023/03/27(月) 08:53:03.64ID:ZY+RQ7940
一度普及したソフトの作者自身が後継プロジェクトを立ち上げてもなぜかうまくいかない法則
0204デフォルトの名無しさん (ワッチョイ 453e-wSlO)
垢版 |
2023/03/27(月) 16:27:48.16ID:Fq2x4U//0
>>201
どうせ IO がネックだからってのは昔から言われてることだけど
クラウドサービスを前提にすると事情が違うと聞いたことがある。

レスポンスタイムにあまり差が無かったとしても課金は演算量 (CPU の使用量) に対して
だからなるべく効率的に実行できる言語を使ったほうが安く上がるんだとさ。
0205デフォルトの名無しさん (アウアウウー Saa5-jS6D)
垢版 |
2023/03/27(月) 23:41:07.73ID:t8oeSgw5a
Ruby on Rails 6 では、webpack が標準だったけど、
Rails 7 では、Import Maps で、CDN から直接インポートするように変わった。
脱webpack/node.js

ES2015 に対応していないブラウザ用に、バンドルする方法もある。
バンドラーは、esbuild, rollup, webpackの3つ
0208デフォルトの名無しさん (ブーイモ MM8e-sjlm)
垢版 |
2023/04/24(月) 18:39:33.31ID:75I/tfQdM
let-elseは鬼っ子だから
改行位置決めるのも大変
0210デフォルトの名無しさん (ブーイモ MM8e-sjlm)
垢版 |
2023/04/24(月) 18:47:43.95ID:fDr9n68aM
try_reserve
0211デフォルトの名無しさん (オイコラミネオ MMb5-+3Ti)
垢版 |
2023/04/24(月) 18:53:28.63ID:3hT7+QpVM
>>210
それは予め領域を確保しておく関数で、確保できなかった場合には、
Result<(), TryReserveError>
という戻り値を返す関数と言うことですか?
そして、関数呼び出しの直後に ? を書くと、エラー発生時にそこで
アプリをダウンさせると言うことですか?
0213デフォルトの名無しさん (ブーイモ MM0a-sjlm)
垢版 |
2023/04/24(月) 19:01:30.05ID:ELtZniCQM
いろいろ違う
落としたいならpanicさせとけばいい
0219デフォルトの名無しさん (ワッチョイ 1eda-2ihv)
垢版 |
2023/04/25(火) 10:43:39.39ID:hB6+7TeQ0
try_reserveの戻り値がErrだったら処理を実行するだけだよ
この説明で分からないならenumやResult型について勉強した方が良いよ

あとtry_reserveの失敗要因はメモリ不足だけじゃないけど、エラー種別はnightlyじゃないと取得できないみたいね
0228デフォルトの名無しさん (ワッチョイ d336-IjPS)
垢版 |
2023/07/29(土) 22:43:04.08ID:nwVMjVJQ0
いつのまにかrust-specがマージされてる。まだ作業終わってないけど。
ttps://github.com/rust-lang/rfcs/pull/3355
ttps://github.com/rust-lang/rust/issues/113527
rustにもようやく仕様が。
0241デフォルトの名無しさん (ワッチョイ 0f01-w8tn)
垢版 |
2023/09/21(木) 23:43:40.50ID:2whQHU6y0
RustのコンパイルターゲットはTierで分けられているけど
x86_64-pc-windows-msvc ←Tier1
x86_64-unknown-none ←Tier2
この違いって何?
Tier1の条件を見るとすべてのテストに合格すること的な事が書いてあるしプラットフォームが不明の状態でそれは不可能はなず
組み込み向けなどの低レイヤー用途を想定したターゲットにTier1のものはなくすべてTier2以下になっている
もしこれが理由なら自分が書いたコードはTier1と同レベルに翻訳される(実行できなかったり実行結果が不正なコードは生成されない)事が
期待できるけどそう考えて問題ないのだろうか
0242デフォルトの名無しさん (ワッチョイ 3fda-n7kY)
垢版 |
2023/09/22(金) 01:00:34.44ID:J+8eUZUM0
>>241
x86_64なら現実的にはほぼ動くとは思う
ただ、あくまでもrust側ではコンパイルが通ることしか確認してなくて、生成されたコードが正しく動作するかは未確認の状態
利用者側が動作確認をきちんとやる必要があるよ
0243デフォルトの名無しさん (ワッチョイ 0f01-w8tn)
垢版 |
2023/09/22(金) 02:06:03.04ID:/khf3L7K0
>>242
例えばベアメタル開発用などでOSとインターフェイスしないコードのみほしい場合
x86_64-pc-windows-msvc(x86_64-unknown-linux-gnuとかでも可)でスタティックリンクのライブラリとしてビルドしてカスタムリンク
x86_64-unknown-noneでビルド
の二択だと出力物の信頼性はどちらの方が高いのだろうか。どちらも適切なローダーを用意すれば動作するはず
特に低レイヤーの開発で翻訳不良があるとトラブルシュートが沼りやすいし、前者の方が有利なら
ゴミが付いたりビルドが複雑化するなどのデメリットを考慮しても検討する価値があるはず
0244デフォルトの名無しさん (ワッチョイ 0f36-8z3m)
垢版 |
2023/09/22(金) 04:58:40.40ID:B04DzdQA0
より正確にはtier2はwith/without Host Toolsに分かれる。
withの方はtarget環境扱いだけじゃなくてネイティブなhost toolsを使用して開発環境として使える。
*-*-none-*はベアメタル向けだからHost Toolsのサポートはない。
言い換えるとtier2 with Host Toolsはセルフホストできる。

Tier 1にもwith/withoutの分類があるけど事実上withoutの方がない。
これは今のところHost Toolsをサポートしてないtier 1が存在しないから。

だからビルド環境に指定したいならx86_64-unknown-none。
0245デフォルトの名無しさん (ワッチョイ 0f01-w8tn)
垢版 |
2023/09/22(金) 23:10:21.93ID:/khf3L7K0
x86_64-unknown-noneが吐くコードをどのくらい信用して良いのかって話ね
Tier2=十分にテストされていない=不正命令例外を吐いたり意図しない演算結果になる可能性がある
とかだと開発に重大な影響が出るし勘弁してほしい。Tier1のターゲットならそんな可能性は無視できるはずだし
0247デフォルトの名無しさん (ワッチョイ 0f01-w8tn)
垢版 |
2023/09/22(金) 23:47:16.64ID:/khf3L7K0
x86_64-unknown-noneがTier2の理由がstdのテストができないからならそれでいいんだけどね
Platform Supportを見ても
>x86_64-unknown-none * Freestanding/bare-metal x86_64, softfloat
としか書いていない。hardfloatが使えない?のはよくわからないが
0248デフォルトの名無しさん (ワッチョイ 0336-3hLy)
垢版 |
2023/09/23(土) 01:27:48.45ID:JOYgBSwC0
Tierはrustcのコードベースがビルドできるかどうかの保証であって吐くバイナリの質の保証じゃない。
そもそもrustcはフロントエンドだからどういうバイナリ吐くかは無関係。
tier 1/2の違いは自動テストが常に実行されるかどうかの違いだけ。

全部Platform Supportに書いてあるからこの説明でわからんならどこが理解できないのか言ってくれ。
0251デフォルトの名無しさん (ワッチョイ dd5f-ZTan)
垢版 |
2023/11/08(水) 11:25:16.25ID:QNjJKK3y0
Rust製ブラウザエンジンの「Servo」、アプリに組み込み可能なクロスプラットフォーム対応WebView化を目指す。Electron代替を目指す「Tauri」への組み込み実現へ - Publickey
https://www.publickey1.jp/blog/23/rustservowebviewelectrontauri.html

期待
0252デフォルトの名無しさん (ワッチョイ 9f5f-Lcu7)
垢版 |
2023/11/13(月) 11:53:03.89ID:k6bqA1Ku0
https://rust-lang.github.io/rfcs/3192-dyno.html

気づいたらポシャっててstd-1.73.0からProvider/Demandも消えてた
やっぱりRTTIとかそういうのはあんまり乗り気じゃないのかな??
0255デフォルトの名無しさん (ワッチョイ ff3e-XnzH)
垢版 |
2023/12/28(木) 21:34:36.48ID:x05ZB4jI0
遅い部分を Rust でなおそうというよりは、
Rust へ置き換わる流れに乗るついでに駄目なところをそろそろなんとかしようぜという感じじゃないかな。
イマイチなのがわかっててもちゃんと動いてるなら何かきっかけがないと重い腰が上がらないのはよくあること。
0258デフォルトの名無しさん (アウアウウー Saa7-Krj3)
垢版 |
2023/12/29(金) 22:02:28.40ID:iUQmWV32a
YJIT、最初はCで実装されてたがRustに変えたみたい
bindgenでCRuby側のAPIをRust側に持ってきて
それを使いながらJITでマシンコード生成してる
面白すぎる
コードもめちゃくちゃ読みやすいぞ
レスを投稿する