Rust part9

■ このスレッドは過去ログ倉庫に格納されています
2020/08/23(日) 01:07:35.52ID:MgEpWwVh
Mozilla発のRust言語のスレ

公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

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

前スレ
Rust part8
https://mevius.5ch.net/test/read.cgi/tech/1579834072/
2020/08/23(日) 10:31:18.31ID:WHl934bN
Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
2020/08/23(日) 12:12:13.82ID:vopEnHQM
いちおつ
2020/08/23(日) 13:15:25.53ID:jbA8Vxfm
最近は初学者向けの文書も充実してきてるね

Tour of Rust
https://tourofrust.com

Rust explained using easy English
https://github.com/Dhghomon/easy_rust
2020/08/23(日) 15:24:56.55ID:dfu3xBf1
http://zsiciarz.github.io/24daysofrust/index.html
今これ読んでる
2020/08/24(月) 02:54:03.17ID:ko9AntT7
日本語でおけ
7デフォルトの名無しさん
垢版 |
2020/08/24(月) 03:09:08.38ID:gAClNVkQ
web_sys使って意図的にHTML食わせてDOM操作とかしたいんだけどこれって出来ない?
https://docs.rs/web-sys/0.3.44/web_sys/
2020/08/25(火) 22:04:20.93ID:cBDpP6RF
>>7
rustからDOM叩くのはバインディングさえ用意すれば出来るけど"意図的にHTML食わせて"の意味がわからん。
9デフォルトの名無しさん
垢版 |
2020/08/26(水) 09:25:11.81ID:zXQp5MBn
>>8
HTMLのテキストをDocument::from(&html_text)みたいに読ませて、そこからDOM操作してDOMのvalueとかattrとか読みたい。
他のHTMLパーサーは規格がバラバラだからweb_sys使いたい
2020/08/26(水) 09:37:17.33ID:4U25QJJo
>>9
DOM操作なんかしないで、これ使おうぜ
https://github.com/tanakh/easy-scraper
2020/08/26(水) 10:49:33.15ID:goOahd89
>>10
それkuchikiをそのまま使うのに比べてどういうメリットがあるの?
css selectorで指定できたほうが簡単で柔軟だと思うんだけど

>>9
HTMLパーサーの有名どころは、scraper, select, kuchikiの3つだけど
どれも内部的にservoのhtml5everを使ってるから一緒じゃない?
12デフォルトの名無しさん
垢版 |
2020/08/26(水) 14:28:06.12ID:zXQp5MBn
easy-scraperは個人的に仕様がダサいと思う

>>11
web_sysのドキュメント見たら分かるけど、APIがかなり豊富でMDN遵守してるし、wasmにも移管できる。
その三つは楽だけどそれ以外はweb_sysの方が良いから
2020/08/26(水) 15:34:22.88ID:goOahd89
>>12
wasmにも移管できるって、web-sysはwasm前提だと思うんだけどwasm以外で使えるの?
2020/08/26(水) 17:13:59.22ID:Yn/rXsvn
>>12
ダサいといえばダサいんだが、綺麗さより楽さを取ったデザインって感じの話が作者のブログに書いてあったよ。
2020/08/26(水) 21:28:36.70ID:mE3MiLfN
>>9
whatwg DOMにDOM Level3 Load & Saveがないから今のDOMで外部ファイルのパースはできない。
適当なAPIでファイル読んでwasmにコンパイルした他のDOM Level3実装に食わせればいい。
rustで書かれたDOM Level3実装が見当たらないから他言語になるかな。

whatwgのDOMはesからhtml操作する以外は考えてないから、そういう事したいなら他でやるしかないね。
16デフォルトの名無しさん
垢版 |
2020/08/26(水) 22:06:03.86ID:JjGrRnat
綺麗に作れないから自分が楽な設計をしたというだけ
アラフォープログラマにありがちな言い訳
2020/08/27(木) 02:24:33.81ID:yLQzP5wb
無能の僻みかな
2020/08/27(木) 03:10:08.73ID:MrnqDky1
>>16
「楽な」は「楽に使える」という意味だぞ。
綺麗な設計を捨てる方が作るのは大変に決まっとろうが……。
19デフォルトの名無しさん
垢版 |
2020/08/27(木) 04:23:21.10ID:FQ07KrIG
>>13
ごめん、そこらへん認識甘いかも
wasmのランタイムじゃなくて、普通にrustcでも動くんじゃない?

>>15
そうなんだ、貴重な情報ありがとう。
20デフォルトの名無しさん
垢版 |
2020/08/27(木) 08:43:15.31ID:bHW4ZDaj
>>18
そう主張してるが本人が楽なだけ
2020/08/28(金) 01:00:10.14ID:LEZPXhgF
easy-scraperのブログみて試しにkuchikiでやってみたけどドキュメントがなさすぎてkichikuだった

次はscraperにする
2020/08/28(金) 10:56:42.59ID:kaNWPz+d
今月の新機能 Option::zip の使いどころが分からない
こんなの要らないだろ
https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.zip
23デフォルトの名無しさん
垢版 |
2020/08/28(金) 15:11:57.10ID:AUb/6LnR
使うならOption版の論理演算とかかな
2020/08/28(金) 23:01:39.34ID:LEZPXhgF
the bookの分かりやすい更新履歴みたいのってある?

1度読み終わって以降に新しく追加された章や節がないかを確認したいんだけど
githubのcommitログ眺めていく以外の現実的な方法が見つからなくて困ってる
2020/08/29(土) 00:41:53.30ID:JtEdK3mn
>>22
cons cellにしてからflatするの面倒くさい。
俺はvec::Drainをas_sliceする用途がよくわからん。ただの変換用だろうか。

こっちの互換性残ってよかった。
ttps://github.com/rust-lang/rust/pull/74150/
2020/08/29(土) 17:57:40.88ID:6ekcNRq6
anyhowとthiserror 初めて知ったわ
std::Errorが便利になるまではこれ使っとけばよさそうだね
2020/08/29(土) 22:59:59.85ID:CxDsroMX
とっくにfailureのフィードバック終わってるけど、ver古くない?
2020/08/29(土) 23:02:55.48ID:MYuD75tc
結局今は何使うべきなの?
std::Error? failure? anyhow?
2020/08/30(日) 03:03:14.91ID:A+BfCyCQ
@rustlangって日本語のRTもするのか
機械翻訳で読んだのかな
30デフォルトの名無しさん
垢版 |
2020/08/30(日) 11:07:07.53ID:YXE1VqL6
いつになったらベンチマークStableにすんだよな
2020/08/30(日) 18:03:13.46ID:nkt3Z4R5
ベアメタル用のコードを-C opt-level=0でコンパイルして乗算のオーバーフローチェック等のpanic機構って使用できる?
アセンブラリストを出力すると存在しないラベルの分岐命令が出力されるんだが正常な動作なのか・・・
3231
垢版 |
2020/08/30(日) 18:53:07.92ID:nkt3Z4R5
例えばこんな感じ
ttps://uploader.purinka.work/src/17641.png
callqの行き先が不明
2020/08/30(日) 19:51:29.80ID:03fMpyFE
--emit asmってlibcoreとリンクしたもの吐くの?
リンクされてないだけでここ呼んでるだけな気がする
https://github.com/rust-lang/rust/blob/1.46.0/src/libcore/panicking.rs#L39
2020/08/30(日) 22:35:01.08ID:vWRii7PY
>>28
failureは役目を終えた。std::error::Error,thiserror,anyhowでfailure相当になる。
最近はenumxのcexで静的例外風にかけるけど。

>>31-33
panic_handlerを書いた覚えがないなら自分で書く。stdにはデフォルトの実装が用意されてる。
The Embedded Rust Bookに詳しく書いてあるから、rustupでローカルにダウンロードしてrustup docで開ける。

emitだとコンパイルまでしかしない。依存先すらコンパイルしてなかったと思う。
3531
垢版 |
2020/08/30(日) 23:57:14.44ID:mEmNBl/k
サンキュ

>>33
ビンゴだった。でも欲しいのはアセンブルリストなのでlibcoreを含むリストをどう入手するかが課題です
objdumpだと元のソースコードの行数等のデバッグ情報が失われるみたいだしグローバルの有無等の取得方法も判らないし
そもそもgasフォーマットじゃないから見方が判らないところがあるし

>>34
panic_handlerを自分で書きたいのはヤマヤマですが記述例が見つからず棚上げ状態です
ttps://rust-embedded.github.io/book/start/panicking.html
は見ていますが記述例は見あたりませんし
36デフォルトの名無しさん
垢版 |
2020/08/31(月) 08:19:34.04ID:DTQYV4xt
ターミナル上で色つけるのとテキストポジションを決めたいだけの簡単なTUIアプリ作りたいんだけど、有名なTUIクレートが多くて迷ってます。
適切なクレートが何か分かる方教えてください。
2020/08/31(月) 10:44:07.07ID:8VYSRGWn
複雑なことしないなら termion

なんてどう?
38デフォルトの名無しさん
垢版 |
2020/08/31(月) 20:17:03.77ID:DTQYV4xt
>>37
ありがとうございます。一度見てみます。
2020/08/31(月) 22:50:36.76ID:hNA5PDaQ
>>35
英語読めないって話?
>A behavior can be chosen by declaring a #[panic_handler] function. This function must appear exactly once in the dependency graph of a program, and must have the following signature: fn(&PanicInfo) -> !, where PanicInfo is a struct containing information about the location of the panic.
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior but there are plenty of commonly used behaviors. These common behaviors have been packaged into crates that define the #[panic_handler] function. Some examples include:
40デフォルトの名無しさん
垢版 |
2020/09/01(火) 00:12:49.85ID:OUJLkiQD
MirakurunクローンのmirakcってRustでかかれてるのか

ソースちょっとのぞいてみたけどサッパリだった
41デフォルトの名無しさん
垢版 |
2020/09/01(火) 00:14:06.84ID:pQTVtNeX
よく作れるよなあ
2020/09/01(火) 00:23:01.46ID:TpxWZL4k
>>35
記述例が見たいならそこからリンクされてるpanicハンドラクレートのソースを見ればいい。
例えばこれとか。

https://github.com/japaric/panic-abort/blob/master/src/lib.rs
2020/09/02(水) 00:14:27.98ID:I/VQ/2li
>>42
そうじゃなくて
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior
の意味がわからないんだろう。ベアメタルで人の書いたpanic handlerの中身なんて読んでも意味ないし。
4431
垢版 |
2020/09/02(水) 08:06:57.73ID:s4/GEX11
>>42
それだと基本的に>>32と大差なく見えるというかリンク後に逆アセンブラリストを追いかけたら
最終的にfn panicへ制御が渡っている事を確認しています
>>34でpanic_handler書いていないみたいな事が書かれていたので別の書き方があるのかと・・
2020/09/03(木) 00:54:39.65ID:d+ZpNCKo
Supporting Linux kernel development in Rust
https://lwn.net/SubscriberLink/829858/281103f9c6fd0dc2/
46デフォルトの名無しさん
垢版 |
2020/09/03(木) 13:59:41.08ID:knKXFRQt
お前らの考えとしてぶっちゃけどうよ?
今後10年でc/c++を凌駕する存在になり得るのかRustは
47デフォルトの名無しさん
垢版 |
2020/09/03(木) 14:09:27.73ID:1kMF5+E3
10年もありゃRustベースのもっといいやつが出てきそう
48デフォルトの名無しさん
垢版 |
2020/09/03(木) 14:28:37.24ID:DK3Ul6vK
Dはもう20年になるのか胸熱
2020/09/03(木) 14:49:09.48ID:p5IeVBH6
C++ 30よりは普及するんじゃないか。
(30とかどんな魔境になってるんだろうか…)
2020/09/03(木) 16:20:07.25ID:Tou2TpEC
Rust++もそこそこの魔境になるから大丈夫
2020/09/03(木) 16:22:17.40ID:Tou2TpEC
折角Edition分けしてんだし、一部後方互換性をバッサリ捨てて冗長な表現を纏めて++回避したら流行りそう
なおロードマップ見渡してもその予定は一切御座いません(笑)
2020/09/03(木) 21:15:25.18ID:303ndmJQ
Rustって未だにセルフホストできていない事に驚いた
標準添付のライブラリのビルドを試みたら
>error[E0554]: `#![feature]` may not be used on the stable release channel
等が大量に吐かれたw 要nightlyかよ
2020/09/03(木) 22:16:06.69ID:ciEvly1U
>>52
それをセルフホストできてないというかどうかは知らんがビルドしたいならx.py使えよ。
bootstrapにはそれ用のオプションがちゃんとある。
2020/09/04(金) 08:11:24.22ID:19D8+X78
rustc: 1.48.0-nightly (130359cb0 2020-09-01)
src: 1.46.0
でもダメだった

>>53
丸ごとビルドしたい訳じゃなくて一部だけビルドしたい
ttps://qiita.com/kotetuco/items/54af67d5663013ad0db7#rust-core-library%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B
こんな感じ。実際にはコンパイルオプションを調整したいけど
コンパイルできる組み合わせを探すしかないのか?stableとnightlyじゃコードツリーのディレクトリ構造からして違う有様だしなぁ
2020/09/04(金) 10:04:14.14ID:8dK8t4gI
>>54
coreだけでもビルドできるが…。さすがに開発中に毎回bootstrapするわけない。
https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html#build-specific-components

自己流で試行錯誤するよりまず公式通りにやってからカスタマイズする方がいいのでは。
2020/09/04(金) 15:34:10.06ID:7Uip4zIA
>>55
thx。それを実行するにあたって最低限必要な物ってなんだろ。書いていないような・・・
Pythonとbetaなコンパイラが必要そうっぽい事は判るけど
というかコンパイラも含めたビルドは出来るだけ避けたい
環境(Windows)やマシン(2Core/8GB)のリソース的に成功するか判らないし失敗した場合の
トラブルシュートも難しい

あとそのコマンドはnightly?beta?限定のような。1.46.0 stableのコードツリーだとディレクトリ名が違う
57デフォルトの名無しさん
垢版 |
2020/09/04(金) 18:04:10.13ID:REp3w4XA
>>51
ほんそれ。
ある程度はシュガライズすべき
2020/09/04(金) 18:33:08.78ID:GMhQHpfx
>>56
環境構築はREADMEだな。
https://github.com/rust-lang/rust#building-on-windows

ディレクトリはちょうど運悪く先月くらいに構成変わってて、今betaまで反映されてるから次のリリースでstableも同じになる。
とりあえず今のstableなら以下でcoreだけビルドできるはず。
./x.py build --stage 0 src/libcore
コンパイラはx.pyが適切なバージョンを勝手に取ってくるから任せればよい。
2020/09/05(土) 10:06:13.78ID:TAeq65PR
2Core/8GBでLLVMビルドするのかなりつらそう
60デフォルトの名無しさん
垢版 |
2020/09/05(土) 13:17:51.96ID:c1warezh
forとiterの使い分けってどうしたらいいんだろ
用途?
2020/09/05(土) 15:05:36.16ID:TAeq65PR
コードが読みやすくなる方を使う
62デフォルトの名無しさん
垢版 |
2020/09/05(土) 21:40:57.16ID:I89Y16zH
codewarsをRustで解いてるけどなかなか勉強になる
2020/09/06(日) 00:09:09.42ID:/EPcKLfQ
戦争反対
2020/09/06(日) 00:12:10.28ID:YpEFqLu/
敗戦国に対する差別を助長するとアメリカで主張していこうな!
65デフォルトの名無しさん
垢版 |
2020/09/06(日) 13:05:53.33ID:iYICzO1R
Cargo.tomlにrustのバージョン指定する方法ってどうやるっけ?
どこかで見た気がするんだけどcargo reference探してもないから知ってる人いる?
2020/09/06(日) 13:33:28.17ID:378cUVT9
>>65
Cargoにその機能はないな。rustupの機能として
rust-toolchainファイルにバージョンとかnightlyとか書けるよ。
当然rustupを使っていないと効果はないけど。
2020/09/06(日) 13:50:50.21ID:NTBgE1bF
低レイヤーのアルゴリズム実装てrustは実は向いてないんだよ。
2020/09/06(日) 20:53:31.66ID:q3JWysFz
>>65
MSRVのことかな
https://rust-lang.github.io/rfcs/2495-min-rust-version.html
69デフォルトの名無しさん
垢版 |
2020/09/07(月) 05:35:58.44ID:pQuWqVzw
>>68
おお、そうそう。ありがとう
70デフォルトの名無しさん
垢版 |
2020/09/08(火) 14:08:21.21ID:VQ4SFraN
なんでIteratorの方にはchunksとかwindowsとかないの?
Vecに変換するのめんどくさい
2020/09/08(火) 14:14:25.89ID:D8/F+ExD
stdにない理由はしらんけどItertoolsでできるっしょ
2020/09/08(火) 16:58:13.30ID:Qt4K4jXD
rustのormって何でdieselしかないの?dieselが完成されてるから?それともrustがdb使う用途に使われることが少ないとか?
2020/09/08(火) 18:04:31.50ID:7F3fj5vU
rustに関わらずormって限らられたシーンでしか使えない印象
2020/09/08(火) 20:34:32.20ID:iCuj3PWZ
>>70
任意のimpl Iteratorからスライス作るためにはcollectしてVecを作るなど、比較的重めの処理が必要になる
コストのかかる処理は明示的にやらせるというのがstdのポリシーなので、用意されていないのでは
あと利用者側で .collect::<Vec<_>>() を追加するだけでよくて対処が難しくないのもわざわざstdに追加しようとする人が現れない理由だと思う
75デフォルトの名無しさん
垢版 |
2020/09/09(水) 18:10:37.98ID:8UaafUk3
>>74
コストのかかる処理は ってIteratorにないからコストかかってるのでその理由は成り立たない気がする
個人的にはIteratorとスライスという違う型に同じメソッド名が生えてるのがあれなのかなと思った
76デフォルトの名無しさん
垢版 |
2020/09/09(水) 18:23:13.97ID:8UaafUk3
>>72
Dieselが早いうちに作られて支配的に使われるようになって他の連携クレートもdiesel用を用意してそして誰もいなくなった的な展開
個人的にはdieselは癖強いから完成度高くないと思う、ただ連携はかなり強い
77デフォルトの名無しさん
垢版 |
2020/09/09(水) 18:58:45.43ID:oR4G2d97
sqlxが本名だと思う
2020/09/09(水) 21:48:02.38ID:5DrZyU/S
Sqlx良いね
2020/09/09(水) 22:34:56.87ID:ldUOsxby
>>75
allocation不要なchunks/windowsの実装ってどうやるの?
Iterator ではなくて std::vec::IntoIter などに実装するということ?
2020/09/10(木) 07:20:42.22ID:CtWfYO23
itertoolsの実装どんなんかしらんけど、
itertoolsのchunksは各チャンクがイテレータになってるし、
windowsのほうはtupleで帰ってくるからアロケーションしないんじゃね?
2020/09/10(木) 07:23:35.08ID:CtWfYO23
すまん、チャンク・ウィンドウの個数分のアロケーションはさすがに発生してると思うわ多分
82デフォルトの名無しさん
垢版 |
2020/09/13(日) 20:54:26.61ID:e9EK7dt7
VS2019の拡張機能にRustがあるんだけど、これは本物ですか?
VSCodeのとは違うみたいで情報がない
83デフォルトの名無しさん
垢版 |
2020/09/14(月) 01:42:47.60ID:uF+7D4//
&'static strってデータかテキスト領域どっちに入るの?デバッグ方法分からん
2020/09/16(水) 01:12:00.89ID:fJPIYTy9
Rustってむずくないですか
これ最初にプログラムやる言語じゃないよね…昔にC触ったとかそんなレベルだと全然わからん
85デフォルトの名無しさん
垢版 |
2020/09/16(水) 10:24:27.14ID:l4YX/vwQ
むずくない
めんどくい
86デフォルトの名無しさん
垢版 |
2020/09/16(水) 11:57:04.37ID:Kj2RyNnD
std::collections とかが複数形でstd::markerが単数形な理由ってなに?
2020/09/16(水) 12:36:20.15ID:g8ss57Sd
>>85
この言語は、深いことをやろうとするとメンドクサイだけではなく、
ちゃんと仕様が公開されて無い事が多いから難しくなる。
2020/09/16(水) 13:09:08.47ID:mQPJrXyp
え?仕様公開されてるだろ英語で
89デフォルトの名無しさん
垢版 |
2020/09/16(水) 13:54:55.78ID:GiXJ7CmX
自分の足も撃ち抜けない不自由な言語
2020/09/16(水) 14:23:57.05ID:r03rWfLq
>>87
公開されていないというより確定していないことは結構ある。
細かいところでは処理系の実装の現実に頼らないとしゃーないってのは
C/C++ でもなんでも同じだし、
まあそんなもんです。
2020/09/16(水) 20:12:39.40ID:Gmhk8xHy
具体的な話をしてくれ
2020/09/17(木) 04:57:16.23ID:SW6+Z1Cs
>>88
公開されてない。
2020/09/17(木) 06:48:06.13ID:VCs9Ea+4
何の仕様が知りたくて見つけられなかったのか言ってくれよ
94デフォルトの名無しさん
垢版 |
2020/09/17(木) 09:31:52.63ID:k60QR6Dx
チュートリアル追ってみたらLinkedListの実装に結局
unsafeなことやらなきゃいけないみたいに書いてあって
やる気なくしたアホくさ
2020/09/17(木) 09:38:19.49ID:bFAy1lxI
LinkedListはもうオワコン
あれはCPUが遅くてキャッシュミスとかあまり考えなくても良かった時代のもの
2020/09/17(木) 09:49:42.39ID:CU1OLpA0
初心者が「まずは独自コンテナクラスでも実装してみるか」っていって討ち死にしていくのはしばしば見られるよな。
Rustのコンテナ実装は高難度なので素直に標準ライブラリを使いましょう、ってどこかに書いてあるべきかも。
97デフォルトの名無しさん
垢版 |
2020/09/17(木) 09:53:23.90ID:k60QR6Dx
高難度?ただ面倒なだけじゃなくて?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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