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/11(日) 09:33:37.86ID:QXc2iF2X
オブシコ=オブジェクト指向
で使ってるとやっとわかった。「あたしこ」の「しこ」かと勘違いして訳がわからなかったよ。
2024/02/11(日) 09:47:23.19ID:mQVY2wVN
>>627
レポジトリはドメインレイヤーがやるところでしょ
630デフォルトの名無しさん
垢版 |
2024/02/11(日) 12:10:09.20ID:xzgPE83s
>>627
delegationとforwardingの区別が付いてないね
2024/02/11(日) 12:18:42.79ID:eNn3abAv
ここで数学用語ではなく、学校では評価されない用語を使うのがオブジェクト指向
632デフォルトの名無しさん
垢版 |
2024/02/11(日) 13:10:55.53ID:5cbdJqGT
オブジェクト指向の良い所は真に賢い人は真面目に勉強しないしょうもなさと多彩な用語の数にある

だからオブジェクト指向言語を勉強した人間は真に賢い人間と競合することなくマウントを取ることが出来るようになる
2024/02/11(日) 13:30:06.52ID:UTHxd4xs
>>627
それは委譲ではない
継承と委譲とインターフェースは違うもの
634デフォルトの名無しさん
垢版 |
2024/02/11(日) 14:12:49.22ID:tvA72CFJ
自分の使っている用語の定義に無頓着な人が賢いwとか有り得ない
635デフォルトの名無しさん
垢版 |
2024/02/11(日) 14:28:55.59ID:FmT3HYkV
>>634
“賢い”の定義が違うんだろ
察してやれ
2024/02/11(日) 14:35:31.96ID:eNn3abAv
定義を後出しすることに罪悪感がない人はたぶんもっとリアルな悪を見慣れている
2024/02/11(日) 15:00:23.67ID:p0mJmxcL
Rustにはインターフェースは無くて型クラスはある
型クラスを推してけ
638デフォルトの名無しさん
垢版 |
2024/02/11(日) 15:56:01.57ID:EVWrf4kv
>>634
その用語、定義ありませんよw
君が勝手に思い込んでるだけw
639デフォルトの名無しさん
垢版 |
2024/02/11(日) 16:06:16.13ID:nNzLNGzY
オブシコ用語って掛け算順序界隈の主張する「等分除と包含除」とかの仲間だよね
2024/02/11(日) 16:16:18.76ID:+E66gntj
>>639
(^_^)ノ
641デフォルトの名無しさん
垢版 |
2024/02/11(日) 16:21:31.17ID:cP74y9AE
時代はオブシコではなく関数型プログラミング
オブシコは時代遅れ
例えば機械学習は関数型プログラミングやってる
642デフォルトの名無しさん
垢版 |
2024/02/11(日) 16:24:12.02ID:aCOYKxUA
>>637
型理論においてはどちらも同じ
643デフォルトの名無しさん
垢版 |
2024/02/11(日) 16:30:25.25ID:O/MMVA2r
なんかみんな単発だからレスバできないなあ
644デフォルトの名無しさん
垢版 |
2024/02/11(日) 20:46:34.90ID:XOn8R4o/
RustがJSを滅ぼしてくれるのはいつになるかいのう……
645デフォルトの名無しさん
垢版 |
2024/02/11(日) 21:26:37.41ID:M/VumamL
まず先にDOMを滅ぼしてくれないとRustがウェブを乗っ取れない
DOMがJS依存すぎる
2024/02/11(日) 21:51:44.10ID:XOPhWcHA
DOMはJSに依存しないしいろんな言語のインターフェースがあるが。
647デフォルトの名無しさん
垢版 |
2024/02/11(日) 22:42:14.41ID:575tRfGH
>>646
肝心のWasmにDOM操作を許可しないんじゃ意味ない
648デフォルトの名無しさん
垢版 |
2024/02/11(日) 22:47:25.71ID:YLWTi6Ka
>>647
DOM操作自体はwasmでもできるぞ
オーバーヘッドが大きすぎて遅いだけ
2024/02/11(日) 22:56:40.04ID:Ij1X5KaV
>>648
Wasmから直接DOM操作は不可能
JavaScriptにやってもらうしかない
つまりJavaScriptしかできない

そのため単純なDOM操作だとJavaScriptが有利だが
Wasmで何らかの処理をしつつのDOM操作だとWasmが勝つことが増えていく
2024/02/11(日) 23:09:37.71ID:bi52uRem
自演ええて
651デフォルトの名無しさん
垢版 |
2024/02/11(日) 23:36:32.19ID:BuG8Esm8
>>649
645だけど、だからDOM自体が欠陥品なんだって
JS依存の現状から脱却するにはDOMに変わるものが必要
652デフォルトの名無しさん
垢版 |
2024/02/12(月) 00:40:57.30ID:cVfqqlnc
tree構造以外である程度の汎用性あるデータ構造なんてないわ。
653デフォルトの名無しさん
垢版 |
2024/02/12(月) 01:04:43.36ID:tgn3NuIP
DOMに文句言ったところで何かが変わるわけじゃないからな
どうでもいい話
2024/02/12(月) 10:19:02.60ID:Autq7Dxb
>>651
現状JSからしか使えないってのとDOMに欠陥があるかどうかってのは全然別の話だと思うが。
655デフォルトの名無しさん
垢版 |
2024/02/12(月) 10:33:25.13ID:QcKWCRm/
>>654
DOMには安全性のためにJavaScriptでしか触れないのは、DOMの出た当初は良かったが、JavaScript以外の言語も幅広く使われるようになった今ではその設計が古くなって欠陥品になってるのは事実
2024/02/12(月) 10:41:33.86ID:Autq7Dxb
DOMの設計と全然関係ない話。
2024/02/12(月) 10:51:22.86ID:dpV2oNnW
>>653
他人に文句を言うより自分で労働するという正義感は過労死の原因だよ
クレーマーはこの正義感を変えるじゃなくて既に変化した人
658デフォルトの名無しさん
垢版 |
2024/02/12(月) 11:07:16.48ID:UiVeSAOt
domなしでのナビゲーションの方法があってもいいとは思う
659デフォルトの名無しさん
垢版 |
2024/02/12(月) 11:08:30.75ID:CTu12wXT
いい加減にDOMはXMLをやめようぜ
無駄な構文が莫大な通信ロスを生んでる
660デフォルトの名無しさん
垢版 |
2024/02/12(月) 11:23:28.89ID:u1N968/b
>>657
正義感w
自分でコントロールできないこととコントロールできることの判別こそ過労死しないためには最重要なんだけどね

DOMが欠陥品?
で?君はどうしたいんだい?
661デフォルトの名無しさん
垢版 |
2024/02/12(月) 11:28:30.41ID:e3JrcLqa
>>655
昔DOMは他の言語からでも直接触れたがほぼ全て淘汰されてJSだけが生き残った
2024/02/12(月) 11:38:53.51ID:nlvJBCEb
DOMをゴミと言うのはWindowsをゴミと言ってるのと同等で無駄なこと
2024/02/12(月) 11:41:30.45ID:dpV2oNnW
やりたいことを先に固定してからそれに合わせて物事をコントロール可能にするという順序は逆にしたい
664デフォルトの名無しさん
垢版 |
2024/02/12(月) 13:30:26.12ID:UkU83gVN
DOMの代替の候補って存在するのかな
2024/02/12(月) 13:49:21.10ID:3NLsFenn
>>662
Windowsはゴミだから個人も仕事からも排除した
しかしネットがWebベースのこの時代にWebブラウザは排除できない
DOMは取り扱わざるを得ない

とはいえRustによるWasmからの取り扱いは以前よりかなり状況が良くなってきている
まずReference Types の導入によりJavaScriptのオブジェクトをそのまま透過的にだがRust(Wasm)側でも持ったり返したりできるようになった
これはJavaScriptグルーコードの削減をもたらしている
さらにGC対応もメモリ管理のうちJavaScript側依存のものの扱いを任せられるようになりRustでも取り扱いが楽になる
Rust側の内部に閉じたデータのみメモリ管理すればよくなるからだ
2024/02/12(月) 15:41:26.64ID:QicyHe7E
デザインパターンはあくまで定石集なんだから、Rust用のデザインパターン作ればいいだけの話。
「Rustならこんなに簡単にできる」と自慢できるから、信者にとってもいいことかと。

あと、Rustでダックタイピングできたっけ? 事前にTraitで定義しなきゃいけないんだったら面倒だなぁ。
2024/02/12(月) 15:46:26.73ID:FSKnAMMD
デザインパターンって簡単に実装できるとか
自慢するたぐいのものだっけ?
2024/02/12(月) 15:55:33.33ID:Jqge1vnq
単発NG推奨
2024/02/12(月) 15:56:29.31ID:9yTkyF6j
ドメインまわりをフレームワークと分離させる設計ならなんでもいいや
今後リファクタリングすることを考えた設計が大事
2024/02/12(月) 15:56:34.13ID:Jqge1vnq
ここはRustスレです消えてください
2024/02/12(月) 16:00:10.23ID:nHDMmyKy
>>666
ダックタイピングは動的型付け言語のためのオモチャであり
デメリットも多いためまともな言語はダックタイピングを排除して別の形を取っている
ダックタイピングは規律のない無政府状態であり可読性も下げデバッグもしにくくなり最悪となる
もちろん実行時の動的型付けの問題もはらんでおり自然の静的なチェックができない
2024/02/12(月) 16:11:47.85ID:KZYjz35/
ダックタイピングというゴミのような方法に対して
Rustはダックタイピングを採用せずに代わりに完璧な方法を用意した
それがtraitのrequired methodsとtrait boundsである
この二つにより全てを解決している
2024/02/12(月) 16:12:19.21ID:9yTkyF6j
ダックタイピングなんて荒業ではなく、ポリモーフィズムをやりましょ
674デフォルトの名無しさん
垢版 |
2024/02/12(月) 16:23:13.06ID:cVfqqlnc
>>664
ない。結局まともに使えるものを用意しようと思えばああなる。
それも理解せずに馬鹿みたいに文句言ってるだけだわな。
2024/02/12(月) 18:20:41.31ID:g0MzjlGR
>>667
繰り返されれば飽きる
繰り返されないのはパターンではない
676デフォルトの名無しさん
垢版 |
2024/02/12(月) 18:37:22.53ID:NJ55srXB
>>671
GoやTypeScriptみたいな静的片付け言語でもダックタイピング採用してるよ
nominal/structuralと動的/静的は直交
2024/02/12(月) 18:47:33.19ID:0RqNbR5g
Goは実行時にランタイムが動的にvtableを生成してメソッドlookupするわけだから
静的ではないでしょ?
そんなことはC++やRustでは許されない行為だよ
2024/02/12(月) 19:22:42.84ID:QavMz5Qe
>>676
TSはanyで型が消えてるときの話じゃないの?
679デフォルトの名無しさん
垢版 |
2024/02/12(月) 20:01:03.19ID:uYjIYqfU
誰も定義の擦り合わせをしないのでどんどん意思疎通が困難になっていく
680デフォルトの名無しさん
垢版 |
2024/02/12(月) 20:07:14.69ID:uYjIYqfU
一言居士の群れ
2024/02/12(月) 20:21:22.17ID:oZv/D2wt
ダックタイピングは一見するとお手軽に見えるけどプログラミング開発の足を引っ張る悪
Rustは排除しているので大丈夫
そしてRustではトレイト境界により確実に使えるものだけを呼び出せることを静的に保証しつつ用いる
682デフォルトの名無しさん
垢版 |
2024/02/12(月) 20:24:19.09ID:H9LyWZwk
現代はデザインパターンで設計するんじゃなくフレームワークで作る時代だけどな
683デフォルトの名無しさん
垢版 |
2024/02/12(月) 20:44:24.28ID:5CWzyU2K
>>682
そのフレームワークがデザインパターンで出来てるんだけど
2024/02/12(月) 21:02:02.43ID:g0MzjlGR
アルゴリズムはライブラリを一個作れば終わり
もう一個作ったら車輪の再発明
だがデザインのレベルではワンパターンが続いてもなぜか攻撃されない
2024/02/12(月) 21:59:54.43ID:QicyHe7E
>>673 >>677
c++ templateは静的ポリモーフィズムのダックタイピングの代表例だろ……

Rustのgenericsはどれくらいダックタイピングできているかね。
2024/02/12(月) 22:09:04.93ID:h7gv4DVB
>>685
C++の静的ポリモーフィズムはダックタイピングではない
ダックタイピングは実行時に動的に処理されるものだけを指す

例えばGoはinterfaceでダックタイピングするが実行時にランタイムが動的にitable (interface table)を生成して用いる
これは実行時に動的に処理されるためダックタイピングとなる

もちろん実行時に動的に処理するためダックタイピングはどの言語でも問題を孕んでいる
手軽さとの引き換えだ
2024/02/12(月) 22:14:48.84ID:YxZv/CkW
C++のtemplate(concepts無し)のダックタイピングが好きなら
genericsよりmacro_rules!の方がいいよ
688デフォルトの名無しさん
垢版 |
2024/02/12(月) 22:15:23.35ID:JpOX7sRf
C++のtemplateで正しく関数を呼ぶの難しいよ……
689デフォルトの名無しさん
垢版 |
2024/02/12(月) 22:30:02.58ID:DrV/13x2
>>677
静的型付けの意味から解説せなあかんのんか?
勘弁してくれよ
2024/02/12(月) 22:30:58.32ID:9yTkyF6j
C++はちゃんとコンセプト使わないとだめだよ
黒魔術は禁止です
2024/02/12(月) 22:50:06.45ID:kWCXoXun
C++のテンプレートは闇深すぎるよね
2024/02/12(月) 22:50:36.74ID:4VueJhli
>>686
C++ のテンプレートが受け入れる型は型同士の関係ではなくその性質に依存する。
一般的にもダッタイピングの典型例として挙げられることは多いし、静的か動的かで区別するという理屈を私が見たのはここがはじめてだ。
2024/02/12(月) 22:54:09.63ID:RSTU7X98
>>685
Rustのgenericsはtrait boundsにより完璧に静的に安全安心にチェックされ保証できる
2024/02/12(月) 23:33:02.01ID:g0MzjlGR
>>692
ダックタイピングの言い回しに前例はなくても原因はあるんだろう
そして原因はおれじゃない、あいつがやったという理屈は何度も見たことがある
2024/02/12(月) 23:52:54.50ID:Dj37TM3K
委譲やダックタイピングを理解してないのもどうかと思ったけど
↓これらの区別ができてないのは致命的だと思うので勉強しようね

静的型付け/動的型付け
静的ポリモーフィズム/動的ポリモーフィズム
静的処理/動的処理
696デフォルトの名無しさん
垢版 |
2024/02/13(火) 00:30:00.87ID:xtMg5XLl
確固たる誰しもが認める定義のない言葉を勝手に定義してマウントとるのはやめよう?
2024/02/13(火) 02:23:26.95ID:vbRTXFPD
ファクトチェック界隈では事実かデマかが確固たる論点だよね
公式ルールか、ローカルルールか、という発想はそれ自体がマイノリティ
2024/02/13(火) 03:26:01.95ID:s0kRtfrq
オレオレ定義で擬似問題作るの止めろ。

ダックタイピングについてはWikipediaの解説でいいか。
ja.m.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0
英語版が一番詳しいかね。
2024/02/13(火) 07:31:17.64ID:KlTxxkJG
>>683
フレームワークがデザインパターンのセオリー通りにできてるかって言ったら意外とセオリーを破って新しいムーブを作ったりするのはよくある
結局パターン通りに作る云々が論じられるのはフレームワークを使う側
700デフォルトの名無しさん
垢版 |
2024/02/13(火) 08:18:01.41ID:EJGfS3Xj
>>699
アンチパターンや亜種になるだけで全部パターンだぞ
2024/02/13(火) 08:30:13.65ID:eXWviQcC
はじめにパターンありき、ではない
2024/02/13(火) 09:29:40.48ID:d0oThnC1
ダックタイピングはお手軽さを上回るデメリットだらけの悪手法
問題もなく安全で高速なRustのトレイト方式が最善策
トレイト境界により安全に呼び出せる範囲を明確にしてる点が要所
2024/02/13(火) 10:20:47.32ID:yeb3oliP
うちの講師が全てにおいてPythonに劣った言語って言ってるけどマ?
2024/02/13(火) 10:23:31.22ID:T85IlqBy
>>703
そんなわけないでしょ
2024/02/13(火) 10:29:29.95ID:iVxwtbvh
>>703
Pythonは遅いし本質でない実行時デバッグも大変だし
速くて実行前に静的に解決できるRustがベストな言語だよ
2024/02/13(火) 10:30:11.10ID:ep9QvdZW
>>703
その講師はメインでなにを教えてるん?データサイエンス?少なくともコンピュータ工学やメカトロニクスではなさそう
2024/02/13(火) 10:31:44.87ID:mnEJD8Sx
>>703
その講師優秀やな
708デフォルトの名無しさん
垢版 |
2024/02/13(火) 11:11:21.55ID:mXdLEMzy
>>705
その講師も大概だがお前もデバッグをまともにやったことないだろ。
2024/02/13(火) 11:16:14.81ID:iVxwtbvh
>>708
Pythonは実行時に発覚するエラーが多すぎてプログラミング言語として辛いんよ
710デフォルトの名無しさん
垢版 |
2024/02/13(火) 11:22:46.51ID:BKo58x30
ここまで俺の自演
711デフォルトの名無しさん
垢版 |
2024/02/13(火) 11:32:02.27ID:mXdLEMzy
>>709
よっぽどレベル低いことしてない限りそこまでキツくはないわ。
むしろrustのビルド時間分使えばよっぽど楽にテスト構築もできるまである。
2024/02/13(火) 11:43:25.76ID:bOFev+sF
>>703
どーせデータ分析やデータサイエンスの講師だろ
くだらない釣りやめろ
2024/02/13(火) 11:46:14.62ID:bOFev+sF
まあどうせ荒らしのたぐいだろうから安価つけても無視されて無駄なんだろうな
くだらねえほんと
2024/02/13(火) 11:53:02.08ID:rA+hqhZ3
荒らしに構った時点でお前らの負け
2024/02/13(火) 11:57:48.21ID:qvC4XjeP
>>703が荒らし判定されてて草ww
2024/02/13(火) 12:05:17.83ID:n6Gkr1cM
>>702
trait boundはgenerics と型パラメータの相互依存が重たい気が。

c++ template & conceptみたいに、templateから型パラメータへの一方向依存になるように(型パラメータに指定される型はtemplateから独立するように)できたっけ?
2024/02/13(火) 12:09:09.09ID:IxuyFkNI
わかる→ Pythonで簡単なスクリプトを書く
キチガイ→ Pythonでプログラミング開発する
718デフォルトの名無しさん
垢版 |
2024/02/13(火) 12:12:34.52ID:KvZIg8uL
Pythonでプログラム書くのもちゃんと型書いてlintしたら出来なくもないよ
2024/02/13(火) 12:15:32.69ID:1UgkqCq+
よく分からんが画像生成系のフロントエンドでrubyベースのってあったっけ?
2024/02/13(火) 13:03:33.72ID:X5Whr4lm
単発NG推奨
2024/02/13(火) 13:04:48.12ID:X5Whr4lm
単発NG推奨
連鎖あぼーん推奨
722デフォルトの名無しさん
垢版 |
2024/02/13(火) 13:49:44.45ID:BKo58x30
スレNG推奨では?
2024/02/13(火) 14:10:44.85ID:q0xfm82v
また境界知能が暴れてんのか
いい加減諦めろよ
2024/02/13(火) 15:09:27.64ID:j+0n3+gu
C++20のコンセプトはゴミみたいなenable_if_tを使わなくてよくなって見やすくなったよね
まだまともに使う機会が来なくて慣れてないけど
725デフォルトの名無しさん
垢版 |
2024/02/13(火) 19:22:36.57ID:ui4ZrT7T
XML大嫌い
2024/02/13(火) 20:34:52.16ID:u8WS3GIa
>>716
やりたいことがよく分からないけどtraitのassociation typeで解決しない?
I: Iteratorだと要素の型はI::Item(正確には<I as Iterator>::Item)になるみたいな
C++のconceptだとtypenameに相当するのかな

traitにgenericsの型パラメータ持たせるかassociation type使うかの判断は慣れるまで難しいけど
選択肢が複数あって外部から決められる ⇒ generics型パラメータ(例:AsRef<T>)
traitを実装するときに内部で自動的に決まる ⇒ association type(例:Deref::Target)
みたいに使い分けるといい
全部をgenericsの型パラメータでやろうとするとカオスになる
2024/02/13(火) 21:06:36.86ID:4D6oEUgV
>>716
できる
例えばこのように

https://docs.rs/hyper/latest/hyper/service/trait.Service.html

pub trait Service<Request> {
 type Response;
 type Error;
 type Future: Future<Output = Result<Self::Response, Self::Error>>;
 
 // Required method
 fn call(&self, req: Request) -> Self::Future;
}

ここで型パラメタResponseとErrorはこのtraitを実装する各型に依存して決まり
型パラメタResponseは依存しない

>>726
その二種類の混合も可能
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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