Rust part22

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2024/01/20(土) 23:21:40.08ID:wyzQTwgG
公式
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 part21
https://mevius.5ch.net/test/read.cgi/tech/1692105879/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.2ch.net/test/read.cgi/tech/1514107621/
2024/02/06(火) 14:47:03.29ID:bbDh9Fvv
>>299
あなたが何言ってるかわかるけどnodejsでも
似たような使い方だしrust sdkの欠点と言われても
広く同意は得られないんじゃないかなあ
2024/02/06(火) 14:52:06.28ID:QhlaBKsr
>>302
欠点というか使い方を難しくしてるだけな気がするんだよな
普通にCLIでええやんって思う
2024/02/06(火) 14:59:31.38ID:bbDh9Fvv
>>303
awsに限らずweb apiのライブラリは
非同期にするのが主流だから
頑張って勉強してねとしか…
305デフォルトの名無しさん
垢版 |
2024/02/06(火) 15:05:27.46ID:eJTRS9Cw
AWSのSDKは.NETのが1番だな
2024/02/06(火) 16:38:39.75ID:m1uPeMIU
AWS SDK for Rustはsend()がめちゃくちゃダサい
そのうち大幅に改修されるだろうけど

>>299
ネットワークI/Oを同期で書くのはさすがにどうかと
2024/02/06(火) 16:55:31.82ID:/Z6uowCt
>>300
今から見ると微妙だがCLIと対応がつけやすいし
余計なことはしなくて良いから楽だよ
2024/02/06(火) 17:04:11.45ID:/Z6uowCt
>>306
どう書くか?はユーザーのユースケースによるからそうとも言えないよ
例えばAzureのCLIは--no-waitというオプションがあり
処理が成功するまで待つか待たないかを決められる
これこそユーザー視点の設計だよ
309デフォルトの名無しさん
垢版 |
2024/02/06(火) 17:08:06.92ID:8tVnzyvy
Google規模の会社が$1 million渡したくらいでわざわざアナウンスするなよな
タイトル詐欺じゃん

Improving Interoperability Between Rust and C++
https://security.googleblog.com/2024/02/improving-interoperability-between-rust-and-c.html
2024/02/06(火) 17:08:19.95ID:/Z6uowCt
非同期を押し付けることはユーザーのメリットにはならない
Rust SDKは作り直して欲しい
311デフォルトの名無しさん
垢版 |
2024/02/06(火) 17:21:49.29ID:HJO9dxnA
prostもblocking版の関数ないのかよってびっくりした記憶があるわ
C#版もPython版もasyncとblockingの両方あるのにな
2024/02/06(火) 17:23:58.68ID:pGyPKkef
>>299
>>まずAWSのAPIってのは基本的にすぐ返ってるの
>>この辺はわかる?

初心者でもそんなウソはつかないぞ
AWSに限らず任意のサービスに言えるが通信時間がかかる
さらに各サービス内で状態取得だけであっても実行時間がかかる

>>だから常に同期的に呼び出しで問題ないの

本気で言ってる?
通信時間と向こうでの実行時間の間こちらはずっと何もせずに待つわけ?
非同期プログラミングの意味すら理解できていてないのか?
313デフォルトの名無しさん
垢版 |
2024/02/06(火) 17:27:07.44ID:eJTRS9Cw
>>312
コンピューターにとって1秒待つって事がどれだけ長いかを理解してないんだろ
314デフォルトの名無しさん
垢版 |
2024/02/06(火) 17:28:50.84ID:2AaBK8OM
非同期の方が良いことが多いのは同意するが、非同期を押し付けられると「こんなプログラムのためにTokio入れるのかよ」って思ってしまうケースは存在する
2024/02/06(火) 17:48:41.35ID:Izyc/wZS
API が非同期で設計されてるのに、それを呼び出す側もさらに非同期でハンドリングするのは正直無駄じゃない?
ってのはわりと自然な感想だと思うけどな。

AWS の API なんてクライアント側で並列に呼び出したいユースケースも無いだろ。
バカスカ叩いてもスロットリングされるだけだし。
2024/02/06(火) 18:00:53.30ID:eyCZAgqI
>>315
APIの向こう側で非同期なのとこちらの処理を
同期か非同期化は関係ないよね
317デフォルトの名無しさん
垢版 |
2024/02/06(火) 18:18:54.67ID:w99V6zNl
それな
無関係ではないけど分けて考えないと
318デフォルトの名無しさん
垢版 |
2024/02/06(火) 18:33:39.13ID:nmitk2Uo
>>308
非同期APIが提供されてれば同期化は簡単にできるから必要ないんだよ
319デフォルトの名無しさん
垢版 |
2024/02/06(火) 18:36:16.19ID:2AaBK8OM
同期化ってasyncでない関数から呼べるようにするって解釈で合ってるだろうか
もしそうだとしたらasyncでない関数の中でtokioランタイム作ってawsよんでruntime終わらせるみたいな処理になっちゃわないか
2024/02/06(火) 19:56:13.91ID:kbEH5D0U
AWSの同期的APIの機能リクエストあるのね
https://github.com/awslabs/aws-sdk-rust/issues/505
2024/02/06(火) 20:03:24.75ID:Dpp0fICO
AWSのAPIの呼び出しが非同期になるのはAPIの内部で効率化のために非同期処理をやってるからでしょ?
2024/02/06(火) 20:17:12.09ID:7oKTbIPT
うちはAWS SDK RustはAxumベースのWebアプリでDynamoDB接続に使ってるけど、みんなはなににAWS SDK使ってるん?
2024/02/06(火) 20:38:04.56ID:NQvIuvVx
>>312
だからーなーんにもわかってない発言丸出しはやめよ?
通信の時間なんてかからんのやって
すぐ返ってくるから
そこちゃんと読もう?
2024/02/06(火) 20:44:38.46ID:NQvIuvVx
AWS APIを生のRESTで実装してみろよ
すぐわかるぞ
2024/02/06(火) 20:45:53.99ID:NQvIuvVx
言っておくが俺は一般論として非同期がダメと言ってるわけじゃないぞ
もちろんその用途としての方が便利なことは多い
あくまでAWS SDKのRust版については不満があるということよ
2024/02/06(火) 20:50:46.76ID:dKDdJveN
>>325
web apiの実装として相手側が非同期処理で
手元も非同期なんてのはawsだけじゃないというか
それが主流だけど他はいいの?
327デフォルトの名無しさん
垢版 |
2024/02/06(火) 20:50:52.38ID:2AaBK8OM
このスレにはRust関連の悪い所の指摘を見ると自分が全否定されたように怒り出す人間がいるっぽいので
2024/02/06(火) 20:57:52.50ID:NQvIuvVx
tokioが素晴らしいのは間違いない
しかし今回のREST APIの呼び出しで程度で必要かな?と思う

非同期が必要ならtokio::process::commandでCLIを非同期で呼ぶ方が良くないか?とか色々考えてしまう
2024/02/06(火) 21:04:51.51ID:pGyPKkef
>>323
>>通信の時間なんてかからんのやって
>>すぐ返ってくるから

呆れた
敢えてウソをついているのか?
それとも本当に無知な初心者なのか?
330デフォルトの名無しさん
垢版 |
2024/02/06(火) 21:08:56.44ID:rmP9tpon
Web通信ですぐ返ってくることなんかあるのか? と思ったけど、AWSのAIPの中身知らんから何とも言えんくなってしまった

そういえばファイルIOはすぐ返ってくるって言って良いんだろうか
2024/02/06(火) 21:12:11.34ID:NQvIuvVx
>>330
サイズが小さいファイルに対して非同期呼び出しをするか?という話
332デフォルトの名無しさん
垢版 |
2024/02/06(火) 21:14:41.84ID:rmP9tpon
>>331
まあ「ファイルIOにTokioが必要です」って言われたらちょっと嫌な気分になるな
2024/02/06(火) 21:15:39.21ID:pGyPKkef
>>330
Web通信は通信時間だけで大きく時間を要する
さらにWebサーバ側で処理時間がかかる
2024/02/06(火) 21:56:45.71ID:Z39zy7L3
>>323
cpuのナノ秒単位の処理速度に比べたら通信はとてつもなく遅いけど
レスポンスを受け取るまでの時間は処理を中断させたほうがコンピュータに優しい
tokioのグリーンスレッドを活かせ
2024/02/06(火) 22:05:59.23ID:wkt5OFgc
>>334
tokioのランタイムが裏で動くとか気持ち悪すぎだろ
同期でやらせろ
2024/02/06(火) 22:13:28.77ID:IqTcjswh
他のSDKのようにv3くらいになれば使いやすくなってるかもね
2024/02/06(火) 22:16:42.98ID:GPQIFWbx
aws sdk for rust ってwebフレームワークでサーバーサイドやってる人向けだから当然のようにみんなtokioを既に組み込んでるもんじゃないの?なにがそんなに気に入らないのか理解ができない
まあtokio以外の非同期ランタイムを使わせろって人はドンマイだけど
2024/02/06(火) 22:17:52.75ID:GPQIFWbx
「rustのwebフレームワーク」が抜けてた
2024/02/06(火) 22:21:16.54ID:1nslx8NY
>>337
そういう話じゃないけど
2024/02/06(火) 22:24:12.00ID:DARHuXMe
>>337
実装の話に逸らさないで
AWSのAPIくらい同期で十分なのにわざわざ非同期にする理由を言えよ
2024/02/06(火) 22:24:15.12ID:UMLcFsAo
いくらすぐ返ってくるっていってもネットワーク通信なんだから
不通だったりレイテンシが長くなることはありうるし、
タイムアウトやリトライをtokioのエコシステムに乗っかってやれるメリットはあると思うけどな
そりゃ軽量な同期版があるに越したことはないけど、優先順位は落ちるだろう
2024/02/06(火) 22:27:24.19ID:QhlaBKsr
JavaScript SDKも内部は非同期だけど使いやすいよ
単なるコールバックで同期的に書けるし
2024/02/06(火) 22:33:38.08ID:QhlaBKsr
どうも最近tokioがでしゃばってきて気持ちが悪い
ここまできたらもうコアをtokioに入れてWeb用の専用言語としてフォークしたほうがよいのでは?
2024/02/06(火) 22:35:03.21ID:GPQIFWbx
>>340
はぁ?そんなに同期でやりたいなら同期のある言語のSDKを使うかAWS CLIでコマンド実行しててくれよ
同期同期言ってるやつはRustでAWS触るアプリ作ってねえだろ
こちとらつい先日ようやく待ちに詫びたAWS SDK for Rustが正式版になって、ようやく、ようやくこれを本番投入できるって喜んだのによ
2024/02/06(火) 22:36:26.88ID:QhlaBKsr
まあ俺はCLI使ってるw
ぶっちゃけコードで書くメリットがわからない
2024/02/06(火) 22:36:30.11ID:UMLcFsAo
というか同期版もランタイム切り替えも別にissueとしては却下されてるわけじゃないんだし
欲しい人は実装してPR出せばいいんだよ
それがされてないってことは結局需要がないんでは?
2024/02/06(火) 22:38:18.90ID:YgjIpfMr
>>344
はい、じゃあお前の負けね
もう二度と口答えすんなよ
2024/02/06(火) 22:40:20.30ID:QhlaBKsr
>>341
不通だろうが普通はソケットのタイムアウト値設定するから許容できる範囲内の値を設定すればよろしい
どちらにしろリトライすることになるのだ
349デフォルトの名無しさん
垢版 |
2024/02/06(火) 22:44:11.89ID:oodj9UUv
「そんなに××したいなら○○使えば良いんじゃないの? 」→をはい○○使っています」っていう流れ、最強言語たるRustのスレの流れとしてはあまりにも敗北感がある
2024/02/06(火) 22:50:36.48ID:QhlaBKsr
まとめると
tokio使わない同期API作れ
非同期版はランタイム切り替えできるようにしろ
ってことでオッケー?
2024/02/06(火) 22:53:13.82ID:j3cHqQGJ
>>340
コンマ1秒~1秒の頻度でデータベースクエリするWebアプリとかだったら非同期のが次々に処理できると思うけど
2024/02/06(火) 22:56:34.96ID:LdUhtiaW
>>351
なんだそれ?
お前そんなにバカみたいな頻度でAWS APIを使うの?笑うわ
2024/02/06(火) 22:57:34.03ID:MUGS3GDn
>>351
クエックエッ
笑笑
2024/02/06(火) 22:58:56.15ID:QhlaBKsr
>>352
それくらいの頻度で呼び出す可能性があるのってGAFAMクラスの会社ぐらいじゃね?w
2024/02/06(火) 23:04:22.29ID:JKYjZJJo
>>351
ゲームサーバーとかかな?
2024/02/06(火) 23:06:26.14ID:6KaTvZBM
>>354
それな笑笑
>>351は負けず嫌いの単発の敗者笑笑
2024/02/06(火) 23:08:14.09ID:IqTcjswh
使ってる用途が違うから噛み合わないんだな
CLIで十分な用途とAPIが必要な用途くらいは区別しようぜ
2024/02/06(火) 23:08:21.31ID:1CYgky+r
あ、もしかしてガーファ勤めなんかな笑笑?
なわけねえだろ笑笑
2024/02/06(火) 23:09:19.34ID:nVMpMpiW
ガーファ最強笑笑
2024/02/06(火) 23:10:22.99ID:fZ7dPHD5
>>351はバカです
2024/02/06(火) 23:12:04.80ID:N6+r1oq4
>>355
ゲームサーバーってなに?マインクラフトでもやってるの?ガキんちょか?
2024/02/06(火) 23:15:06.92ID:aJWngw7a
>>357
うるさいな
非同期じゃないといけない理由を具体的に言ってみろよ?あ?
363デフォルトの名無しさん
垢版 |
2024/02/06(火) 23:16:25.72ID:QhlaBKsr
>>351
GAFAM社員age
2024/02/06(火) 23:26:25.88ID:qbDsNmRG
自分用のツールなら一々tokioとかめんどくさいとか
わからんでもないけどそういう人をターゲットに
してないからなあ
2024/02/06(火) 23:26:55.98ID:IqTcjswh
GAFAMの規模を舐めすぎだろ
10リクエスト/秒程度なら中堅企業の社内向けシステムでも普通にあるレベル
2024/02/06(火) 23:35:03.14ID:O9rpVDxS
実際ゲームサーバーって大変そうよね
最近話題になったパルワールドってやつもサーバー要素があるけど、ゲームデータをどこかしらのクラウドサービスをレンタルしてやってるわけで、>>351よりもすごいレベルで行われてそう
パルワールドのサーバーはどの言語のWebフレームワークでやってるのか知らんがJavaとかC#、GoあたりならRustのが高速、省メモリでサーバー代を節約できただろうな
2024/02/06(火) 23:43:25.52ID:ZEorkRES
ゲームサーバーってプログラミング関係あるの?サーバーを借りてるだけなんじゃないの?
2024/02/06(火) 23:56:44.33ID:7jT2HGcX
無知は恥ってよくわかるね
369デフォルトの名無しさん
垢版 |
2024/02/07(水) 00:00:36.36ID:/3r7f4vo
>>366
人気ゲームだと桁が3つ4つ違う
370デフォルトの名無しさん
垢版 |
2024/02/07(水) 00:02:07.90ID:HSCt9mfq
>>368
無知自体は何も恥じることではない
2024/02/07(水) 00:25:18.71ID:ZYweHa7T
まさかゲームサーバーがなんなのかわからない人がこのスレにいるとは
2024/02/07(水) 00:29:20.89ID:HhW4UiiT
AWSはCLIでいい、非同期はゴミって結論出たね
2024/02/07(水) 00:41:54.53ID:O61WTlOm
通信時間+向こうでの処理時間はCPUにとって莫大な待ち時間
async/awaitによる非同期プログラミングをすれば同期と同じようにプログラムを組めつつその莫大な待ち時間を有効活用できる
これは特定のプログラミング言語に関係なく対応しているすべての言語で成り立つ話
もちろんRustでも同じ
2024/02/07(水) 00:51:24.66ID:EnTbeTL9
AWS Lambdaだと同時実行数の制限があるから、同期処理をするのは犯罪的。
2024/02/07(水) 00:58:32.65ID:p1o31ALH
現状のasync/awaitの使いやすさは
Swift > C# > JavaScript >>> Rust
2024/02/07(水) 00:59:45.05ID:p1o31ALH
KotlinやF#は使ったこと無いのでわからない
2024/02/07(水) 01:07:53.33ID:p1o31ALH
>>375
Python忘れてたわ
Swift > C# > JavaScript/Python >>> Rust
2024/02/07(水) 01:10:26.42ID:O61WTlOm
>>375
Rustが最もきめ細かく扱えて便利
2024/02/07(水) 01:13:21.82ID:O61WTlOm
もちろん性能面でもRustが最も有利
だからインフラに至るまで採用されている
2024/02/07(水) 01:20:07.41ID:R4SwjTOT
>>377
c++は?
2024/02/07(水) 02:44:08.20ID:7skGlnTk
>>377
swiftってそんなに書きやすいんか?
382デフォルトの名無しさん
垢版 |
2024/02/07(水) 04:57:14.90ID:uDrK2oQi
>>375
asyncもRxもC#が発祥だけどこの言語だけ異常だよな
2024/02/07(水) 06:30:56.86ID:EnTbeTL9
Pythonはスレッドが擬似的なので並行処理の性能が低い。
2024/02/07(水) 06:35:55.67ID:5V24VW//
>>375
Kotlinが抜けてる
Kotlin>(越えられない壁)>Swift > C# > JavaScript/Python >>> Rust
2024/02/07(水) 06:52:43.34ID:r0kpHnB4
Rustを叩きたいだけのアンチさんだから無茶苦茶や
2024/02/07(水) 07:15:51.00ID:Z0+c6VxI
>>380
C++は論外
アンチではなく本当に書きにくい
さらにtokioのような高性能な基盤も整備されていない
2024/02/07(水) 07:16:35.05ID:0B0Tt2Zv
非同期はC#GoKotlinRustのどれも同等に使いやすいと感じる
JavaはSpringありき、Swiftはつかったことない、C/C++は考えたくない
2024/02/07(水) 07:25:44.75ID:qmafesNd
swiftやdartはモバイルアプリ開発以外で全く使われてない
2024/02/07(水) 07:30:51.78ID:KVAhvvz+
SwiftはApple製ってだけで使う価値なし
開発環境の依存があまりに高すぎる
390デフォルトの名無しさん
垢版 |
2024/02/07(水) 07:38:16.28ID:2LChEtDL
出来ればJVMも使わずに済みたい
なんとなく
2024/02/07(水) 07:40:43.27ID:lxo2szIV
>>375,377,384
なんか言語のラインナップ見るにバリバリのフロントエンド開発屋さんかな?
そらRustを使うことなんてないわな
なんでこのスレにいるのか
392デフォルトの名無しさん
垢版 |
2024/02/07(水) 07:53:07.34ID:q5vZGjA+
Rustはフロントエンドも取り込むのでRustスレはフロントエンド屋も書き込んで良い
2024/02/07(水) 08:12:27.93ID:gKkOyEKn
まぁRustの非同期の良いところはランタイムを言語から切り離したので
Webでも組み込みベアメタルでも非同期が使えるところなんだけど
使い勝手としてWebのユースケースに特化した他言語に負けるのはしょうがない
これは時間がたっても根本的には改善されないから
不満があるなら早く他言語に移ったほうがいいよ
2024/02/07(水) 08:15:11.44ID:0B0Tt2Zv
>>390
ならGoかC#のASP.NETでいんじゃね?
さまざまな導入コストを払えるなら事実上クラウドネイティブ言語のRust一択

それとJVMがダメという理由が、Oracle JVMのLTSサポート期間が短縮されJVMのイメージが悪化したってことに依るものなら、
Kotlin/JVMだとJDK8をベースに、どのJDKバージョンでも動くようにサポートされ続けられるから、JDK8から最新のJDK21までのLTSバージョンで難なく動く
https://kotlinlang.org/docs/faq.html#which-versions-of-jvm-does-kotlin-target
OracleのJavaは終わってるがJetBrainsのKotlinは無限に始まってる
2024/02/07(水) 09:03:48.96ID:7skGlnTk
静的言語ではkotlinが個人的には1番かな
コルーチンスコープを作れるから既存の処理の中に非同期を唐突に入れられる
これが理想
ただしクラスありきなのが微妙なところ
クラスなしでkotlinのような使い心地がある言語が欲しい
2024/02/07(水) 09:09:08.81ID:oJ2HGwP7
>>373
その時間有効に使えるのかって話なんだよ。
例えばRDSを休止したい場合に、休止するAPIを呼んで、状態を確認するAPIで休止を確認してすると思うけど、
そういう処理を自動化する時に非同期でハンドリングする意味あるかっていう。

DynamoDB のデータ操作とか業務トランザクション扱う系は非同期あっていいとは思うけどね。
397デフォルトの名無しさん
垢版 |
2024/02/07(水) 09:21:27.90ID:+r3v4OXU
既存の処理の中に非同期を唐突に入れられるのってランタイムがグローバルで一意じゃないと出来なそう
ランタイムいくらでも作れるし複数種類存在しうるRustでは無理そうね
2024/02/07(水) 09:33:38.70ID:3p2K3Rhv
>>395
それはRustも同じ
Rustのasyncもコルーチンでありtrait Futureによって抽象化されている
Future::pollの引数であるContextがKotlinでのコルーチンコンテキストに相当する

>>397
Rustでも既存の処理に唐突に非同期を取り扱える
Rustでtokioのようなランタイムが必要になるのはspawnして完全に制御外へ切り離すときのみ
制御内ならば複数のFutureを取り扱う場合でもjoinなど様々な方法で取り扱うことができる
もちろんtokioランタイムは必要ない
2024/02/07(水) 09:42:26.35ID:x+YpU8Xz
async{}.await
2024/02/07(水) 09:45:13.70ID:kuiQPbhX
>>380
C++ はその性質上、システムとの連携が必要な標準ライブラリは薄い。
幅広いシステムで実現可能なように配慮するから。
必要ならサードパーティライブラリでやれというスタンス。
ただそこで強力な誰もが認めるサードパーティライブラリが結局は現れなかったというのが C++ のあかんかったところなんやわ。

個人的には C++/WinRT の非同期処理は好きなんだがね。
2024/02/07(水) 10:36:03.38ID:0B0Tt2Zv
>>395
KotlinはデフォルトでclassがJavaでいうfinal classで定義されてて
・クラス継承禁止
・やってることはCの構造体と同じ
だから、自分はclassであるデメリットを感じてないかな

Kotlinでクラス継承するにはご存知の通りclassをopen classやabstract classと書くから見て分かるのがヨシ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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