Rust part21

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2023/08/15(火) 22:24:39.45ID:xzxy4cgp
公式
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 part20
https://mevius.2ch.net/test/read.cgi/tech/1677771928/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.2ch.net/test/read.cgi/tech/1514107621/
575デフォルトの名無しさん
垢版 |
2023/11/09(木) 15:19:57.39ID:j64EPVX0
すまんが、VSCode上から/examples下にあるものをデバッグしたい場合ってどうやんの?
他人の作ったクレートのコードを読む上で、これを楽にできると個人的にはありがたいんだけど・・・・
2023/11/09(木) 22:37:41.41ID:vNSbYVSe
バージョンと拡張機能によりそうだけど自分の環境(Windows)だと
examples内でもfn main()の上に
|> Run | Debug
みたいなinlayが表示されてとりあえずそこからデバッグ実行できた
設定作ればほかの起動方法もあるはず

たぶんrust-analyserの機能だけどデバッガは環境依存だからわからん
2023/11/12(日) 02:38:23.29ID:O0gb6uIB
gen はいわゆる協調スレッドなのか。
言語機能として取り込むにはちょっと豪華すぎる気もするな。
2023/11/12(日) 04:55:58.85ID:2kP6dQwH
genはasyncと同じでコルーチンだよね?
そしてasyncと同じく単純な状態マシンで実装だよね?
579デフォルトの名無しさん
垢版 |
2023/11/12(日) 07:45:09.87ID:sBWcqg0h
>>576
ありがとう!バッチリできたぜ!!!
580あぼーん
垢版 |
NGNG
あぼーん
2023/11/12(日) 11:30:27.32ID:cviedAAA
>>580
既にやってるよ
582デフォルトの名無しさん
垢版 |
2023/11/14(火) 12:58:29.06ID:SRCspH78
https://crates.io/search?q=arete

0なんだが
583デフォルトの名無しさん
垢版 |
2023/11/19(日) 15:31:52.34ID:J3g/JpQ/
rust初心者です。
cだとポインタに対してキャストすることで完全にプログラマ任せのキャストが出来ます。
例えば文字列を参照するポインタを強引に数値として解釈させるなど、好きなように出来ます。
rustでは簡単に調べたところparse().unwrap()などが必要だそうです。
rustはcのようにバイナリフォーマットをプログラマ任せにして自由にキャストさせる習慣はないということでしょうか?
584デフォルトの名無しさん
垢版 |
2023/11/19(日) 16:23:14.27ID:/G2k3fWt
あるよ
585デフォルトの名無しさん
垢版 |
2023/11/19(日) 16:29:48.57ID:eJPqaRZx
#[repr(C)]
as *const T
as *mut T
as usize
bytemuck
slice::from_raw_parts
2023/11/19(日) 16:46:38.60ID:ib2hIQe1
バイナリや文字列と内部表現・の相互変換(シリアライズとデシリアライズ)ならば
Rustではdeser crateファミリーを使って専業分離することが多いね
2023/11/19(日) 18:17:50.06ID:b3b61WiC
シリアライズ関連のクレートを使った方が楽だし、もうちょっと簡易的にやる場合でも from_le_bytes などの組み合わせで安全にやれるから不必要にプログラマの責任で管理するべきではないよ。
C でもいまどきは高レイヤのプログラムならそんなに気軽に未定義の型変換はしない。(もっとも、高レイヤではあまり C を使わないけど)
2023/11/19(日) 18:43:57.48ID:ib2hIQe1
ごめん、アホなスペルミスしてる
deserでなくてserde
あとserde_bytesやbincodeを併用
589デフォルトの名無しさん
垢版 |
2023/11/19(日) 23:58:07.78ID:J3g/JpQ/
少し調べてより明確に言語化出来ました。
Rustはゼロコストのserderができますか?

Cだとしばしばそれができます。構造体の要素次第ですが。
で、調べてみるとrkyvというフレームワークが近いことを可能にしているようです。
ゼロコピーと謳っていますが、何らかの演算コストが生じているのかどうか。
Cなら構造体を注意深く設計すればキャスト一発で実行時コストゼロでserderが完了するのです。
590デフォルトの名無しさん
垢版 |
2023/11/20(月) 02:05:15.84ID:ilBq5gGe
>>589
>Cなら構造体を注意深く設計すれば

なんでそのコストを無視するんだい?
591デフォルトの名無しさん
垢版 |
2023/11/20(月) 02:16:16.40ID:UjbzCz3W
>>590
実行時コストじゃないからです。
例えばRustのゼロコスト抽象化という概念もあくまで実行時コストがゼロであることを意味しているはずです。
2023/11/20(月) 02:16:45.62ID:K0+PyRHv
#[repr(C)]付けてstruct/enum/unionをCと同じ使い方すればC互換のレイアウトになるはず
2023/11/20(月) 06:49:29.19ID:dNsGQu4G
>>589
Cと同じことがしたいだけならrepr(C)で構造体定義して
std::mem::transmuteでキャストすればいい
rkyvみたいなフレームワークはもっと高度なデータ型(ハッシュマップとか)で同じことをやるためのもの
2023/11/20(月) 08:53:23.51ID:LwcosZwN
抽象度の高いレイヤを挟んでもかなり最適化で消えるよ。
逆に自由なキャストのコストはゼロではない。
ハードウェアの癖、処理系の癖を理解している人がうまくチューニングすれば性能はあがることも多いけどキャストして直接に読み替えたら実行時コストが低くなるとは限らない。
2023/11/20(月) 13:51:58.80ID:MS7hPbOQ
>抽象度の高いレイヤを挟んでもかなり最適化で消えるよ。

それはもちろん判ってて
その上で厳密にゼロじゃないから問題視してんじゃん
2023/11/20(月) 15:34:39.51ID:JXHwx0JF
具体的にRustを使うメリットよりデメリットが上回る例があるならそれを出さないと話がわからない
色んなバイナリプロトコルもRustで実装されて問題になっていない
2023/11/20(月) 17:27:20.27ID:cTETCu/a
transmuteだとalign合わせるためにコピーする場合がありそうだから
本気でCと同じゼロコストで読み替えするならポインタ(参照じゃない)をとって
as *const T(as *mut T)で目的の型にキャストして参照(&T, &mut T)に戻す感じかな
どうせunsafeだからunion使う方がいいかもしれないけど
2023/11/20(月) 17:54:17.33ID:PG0EBfXZ
Cから移植する場合でtagged unionをうまく移植する方法はないだろうか
unsafe使わずに

struct tagged_value {
enum tag t;
union {
hoge h;
fuga f;
} u;
};

みたいなの
2023/11/20(月) 18:11:32.44ID:NaWZknyA
>>598
enumで
2023/11/20(月) 18:17:00.50ID:ieYqPgSw
>>595
最適化の話は「どちらにしてもゼロとは限らない」という話のための前ふり。
仮にその場所に限ってはゼロになったとしても周囲の最適化の足を引っ張ることもある。
総合的な速さを出すには諸々を加味したチューニングが必要なので単純にキャストしたほうが速いとは考えるなというのが主旨。
もちろん諸々を考慮して検証した上で実際に速くなることが確かめられるならそれを否定したりはしないよ。割に合うことは少ないとも思うけど。
601デフォルトの名無しさん
垢版 |
2023/11/20(月) 21:13:04.59ID:ojqzhkRS
ちゃんと考えるよ。
角度とか
2023/11/20(月) 23:02:22.90ID:QHUUbGYT
重要なのは、Rustで書くと遅くなる(コストがかかる)パターンを、実際に発見できたのかどうか?

もしそのようなパターンを発見できて、(Cによる)速い方法でも安全性に問題がないのならば、
Rustの歴史ではそれを(必要なら)unsafeで記述してライブラリの中に安全に閉じ込めてきた
そのためRustで一般プログラマーがunsafeを使わずに記述しても、ほとんどのケースでCと同等の速さが出る
603デフォルトの名無しさん
垢版 |
2023/11/21(火) 04:05:24.41ID:60zWiP9n
個人的な懸念点は処理のゼロコピー化においてCに劣るのか?という点
Rust界隈でゼロコピーフレームワークが色々あるがどういう工夫が行われているのか
調査は時間がかかりすぎるからやらないw
604デフォルトの名無しさん
垢版 |
2023/11/21(火) 04:13:54.83ID:60zWiP9n
データ転送はCPU上の演算と比較してかなり遅い処理なので
ゼロコピーで劣ると一部の処理でかなり遅くなる
そしてベンチマーク系のプログラムではゼロコピーはあまり問題にならない。
605デフォルトの名無しさん
垢版 |
2023/11/21(火) 04:16:28.76ID:60zWiP9n
ゼロコピーが問題になるのはserder、通信
あとたぶんOSの実装でも問題になるはず
だから数学的計算というよりはシステム間の垣根を超えるようなところで問題になる
RustがベンチマークでC並といっても、あくまで数値計算系の話
2023/11/21(火) 08:42:33.89ID:UPhRR3yr
ゼロコピーってのはオリジナルのバッファ以外には追加でヒープアロケーションをせずに処理をするという意味
2023/11/21(火) 10:07:46.27ID:ZzleWc4x
ウザイからttf_parserのコードでも読んでくれば
2023/11/21(火) 11:00:12.68ID:HSO31doi
unsafe という名前が誤解の元になってる
unsafe に描く内容って結局安全な内容しか描いてはいけない訳だ
そして unsafe は使ってはいけない機能ではなくむしろ積極的に使って良い機能
2023/11/21(火) 11:55:27.06ID:pNsPVZam
こういうやつがいるからこそunsafeという名前に価値があるんだよな
2023/11/21(火) 12:57:54.74ID:4vFkathr
>>605
それらRustで書くことで遅くなった事例がない
むしろ例えばCDN世界トップのCloudflareは
Cで書かれたnginxを全面的にRustで作り直すことで
CPUリソースとメモリリソースを1/3に削減することに成功している
2023/11/21(火) 15:25:53.24ID:OibZ9mzY
Cloudflareのやつはnginxがスレッドベースで処理をブロッキングしてしまう(CPU時間とメモリを占有してしまう)から
マイクロスレッドで作り直した=基本設計を大きく変更したというだけで、Rustだからパフォーマンスが向上したというわけではない
2023/11/21(火) 16:18:31.31ID:Pb5WKpvw
stdをunsafeで検索するとUnsafeCellしか出てこなくて
unsafeな関数の名前がほとんどuncheckedなのは
let x = unsafe { do_something_unsafe() };
だとアホっぽいからかな
2023/11/21(火) 18:24:54.78ID:Fzh9NpIU
検索方法が間違ってる
そしてuncheckedはunsafeとは意味が違う
2023/11/21(火) 23:10:58.28ID:lumDzvUR
>>611
そこではなく
杞憂の>>603が言うところのゼロコピーやゼロコストはCとRustで同様に実現できているから
新たなシステムはCを使わずにRustで書いたという話ではないか
2023/11/21(火) 23:28:16.17ID:u3FDf3nL
外部入力をtransmuteとか地雷臭がハンパない
どうぞご安全に〜
2023/11/21(火) 23:39:45.33ID:lumDzvUR
transmute使わなくてすむsafeなライブラリ関数が揃ってるからね
2023/11/25(土) 09:15:59.95ID:rKTwm3uz
Rust って同じ変数名なのに違う型に出来るよね?
同じスコープで再定義出来ると言うか上書き出来る
名前が変わらないから便利って思うかも知れないが
気を付けてソース観ていないと途中で型が変わってるやん!ってなる
なかなか嫌な構文だね
可読性低下しない?勘違いしそう
2023/11/25(土) 09:18:00.86ID:rKTwm3uz
あと上書きされたとき前のリソースは上書きされたタイミングで消えてない
明示的に drop していれば消えるがしなかったら実は生きたまま
迷惑仕様じゃないかな
2023/11/25(土) 10:20:51.65ID:ytuM+CNS
>>618
同じスコープ内でシャドウィングする時は意味的に同じものを入れるようにする

前のリソースがすぐにドロップされないのはシャドウィング時にそのリソースへの参照を使う事で不要なアロケーションを避けられるから
2023/11/25(土) 12:38:39.68ID:EEEndPKs
シャドウイングされた時に勝手に消える方が迷惑仕様だな
その時点で他から参照されてるかもしれないし
2023/11/25(土) 13:46:10.54ID:V6cVkJ+M
>>617
Rustはプログラマーに優しい強い静的型付けの言語だから型が違えばエラーになるため混乱もなく大丈夫
また、型変換するたびに別の変数名にしなければいけなかった言語よりも便利でプログラミングも快適だよ
2023/11/25(土) 16:27:51.72ID:81rqCYd0
Rustの欠点は誰も使ってない所だけ
2023/11/25(土) 17:24:40.07ID:4EAT4Ovg
>>622
どうしてそんな悲しいこと言うの!
2023/11/25(土) 18:44:41.46ID:vlc4nTzz
誰も使ってないのってカッコいいな
2023/11/25(土) 23:55:37.33ID:B979bnCG
俺だけが知っている
2023/11/26(日) 09:12:21.52ID:k38CbPq9
ユーザーが少ないのはアドバンテージだってポール・グレアムも言ってる。
2023/11/26(日) 09:20:04.49ID:OE1+8Rl8
GAFAMで使われるようになった時点で言語として消え去る可能性は十分下がったし
別にこれ以上使う人増えなくてもいいんじゃないかな
日本のSIerにまで広まるなんてまずないだろうし
2023/11/26(日) 10:05:44.56ID:Deg4O8Si
言語じゃないけどBlenderみたいにいつの間にか覇権を取ってたりすることもあり得る
629デフォルトの名無しさん
垢版 |
2023/11/26(日) 11:39:45.82ID:d/KzVdDP
おまえが使ってるのに誰も使ってないって可笑しなことを言うのな
もしかしておまえも使ってないだろ?正直に言え
2023/11/26(日) 11:42:35.06ID:Deg4O8Si
「俺の周りじゃ」
631デフォルトの名無しさん
垢版 |
2023/11/26(日) 12:18:50.10ID:d/KzVdDP
ぼっちってこと?
2023/11/26(日) 12:23:12.23ID:oOwLuMql
Rust「きゃー、私のために争わないで
2023/11/26(日) 12:32:50.97ID:iMOX0Yuj
クズがこっちに移動してきたか
まかせろ
2023/11/26(日) 13:04:33.25ID:oOwLuMql
crateのバージョンが1.0になってないのが多いから、まだまだだなーって思う
2023/11/27(月) 02:23:02.91ID:hnitA9Px
ぼっちざRust
2023/11/27(月) 03:19:17.53ID:shAL5QFI
>>635
ちょっとかっこいいじゃん
637デフォルトの名無しさん
垢版 |
2023/11/27(月) 10:05:45.61ID:7/k6/GSg

https://www.youtube.com/watch?v=i-fbsgTWM5Q
https://www.youtube.com/watch?v=AVKkhpGsXoI
https://www.youtube.com/watch?v=ylxlLa9X_O0
https://www.youtube.com/watch?v=LqmtSQ8tmzg
2023/11/28(火) 08:31:02.24ID:t7+ip2Xg
Rustって名前が良くない
2023/11/28(火) 08:45:48.68ID:ruCnqVCc
Cナントカじゃそれこそカビが生えてる
2023/12/03(日) 08:34:26.30ID:JMjzgwiz
>>638
go-langよりはマシ
2023/12/03(日) 18:40:27.28ID:kcDV2U5x
go は何が駄目といってネーミングがクソすぎるからな
あとマスコットがキモすぎる
2023/12/03(日) 20:05:06.19ID:KItL/kTG
ogleとセットで売り出せていれば多少は救われたかもしれない
文字型runeの中二感は好きなんだけど
643デフォルトの名無しさん
垢版 |
2023/12/08(金) 13:43:21.24ID:QsZXn/jV
VSCodeのrust_analyzerが、全く関係のないC#のプロジェクトでも勝手に動き始めるようになっちゃった
みんなのところどう?他の言語とか使ってたら起動しちゃったりしてる???
2023/12/08(金) 15:21:20.43ID:FH+GH+Zi
>>641
ネーミングが死ぬほどクソなのは同意だけど
マスコットはかわいいじゃん!
2023/12/10(日) 04:46:02.96ID:RGphax9G
ʕ◔ϖ◔ʔ < お呼びですか?
2023/12/10(日) 11:57:04.81ID:1MxEINjf
つべでrust検索するとゲームばっかり出る
2023/12/21(木) 16:58:33.82ID:HvDn5p2W
GAFAMで使われてるから廃れることないし、
コミュニティに変な人が入って来ない方が居心地が良いまである
2023/12/21(木) 17:12:16.21ID:JI0UYSEL
gopher はちいかわと同じヤバみを感じる
2023/12/21(木) 17:13:31.75ID:HvDn5p2W
言語のマスコットネタは寒いよなあ
2023/12/22(金) 13:35:06.75ID:lJtOGqn+
カニのフェリスも割りと一般的な名前
2023/12/25(月) 09:35:30.12ID:734EcmtL
「Rust」言語向けの“ビジュアルタイムトラベルデバッガー”「FireDBG」が公開
https://forest.watch.impress.co.jp/docs/news/1557204.html
2023/12/25(月) 10:28:47.95ID:7mXOqNeO
タイムトラベル?使い物になるのか?
2023/12/25(月) 12:40:39.37ID:Sk+Bp6T/
タイムトラベル知らんのか
654デフォルトの名無しさん
垢版 |
2023/12/26(火) 01:14:24.20ID:79CvGGY2
>>652
CやC++やJavaでも昔からコールスタックは遡れたけど、あれのビジュアル良くしたやつとは違うのかね?
2023/12/26(火) 01:58:52.00ID:DHuhCQvi
>>654
違う
状態の変遷を戻ったり進めたりできる
つかググればすぐ出てくるやろ
2023/12/26(火) 04:22:44.20ID:hadQuCYF
>>634
コミュニティに入るPGのレベルが全体的に高すぎて
俺の実装でversionを1.0にするのはおこがましい的な萎縮が働いてそう
2023/12/26(火) 04:22:50.25ID:hadQuCYF
>>634
コミュニティに入るPGのレベルが全体的に高すぎて
俺の実装でversionを1.0にするのはおこがましい的な萎縮が働いてそう
2023/12/26(火) 08:35:59.69ID:P1ddGMJS
>>656
セマンティックバージョニングのせいだよ。
バージョンナンバーの付け方は基準があって互換性が維持されるときとされないときで数値の上げかたが違う。
しかしメジャーバージョンがゼロのときは基準の適用外で勝手にしていいことになってる。
初期は試行錯誤があって当然だからね。
キッチリした管理なんかしたくないからまだまだ初期だという体裁でゼロのままにしたほうが楽なんだよ。
2023/12/26(火) 08:50:16.75ID:RJv1OlmX
>>658
これやな
オレオレライブラリ作る時とか
絶対に1系まで上げない
2023/12/26(火) 09:58:50.36ID:4qW9SvtE
Rustの要であるfutures futures-coreなども0.3のままだな
hyperは先月ようやく正式1.0になり先週1.1になった
h2が0.3から0.4に上がった
2023/12/26(火) 10:02:59.91ID:QVgSLMrU
どうでもいいな
662デフォルトの名無しさん
垢版 |
2023/12/26(火) 11:10:33.20ID:rdxjbOn3
メジャーバージョンが0のライブラリなんて怖くてよう使わん
Julia並みの破壊的変更が来ても文句言えんからな
2023/12/26(火) 11:17:02.90ID:RJv1OlmX
そういう日が来たら全部壊して書き直した方が早いよ
自分の書いてる所の効率も洗練されて良くなるし
664デフォルトの名無しさん
垢版 |
2023/12/26(火) 11:53:58.51ID:druMhfTB
まあこういう感じの真面目にサポートとかする気のない人しか使ってない言語なんだろうな
2023/12/26(火) 12:09:12.16ID:aCwAChA1
>>656
それ他の言語でも散見されるぞ
1.0は枯れ切った後に出て実質でかい機能追加は行わなくなったところでつけることが多い
大抵凄腕の人のライブラリに多いような気がする
SemVerが浸透する前からこの状態だったし
2023/12/26(火) 15:06:21.44ID:iSUEMnuj
Inkscapeは一生1.0に上がらないと思ってた
2023/12/26(火) 16:49:51.67ID:KvBUmVJg
GitHub Issueが2627件あるZigはどうするつもりなんだろう
2023/12/26(火) 17:19:43.95ID:Y/g/LC26
どうでもいいな
ライブラリの質はSemverで測るものじゃないから
669デフォルトの名無しさん
垢版 |
2023/12/26(火) 17:33:22.23ID:E/z8PERd
ライブラリの質にsemver考慮しない人間、仕事にRust使う気がなさそう
趣味プログラムで一年も生かす気がないコードならまあわかる
仕事で限られた工数で長期サポートするならsemver気にしないはありえん

まあRustなんて所詮趣味プログラミング向けなのかもな
まともな仕事には使えん
2023/12/26(火) 17:36:00.58ID:APrQ9KVs
個々のバージョンにおいて出来が良いかどうかはともかくとして、
長期的な互換性に対する姿勢を測る指針のひとつにはなる。
2023/12/26(火) 17:43:23.74ID:AKSTTleD
帰れゴミカスども
https://mevius.5ch.net/test/read.cgi/tech/1701997063/
2023/12/26(火) 18:34:35.78ID:6dPf9R/w
ライブラリを選ぶときや使うときには当然Semverは気にする
でもそれは質を測るものではない
その違いが分からないとか理解に苦しむ

ま、どうでもいいけど
2023/12/26(火) 18:42:19.39ID:krXurI2c
rustを使う人は、みんな凄腕で無ければ自分で実装するイメージ。
674デフォルトの名無しさん
垢版 |
2023/12/26(火) 20:02:46.87ID:E/z8PERd
>>672
質って品質って意味だろ?
品質にはサポート品質は当然含まれるだろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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