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
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でマシンコード生成してる
面白すぎる
コードもめちゃくちゃ読みやすいぞ
0262デフォルトの名無しさん (ワッチョイ 137c-fr5k)
垢版 |
2024/05/28(火) 05:50:07.80ID:2O15FncY0
あげとくか
0263デフォルトの名無しさん (アウアウウー Sac5-j0d5)
垢版 |
2024/05/28(火) 11:26:44.51ID:NhejqWbKa
>>257
それなりに使われるだろうけど普及はしないよこんな糞言語
レスを投稿する


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