Rust part20

■ このスレッドは過去ログ倉庫に格納されています
2023/03/03(金) 00:45:28.73ID:vTVY069B
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part19
https://mevius.5ch.net/test/read.cgi/tech/1673926892/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2023/03/18(土) 11:40:54.04ID:yS+7OZFn
>>186
>>177て”公式”のThe Bookに書いてあったっけ?
2023/03/18(土) 11:42:47.58ID:l9YNpI31
lifetime 周りは書いてあるだろ
2023/03/18(土) 11:53:17.34ID:VtoeVuok
>>188
>>181とかどこだっけ?
2023/03/18(土) 11:57:09.36ID:kHUlERx3
>>185
ライフタイムは全てにあるが省略できることが多い
省略できないときはコンパイラがエラーとし教えてくれるのでライフタイムを付ければいい

>>186
日本語版もある
https://doc.rust-jp.rs/book-ja/
2023/03/18(土) 14:05:24.60ID:PyzwqGcC
>>190
誤訳だらけの粗悪な非公式日本語訳はお勧めしない
簡単なエラーメッセージの意味も分からないような状態なんだからまずは公式The Bookをしっかり読むべき
2023/03/18(土) 16:08:20.29ID:QSo2KHpO
「非公式な日本語訳」を「日本語版」と呼称するのはそれがあたかも公式かのように錯覚させる意図が見えるので優良誤認の疑いがある
2023/03/18(土) 16:13:56.89ID:6WtXixvi
>>187
The Bookはクックブックじゃないからな
特定の方法が書いてるか書いてないかよりも
読んで理解してれば自己解決できる問題かどうかが重要
2023/03/18(土) 17:11:12.32ID:NQWJ1KgL
日本語訳の話題は生産的じゃないのでやめよう
このスレのローカルルールは>>37の通り
195177
垢版 |
2023/03/18(土) 18:27:39.58ID:XgD5JQEe
読んだのは日本語訳のほうの The book ですが、個々の機能はたぶん分かってると思います。
ライフタイムを省略した場合には一定のルールで補われることも知ってました。
ただ、型が満たすべき性質を書くのが where 句なので (エラーメッセージを見てすら!) ライフタイムが必要ということがぴんと来なかったというのと、
引数と同じ記法でライフタイムをここに書けるのだということがわからなかったんです。
2023/03/18(土) 18:38:31.92ID:l9YNpI31
> 引数と同じ記法でライフタイムをここに書けるのだということがわからなかったんです。
英語版でも日本語版でもどっちでもいいけど 10.3 にちゃんと書いてあるよ
2023/03/18(土) 19:09:39.09ID:YhY+O2tk
whereの:の左辺に参照とか書けるのをまず知らなかったんでしょ
the Bookにそんな例無いし
2023/03/18(土) 19:27:58.81ID:sUMBdqo8
日本語版を読まなければこんなことにはならなかった
日本語版を許すな
2023/03/19(日) 04:14:30.76ID:JYAaHQUF
>>183
ラストコンパイラって響きカッコいいな
2023/03/19(日) 13:06:57.80ID:j6t6IVCD
>>193
この場合に必要なのはクックブックだろ。
せめて>>196みたいに誘導しないと。

「読んで理解すれば自己解決できる」とか、そもそも読むところも示していないのにできるわけない。読み手を無視してマウントする自慰行為にしか見えん。
2023/03/19(日) 13:09:44.94ID:E3Ip09fl
そりゃ「個々の機能はたぶん分かってると思います」とか言われたら分かってねーじゃんって言いたくなるだろ
2023/03/19(日) 13:23:44.49ID:6gmOWdI+
>>196
where 句の制約で書いてる事例はないよ。
2023/03/19(日) 14:19:01.09ID:8hEI7b0p
>>200
訳の分からない日本語訳読んでわかったつもりになってるだけだからそう感じるんだよ
つべこべ言わずに全部読め
2023/03/19(日) 14:25:09.74ID:RMEG+oCh
>>202
grepだけじゃ答えは見つからない
読んでないから調べ方もわからない
2023/03/19(日) 20:29:29.27ID:Pq7wYRkP
>>203
順調に日本Rustは錆びているようですね。いや、めでたい。
2023/03/19(日) 20:49:16.05ID:UVlxeYfB
ちゃんとあるじゃん
https://doc.rust-jp.rs/book-ja/ch10-03-lifetime-syntax.html#%E3%83%A9%E3%82%A4%E3%83%95%E3%82%BF%E3%82%A4%E3%83%A0%E6%B3%A8%E9%87%88%E8%A8%98%E6%B3%95
207デフォルトの名無しさん
垢版 |
2023/03/19(日) 21:36:02.67ID:XN9u9qop
Rustはベンチマーク速いから気になってるんだけど
iPhoneやAndroidの開発で将来的に使えるようになる話はないの?
2023/03/19(日) 21:40:34.06ID:C8hzWYTf
ゴミだな
2023/03/19(日) 21:41:36.36ID:/nL/Z/hW
>>207
普通に使えるやろ
2023/03/19(日) 21:48:03.22ID:1LqNQBrB
>>177見て思うんだじぇど
ゆとり教育超大国日本ではゆとり脳な奴が多数になって
エラーがでたよ、でも、エラー内容は書かないようなコミュ力の低い奴が
普通になっているんかな。
2023/03/19(日) 22:05:41.03ID:pmaEpt3C
>>210
いくつか落ち度はあっても>>177は自分の考える最小限の再現可能なコードを提示してるからめっちゃくちゃマシな質問者
質問者としての偏差値63くらい
2023/03/19(日) 22:08:47.66ID:pmaEpt3C
5chでの偏差値ね
Stackoverflowだと47くらい
2023/03/19(日) 22:25:46.74ID:6gmOWdI+
>>207
ネイティブコンポーネントには Rust は使える。
Android の根本設計が Linux+JVM で、 JVM は変に高級な設計だからその高級な機能に噛み合うように設計された言語じゃないとうまくいかない。
LLVM バックエンドで JVM バイトコードを生成するものもあるらしいから無理すりゃ Rust でもなんとかなるかもしれないけど……
それよりも現在の情勢を見ると Android に WASM サブシステムが入るとかのほうがあり得そうな気がするよ。
2023/03/20(月) 00:55:07.77ID:rG0fuScP
自然言語自体に落ち度があると思った方がプログラミング言語の価値が分かりやすい
翻訳にも質問にもChatGPTにも過度の期待をしなくてすむ
2023/03/20(月) 01:31:12.77ID:OPxEUMsA
言語の問題と言語を扱うやつの問題を同一視するアホ
2023/03/20(月) 01:42:28.65ID:+AEvN8jR
正常動作する正規品を期待してたのに
不具合だらけで役に立たないジャンク品でした
2023/03/20(月) 02:15:13.67ID:rG0fuScP
はした金ではジャンク品しか買えない
インフレか
物価の問題と品質の問題のような二つの問題を無関係と考えるのがアホだったんじゃないか?
218デフォルトの名無しさん
垢版 |
2023/03/20(月) 03:09:08.81ID:KC0EWXje
prettierの代替のdprintがRust製だった
普及してるものがRust製に置き換わるってが今後も続くだろうね
2023/03/20(月) 03:46:46.02ID:8+GC48xI
>>217
ところが実際はジャンク品のほうが正規品より高いんだなこれが
正規品に見せかけて売ってるからいわゆるジャンク扱いではなく蓋を開けたらゴミでしたという落ち

でもありがたいことに今は購入前に中身を確認可能なのでよほどの情弱じゃなければ騙されないんだけどね
2023/03/20(月) 10:04:17.69ID:UnL767mB
>>217
物価の意味も知らんのかww
恥ずかしいから辞書引けよ
2023/03/20(月) 10:58:26.51ID:uuArbTr3
このあたりを読んでおけば大丈夫
Advanced Lifetimes
https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-02-advanced-lifetimes.html
2023/03/20(月) 11:08:21.33ID:XflJK2ct
>JVM は変に高級な設計だからその高級な機能に噛み合うように設計された言語じゃないとうまくいかない。

相変わらずいい加減なこと書いてるなぁ
2023/03/20(月) 11:41:00.74ID:rG0fuScP
アプリもコンパイラも動くLinuxが正規品
コンパイラは不要とされアプリしか動かないLinuxがジャンク
2023/03/20(月) 11:59:59.11ID:IoVEULD8
>>223
GNUにケンカ売る気かよ
2023/03/20(月) 14:23:43.87ID:YI144KAX
Iterator<Item = Option>の時
filter(|o| o.is_some()).map(|o| o.unwrap()).map(|x| f(x))を
iflet(|Some(x)| f(x))みたいに1つにまとめてくれるメソッドある?
2023/03/20(月) 17:14:18.78ID:dpT4FG92
flattenとかflat_mapとかfilter_mapとか
2023/03/20(月) 19:58:13.92ID:EBVsuSrE
flat_mapはmap(f).flatten()の順だから無理だな
filter_mapはOption外しに使えるがmap(f)は別途必要
filter_map(|opt| opt).map(f) または参照なら
filter_map(Option::as_ref).map(f)
したがって正解はこれ
flatten().map(f)
228デフォルトの名無しさん
垢版 |
2023/03/20(月) 20:22:03.14ID:9WmeSXDj
flattenのOption/Resultはずし知らんかった
2023/03/20(月) 20:32:22.28ID:45aFG7he
>>227
どれでもできるぞ
初手で一番素直な選択はfilter_map
2023/03/20(月) 20:46:14.12ID:YI144KAX
flattenを使ってできました
let v = vec![None, Some((1, 2)), None, Some((3, 4)), None];
assert_eq!(14, v.iter().flatten().map(|(a, b)| a * b).sum());

>>229
filter_mapを使うと簡単ならば知りたいです
2023/03/20(月) 21:35:03.62ID:adpwtvX/
複オジかよっw
2023/03/20(月) 21:41:30.44ID:EBVsuSrE
前述したようにfilter_map自体のmapではOption外ししかできないので別途map(f)が必要になる
filter_map(|opt| opt).map(f)
あるいは
filter_map(|opt| opt.map(f))
簡単なのはflatten().map(f)
2023/03/20(月) 23:15:03.64ID:dBJpnlWY
flat_mapはfilter_mapを汎用化したものなので
filter_mapは常にflat_mapで書き直せる
flattenと理屈は同じ
2023/03/20(月) 23:20:21.79ID:I3aedYRP
唐突に妙に具体的な質問が飛んできたらあの人だと思ってればいい
2023/03/20(月) 23:20:56.30ID:c1bWUyRU
どの人だよ
2023/03/20(月) 23:49:46.77ID:K17OWm6q
>>234
いやー俺は今回まんまと騙されたわ
自演力と自画自賛力にステ振りすぎとちゃう?
2023/03/21(火) 00:12:49.49ID:lhwbZ9up
>>226 >>233
質問はOption列が対象のようだからflat_mapとfilter_mapは対象外やろ
それらはむしろOptionを作る関数を与えて使う
元から既にOptionになってるのだからflattenが正解
2023/03/21(火) 10:42:06.27ID:El4m1VCp
Someだけ拾って関数をmapすると考えれば
filter_map(|opt| opt.map(f))
だな
元のSome/Noneをそのまま利用するのがトリッキーかもしれないけど
2023/03/21(火) 11:33:54.48ID:aqrydfrP
ところで、ラムダには自由変数というものがありその反対が束縛変数だが
ラムダや自由変数を意識する必要がない文脈で束縛という用語が出ると
その語源を説明する手間がかかるよな
240デフォルトの名無しさん
垢版 |
2023/03/21(火) 13:02:51.29ID:3dx+Qi3k
scalaやっているせいかmatchとか
すごく使いやすいわん
iterator nextなんてJavaでも使わんけど
これ使い人いるの?
2023/03/21(火) 13:17:10.53ID:lhwbZ9up
>>240
nextはIterator全ての基礎
nextだけを定義すれば他のメソッドはnextで作られているので自動的に定義される
for文もnextを使っている
2023/03/21(火) 13:27:49.15ID:gPDO4YWu
>>238
入力から出力までのパイプラインの全体像を見ればトリッキーに感じることはないと思うよ
例えば>>230にあるvec![None, Some((1, 2)), None, Some((3, 4)), None];みたいなのはこれがすでに入力値に対して何かしら関数適用した結果なんだよね
2023/03/21(火) 13:35:41.08ID:lhwbZ9up
>>242
関数適用せずとも
None初期化配列やVecで一部indexにだけ値がSomeは普通によくあるパターン
2023/03/21(火) 14:20:03.57ID:El4m1VCp
元の入力で「値の有無」を表してたOptionをfilter_mapの「要素の残存判定」に転用する形だから
Optionの意味が微妙に変わってて引っ掛かる人もいるかなって思った
2023/03/21(火) 14:35:08.73ID:4Vr7UtW/
昔の言語だと配列に初期値として使っていないことを示すために-1とか0とかnullとかundefinedを入れてしまうことが多かったパターンか
いわゆるデータのnull安全性がなかったことろをRustはOptionのNoneとSome利用でnull安全性が保証
データが0にならならNonZeroを使えばNone時に0が使われて余分なメモリ消費もないしな
2023/03/21(火) 14:39:43.43ID:xxXQcN5m
隔離スレでやれ
https://mevius.5ch.net/test/read.cgi/tech/1677286186/
2023/03/21(火) 14:40:28.73ID:4Vr7UtW/
>>238
そこを出発点として考える場合でも
filter_map(|opt| opt.map(f))
↓ Optionのままmapしても剥がしてからmapしても同じ
filter_map(|opt| opt).map(f)
↓ Optionに対して恒等関数になってるのでflattenと同じ
flatten().map(f)
と辿り着く
2023/03/21(火) 17:23:17.80ID:El4m1VCp
>>247
自分は途中のイテレータ減らしたい派だから一番上で落ち着いてしまう
ラムダ式減らすなら下だろうけどfilter_mapが便利すぎてね…
2023/03/21(火) 18:14:49.79ID:lhwbZ9up
>>244
Optionは常に値の有無を表している
filter_mapも値の有無を残存判定に用いている
Optionの意味が変わることはない
2023/03/21(火) 19:05:07.54ID:Kxmr6Met
>>243
いかにも競プロっぽい考え方だね
現実のプログラムでは最低でも(K, V)で管理するから計算対象の値だけを素のOption配列で管理したりしないよ
2023/03/21(火) 19:18:56.96ID:8T+PSGNQ
>>250
インデックス値で管理できるものま無駄なコストがかかるハッシュマップでを用いる気軽な連想配列な考えこそコスト無視のスクリプト言語な考えだよ
インデックス値で管理できるものはRustでは配列かVecを使う
2023/03/21(火) 21:39:30.39ID:Hb26aB9L
HashMap<K, V>はhash計算コストに加えてkey比較コストがhash衝突回数の分かかるからなー
indexになれる値があって上限が許容されるならVecが有利
2023/03/21(火) 23:56:44.92ID:UIyRFaA6
>>250が経験不足と知識不足で知らなかったんでしょ
2023/03/22(水) 13:00:26.42ID:KFnwa6CM
>>251
おいおいなんで急にハッシュマップが出てくるんだよ
そんなんで大丈夫か?

Vec<Option<V>>みたいなデータがどこからともなく自然発生するわけないんだから全体のパイプラインを考えろって言ってるの
現実的かつ具体的なユースケースで考えような
2023/03/22(水) 18:31:25.27ID:KdbjtxZL
ナイーブなハッシュテーブルをVec<Option<T>>で実装する人はいるかもしれない
2023/03/22(水) 21:00:04.56ID:ax9KtLpr
うちも値域が限定されてる離散値はArrayかVec<Option<T>>使う
2023/03/22(水) 21:30:41.78ID:Bu7rNmu4
マニュアルに書いてるような内容をやたら饒舌に語るとChatGPT感出るね
2023/03/22(水) 21:32:36.00ID:VRM+VuH6
>>255
>ナイーブなハッシュテーブルをVec<Option<T>>で実装する人はいるかもしれない
その場合でもTは(u64, K, V)
2023/03/22(水) 21:36:57.10ID:fGWMZjSN
Vec<Optionは普通に使うぞ
今書いてる部分と似たようなことをしてるregexのソースを見たらVec<Option使ってる
普通そうなるよな
2023/03/22(水) 22:15:33.42ID:ngpWOwSU
>>257
まるで知能は互角で内容だけが違うみたいな言い方だが
知能の差を見せつければいいだけだよ
2023/03/22(水) 23:19:58.21ID:M/QYX+I6
Vec<Option<T>>が使われないなんていう話は誰もしてないのにね
話が通じなくてもう面倒くさ過ぎるわ
2023/03/22(水) 23:35:18.64ID:3T9wSwPZ
たぶん論点はfilter_mapの話からここ

> vec![None, Some((1, 2)), None, Some((3, 4)), None];みたいなのはこれがすでに入力値に対して何かしら関数適用した結果なんだよね

> Vec<Option<V>>みたいなデータがどこからともなく自然発生するわけないんだから全体のパイプラインを考えろって言ってるの

でもこの主張は間違っていて
疎なデータ構造ならいきなりVec<Option<T>>が現れる
初期値オールNoneから飛び飛びにSome化していく
そのVec<Option<T>>は何度も使うからのイテレータ処理の一時的に現れるものでもない
2023/03/23(木) 00:27:50.25ID:WQSgJ4cO
構うから暴れるんすよ
2023/03/23(木) 07:45:41.23ID:ZvBDBUI1
グラフ構造でVec<Option<usize>>使うこともある
さらにインデックス自体のマッピングにも使われたり
// Maps old index to new index. None if not yet visited.
let mut remap: Vec<Option<usize>> = vec![None; self.nodes.len()];
2023/03/23(木) 08:16:41.69ID:uJzov1zR
公式ドキュメントとchatgpt
これだけあれば全て滅びる
2023/03/25(土) 10:51:05.32ID:F0OLKMhM
人間があれやこれやするよりも
全部 AI 翻訳に任せりゃインジャネーノ
267デフォルトの名無しさん
垢版 |
2023/03/27(月) 10:33:42.84ID:IqXvBms8
>>263
本当にそうだったね
268デフォルトの名無しさん
垢版 |
2023/03/27(月) 13:18:10.65ID:hjxGI+jP
そのうち
課題を見つける能力
課題を提起する能力
がメインとなるんやろな
1人会社が当たり前になりそう
269デフォルトの名無しさん
垢版 |
2023/03/27(月) 17:47:50.73ID:ppqykIl7
>>268
今までもそうだったけど気づいてない人が多かったというだけ
解けることが事前にわかってる問題を与えられて解くだけの人は今までも価格競争にさらされ段階的に置き換えられてきた

機械学習による変化は機械に解かせることのできる問題の抽象度が上がったこと
270デフォルトの名無しさん
垢版 |
2023/03/30(木) 21:28:14.05ID:O05INV+E
samタレットを壊されないかつ迎撃もできる状態で設置する方法ってない?
拠点屋根に四台設置してんだけどログインする度に毎回壊されてるわ
271デフォルトの名無しさん
垢版 |
2023/03/30(木) 21:34:58.46ID:O05INV+E
ごめんスレ間違えた
2023/03/31(金) 12:09:07.07ID:lEKZGT8D
それはrustだろ?ここはrustスレ。間違えるなよ
2023/04/01(土) 04:03:16.63ID:ncnK4efa
Interface 2023年5月号
550号特別企画 2大特集 Linuxでも正式サポート,組み込みや車載で注目を集める 質実剛健 Rust言語
3月25日発売 (定価 1,200円+税)

第1特集:C言語と比べて理解する
第2特集:マイコンで動くフル機能Rust
特別付録:初めてのRustプログラミング
新連載:毎号実験!自律移動ロボット
2023/04/01(土) 16:12:14.56ID:MxqBV1k0
>>273
面白そうだな。組み込みだと実装依存のCコードがまかり通っていたりするからな
2023/04/02(日) 17:52:37.39ID:w9dFgeBH
interface読んでる連中には難しいんじゃないの?
2023/04/02(日) 18:01:44.10ID:Xkdfgrgv
むしろこれを機に組み込みの勉強でも始めてみようかしら
2023/04/02(日) 18:02:25.20ID:oh3DHZZg
>>273
本屋で見てきた。個人的にめぼしい解説はCMSIS-DAPくらいで
大体The Embedded Rust Bookで十分かな
2023/04/02(日) 19:09:06.81ID:w9dFgeBH
組み込みだったらmrubyだよね
しらんけど
2023/04/03(月) 00:25:42.34ID:XRTgFvZO
そのうちrust謹製の組み込み OS とか出てくるんじゃねえの
2023/04/03(月) 00:53:16.98ID:OPvO6xnV
>>279
Google が KataOS を発表してる。 今は CantripOS と改名してるっぽいな。
どこまで本気なのかよくわからんけどコードは Github に有るから見物してみたらいいんじゃない?
2023/04/03(月) 09:12:06.30ID:45NlJXFV
組み込み分野を目指す学生はPythonばっかり
これを機にRustやCやC++にも目を向けて欲しい
組み込み分野の実務でPythonはつぶしがきかない
2023/04/03(月) 11:15:42.36ID:wQbZbh4b
組み込みでPythonとか使うのか
一番親和性の感じられない組み合わせやな
283デフォルトの名無しさん
垢版 |
2023/04/03(月) 11:32:22.07ID:AEelnK5w
ラズパイでしょ
2023/04/03(月) 11:39:22.47ID:DEHD7IX8
ラズパイは組み込みじゃないだろw
組み込み向けだと MicroPython とかあった気がするけど使われてるのかねぇ
2023/04/03(月) 11:55:49.94ID:weCnHsyM
ラズパイはLinux系OSが動いていてX Windowを立ち上げてデスクトップPCにすることも可能な環境
昔からからの組み込みが指すのはOSがないもしくは簡易なものしかない環境でありそこでPythonは使われない
2023/04/03(月) 12:04:38.11ID:GLvgK6Zq
組み込みかどうかと言うより
ミッションクリティカルかどうかと言ったほうが正確か
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況