公式
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/
探検
Rust part22
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2024/01/20(土) 23:21:40.08ID:wyzQTwgG652デフォルトの名無しさん
2024/02/12(月) 00:40:57.30ID:cVfqqlnc tree構造以外である程度の汎用性あるデータ構造なんてないわ。
653デフォルトの名無しさん
2024/02/12(月) 01:04:43.36ID:tgn3NuIP DOMに文句言ったところで何かが変わるわけじゃないからな
どうでもいい話
どうでもいい話
654デフォルトの名無しさん
2024/02/12(月) 10:19:02.60ID:Autq7Dxb >>651
現状JSからしか使えないってのとDOMに欠陥があるかどうかってのは全然別の話だと思うが。
現状JSからしか使えないってのとDOMに欠陥があるかどうかってのは全然別の話だと思うが。
655デフォルトの名無しさん
2024/02/12(月) 10:33:25.13ID:QcKWCRm/ >>654
DOMには安全性のためにJavaScriptでしか触れないのは、DOMの出た当初は良かったが、JavaScript以外の言語も幅広く使われるようになった今ではその設計が古くなって欠陥品になってるのは事実
DOMには安全性のためにJavaScriptでしか触れないのは、DOMの出た当初は良かったが、JavaScript以外の言語も幅広く使われるようになった今ではその設計が古くなって欠陥品になってるのは事実
656デフォルトの名無しさん
2024/02/12(月) 10:41:33.86ID:Autq7Dxb DOMの設計と全然関係ない話。
657デフォルトの名無しさん
2024/02/12(月) 10:51:22.86ID:dpV2oNnW658デフォルトの名無しさん
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/b661デフォルトの名無しさん
2024/02/12(月) 11:28:30.41ID:e3JrcLqa >>655
昔DOMは他の言語からでも直接触れたがほぼ全て淘汰されてJSだけが生き残った
昔DOMは他の言語からでも直接触れたがほぼ全て淘汰されてJSだけが生き残った
662デフォルトの名無しさん
2024/02/12(月) 11:38:53.51ID:nlvJBCEb DOMをゴミと言うのはWindowsをゴミと言ってるのと同等で無駄なこと
663デフォルトの名無しさん
2024/02/12(月) 11:41:30.45ID:dpV2oNnW やりたいことを先に固定してからそれに合わせて物事をコントロール可能にするという順序は逆にしたい
664デフォルトの名無しさん
2024/02/12(月) 13:30:26.12ID:UkU83gVN DOMの代替の候補って存在するのかな
665デフォルトの名無しさん
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側の内部に閉じたデータのみメモリ管理すればよくなるからだ
Windowsはゴミだから個人も仕事からも排除した
しかしネットがWebベースのこの時代にWebブラウザは排除できない
DOMは取り扱わざるを得ない
とはいえRustによるWasmからの取り扱いは以前よりかなり状況が良くなってきている
まずReference Types の導入によりJavaScriptのオブジェクトをそのまま透過的にだがRust(Wasm)側でも持ったり返したりできるようになった
これはJavaScriptグルーコードの削減をもたらしている
さらにGC対応もメモリ管理のうちJavaScript側依存のものの扱いを任せられるようになりRustでも取り扱いが楽になる
Rust側の内部に閉じたデータのみメモリ管理すればよくなるからだ
666デフォルトの名無しさん
2024/02/12(月) 15:41:26.64ID:QicyHe7E デザインパターンはあくまで定石集なんだから、Rust用のデザインパターン作ればいいだけの話。
「Rustならこんなに簡単にできる」と自慢できるから、信者にとってもいいことかと。
あと、Rustでダックタイピングできたっけ? 事前にTraitで定義しなきゃいけないんだったら面倒だなぁ。
「Rustならこんなに簡単にできる」と自慢できるから、信者にとってもいいことかと。
あと、Rustでダックタイピングできたっけ? 事前にTraitで定義しなきゃいけないんだったら面倒だなぁ。
667デフォルトの名無しさん
2024/02/12(月) 15:46:26.73ID:FSKnAMMD デザインパターンって簡単に実装できるとか
自慢するたぐいのものだっけ?
自慢するたぐいのものだっけ?
668デフォルトの名無しさん
2024/02/12(月) 15:55:33.33ID:Jqge1vnq 単発NG推奨
669デフォルトの名無しさん
2024/02/12(月) 15:56:29.31ID:9yTkyF6j ドメインまわりをフレームワークと分離させる設計ならなんでもいいや
今後リファクタリングすることを考えた設計が大事
今後リファクタリングすることを考えた設計が大事
670デフォルトの名無しさん
2024/02/12(月) 15:56:34.13ID:Jqge1vnq ここはRustスレです消えてください
671デフォルトの名無しさん
2024/02/12(月) 16:00:10.23ID:nHDMmyKy >>666
ダックタイピングは動的型付け言語のためのオモチャであり
デメリットも多いためまともな言語はダックタイピングを排除して別の形を取っている
ダックタイピングは規律のない無政府状態であり可読性も下げデバッグもしにくくなり最悪となる
もちろん実行時の動的型付けの問題もはらんでおり自然の静的なチェックができない
ダックタイピングは動的型付け言語のためのオモチャであり
デメリットも多いためまともな言語はダックタイピングを排除して別の形を取っている
ダックタイピングは規律のない無政府状態であり可読性も下げデバッグもしにくくなり最悪となる
もちろん実行時の動的型付けの問題もはらんでおり自然の静的なチェックができない
672デフォルトの名無しさん
2024/02/12(月) 16:11:47.85ID:KZYjz35/ ダックタイピングというゴミのような方法に対して
Rustはダックタイピングを採用せずに代わりに完璧な方法を用意した
それがtraitのrequired methodsとtrait boundsである
この二つにより全てを解決している
Rustはダックタイピングを採用せずに代わりに完璧な方法を用意した
それがtraitのrequired methodsとtrait boundsである
この二つにより全てを解決している
673デフォルトの名無しさん
2024/02/12(月) 16:12:19.21ID:9yTkyF6j ダックタイピングなんて荒業ではなく、ポリモーフィズムをやりましょ
674デフォルトの名無しさん
2024/02/12(月) 16:23:13.06ID:cVfqqlnc675デフォルトの名無しさん
2024/02/12(月) 18:20:41.31ID:g0MzjlGR676デフォルトの名無しさん
2024/02/12(月) 18:37:22.53ID:NJ55srXB677デフォルトの名無しさん
2024/02/12(月) 18:47:33.19ID:0RqNbR5g Goは実行時にランタイムが動的にvtableを生成してメソッドlookupするわけだから
静的ではないでしょ?
そんなことはC++やRustでは許されない行為だよ
静的ではないでしょ?
そんなことはC++やRustでは許されない行為だよ
678デフォルトの名無しさん
2024/02/12(月) 19:22:42.84ID:QavMz5Qe >>676
TSはanyで型が消えてるときの話じゃないの?
TSはanyで型が消えてるときの話じゃないの?
679デフォルトの名無しさん
2024/02/12(月) 20:01:03.19ID:uYjIYqfU 誰も定義の擦り合わせをしないのでどんどん意思疎通が困難になっていく
680デフォルトの名無しさん
2024/02/12(月) 20:07:14.69ID:uYjIYqfU 一言居士の群れ
681デフォルトの名無しさん
2024/02/12(月) 20:21:22.17ID:oZv/D2wt ダックタイピングは一見するとお手軽に見えるけどプログラミング開発の足を引っ張る悪
Rustは排除しているので大丈夫
そしてRustではトレイト境界により確実に使えるものだけを呼び出せることを静的に保証しつつ用いる
Rustは排除しているので大丈夫
そしてRustではトレイト境界により確実に使えるものだけを呼び出せることを静的に保証しつつ用いる
682デフォルトの名無しさん
2024/02/12(月) 20:24:19.09ID:H9LyWZwk 現代はデザインパターンで設計するんじゃなくフレームワークで作る時代だけどな
683デフォルトの名無しさん
2024/02/12(月) 20:44:24.28ID:5CWzyU2K >>682
そのフレームワークがデザインパターンで出来てるんだけど
そのフレームワークがデザインパターンで出来てるんだけど
684デフォルトの名無しさん
2024/02/12(月) 21:02:02.43ID:g0MzjlGR アルゴリズムはライブラリを一個作れば終わり
もう一個作ったら車輪の再発明
だがデザインのレベルではワンパターンが続いてもなぜか攻撃されない
もう一個作ったら車輪の再発明
だがデザインのレベルではワンパターンが続いてもなぜか攻撃されない
685デフォルトの名無しさん
2024/02/12(月) 21:59:54.43ID:QicyHe7E686デフォルトの名無しさん
2024/02/12(月) 22:09:04.93ID:h7gv4DVB >>685
C++の静的ポリモーフィズムはダックタイピングではない
ダックタイピングは実行時に動的に処理されるものだけを指す
例えばGoはinterfaceでダックタイピングするが実行時にランタイムが動的にitable (interface table)を生成して用いる
これは実行時に動的に処理されるためダックタイピングとなる
もちろん実行時に動的に処理するためダックタイピングはどの言語でも問題を孕んでいる
手軽さとの引き換えだ
C++の静的ポリモーフィズムはダックタイピングではない
ダックタイピングは実行時に動的に処理されるものだけを指す
例えばGoはinterfaceでダックタイピングするが実行時にランタイムが動的にitable (interface table)を生成して用いる
これは実行時に動的に処理されるためダックタイピングとなる
もちろん実行時に動的に処理するためダックタイピングはどの言語でも問題を孕んでいる
手軽さとの引き換えだ
687デフォルトの名無しさん
2024/02/12(月) 22:14:48.84ID:YxZv/CkW C++のtemplate(concepts無し)のダックタイピングが好きなら
genericsよりmacro_rules!の方がいいよ
genericsよりmacro_rules!の方がいいよ
688デフォルトの名無しさん
2024/02/12(月) 22:15:23.35ID:JpOX7sRf C++のtemplateで正しく関数を呼ぶの難しいよ……
689デフォルトの名無しさん
2024/02/12(月) 22:30:02.58ID:DrV/13x2690デフォルトの名無しさん
2024/02/12(月) 22:30:58.32ID:9yTkyF6j C++はちゃんとコンセプト使わないとだめだよ
黒魔術は禁止です
黒魔術は禁止です
691デフォルトの名無しさん
2024/02/12(月) 22:50:06.45ID:kWCXoXun C++のテンプレートは闇深すぎるよね
692デフォルトの名無しさん
2024/02/12(月) 22:50:36.74ID:4VueJhli >>686
C++ のテンプレートが受け入れる型は型同士の関係ではなくその性質に依存する。
一般的にもダッタイピングの典型例として挙げられることは多いし、静的か動的かで区別するという理屈を私が見たのはここがはじめてだ。
C++ のテンプレートが受け入れる型は型同士の関係ではなくその性質に依存する。
一般的にもダッタイピングの典型例として挙げられることは多いし、静的か動的かで区別するという理屈を私が見たのはここがはじめてだ。
693デフォルトの名無しさん
2024/02/12(月) 22:54:09.63ID:RSTU7X98 >>685
Rustのgenericsはtrait boundsにより完璧に静的に安全安心にチェックされ保証できる
Rustのgenericsはtrait boundsにより完璧に静的に安全安心にチェックされ保証できる
694デフォルトの名無しさん
2024/02/12(月) 23:33:02.01ID:g0MzjlGR695デフォルトの名無しさん
2024/02/12(月) 23:52:54.50ID:Dj37TM3K 委譲やダックタイピングを理解してないのもどうかと思ったけど
↓これらの区別ができてないのは致命的だと思うので勉強しようね
静的型付け/動的型付け
静的ポリモーフィズム/動的ポリモーフィズム
静的処理/動的処理
↓これらの区別ができてないのは致命的だと思うので勉強しようね
静的型付け/動的型付け
静的ポリモーフィズム/動的ポリモーフィズム
静的処理/動的処理
696デフォルトの名無しさん
2024/02/13(火) 00:30:00.87ID:xtMg5XLl 確固たる誰しもが認める定義のない言葉を勝手に定義してマウントとるのはやめよう?
697デフォルトの名無しさん
2024/02/13(火) 02:23:26.95ID:vbRTXFPD ファクトチェック界隈では事実かデマかが確固たる論点だよね
公式ルールか、ローカルルールか、という発想はそれ自体がマイノリティ
公式ルールか、ローカルルールか、という発想はそれ自体がマイノリティ
698デフォルトの名無しさん
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
英語版が一番詳しいかね。
ダックタイピングについては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
英語版が一番詳しいかね。
699デフォルトの名無しさん
2024/02/13(火) 07:31:17.64ID:KlTxxkJG >>683
フレームワークがデザインパターンのセオリー通りにできてるかって言ったら意外とセオリーを破って新しいムーブを作ったりするのはよくある
結局パターン通りに作る云々が論じられるのはフレームワークを使う側
フレームワークがデザインパターンのセオリー通りにできてるかって言ったら意外とセオリーを破って新しいムーブを作ったりするのはよくある
結局パターン通りに作る云々が論じられるのはフレームワークを使う側
700デフォルトの名無しさん
2024/02/13(火) 08:18:01.41ID:EJGfS3Xj >>699
アンチパターンや亜種になるだけで全部パターンだぞ
アンチパターンや亜種になるだけで全部パターンだぞ
701デフォルトの名無しさん
2024/02/13(火) 08:30:13.65ID:eXWviQcC はじめにパターンありき、ではない
702デフォルトの名無しさん
2024/02/13(火) 09:29:40.48ID:d0oThnC1 ダックタイピングはお手軽さを上回るデメリットだらけの悪手法
問題もなく安全で高速なRustのトレイト方式が最善策
トレイト境界により安全に呼び出せる範囲を明確にしてる点が要所
問題もなく安全で高速なRustのトレイト方式が最善策
トレイト境界により安全に呼び出せる範囲を明確にしてる点が要所
703デフォルトの名無しさん
2024/02/13(火) 10:20:47.32ID:yeb3oliP うちの講師が全てにおいてPythonに劣った言語って言ってるけどマ?
704デフォルトの名無しさん
2024/02/13(火) 10:23:31.22ID:T85IlqBy >>703
そんなわけないでしょ
そんなわけないでしょ
705デフォルトの名無しさん
2024/02/13(火) 10:29:29.95ID:iVxwtbvh706デフォルトの名無しさん
2024/02/13(火) 10:30:11.10ID:ep9QvdZW >>703
その講師はメインでなにを教えてるん?データサイエンス?少なくともコンピュータ工学やメカトロニクスではなさそう
その講師はメインでなにを教えてるん?データサイエンス?少なくともコンピュータ工学やメカトロニクスではなさそう
707デフォルトの名無しさん
2024/02/13(火) 10:31:44.87ID:mnEJD8Sx >>703
その講師優秀やな
その講師優秀やな
708デフォルトの名無しさん
2024/02/13(火) 11:11:21.55ID:mXdLEMzy >>705
その講師も大概だがお前もデバッグをまともにやったことないだろ。
その講師も大概だがお前もデバッグをまともにやったことないだろ。
709デフォルトの名無しさん
2024/02/13(火) 11:16:14.81ID:iVxwtbvh >>708
Pythonは実行時に発覚するエラーが多すぎてプログラミング言語として辛いんよ
Pythonは実行時に発覚するエラーが多すぎてプログラミング言語として辛いんよ
710デフォルトの名無しさん
2024/02/13(火) 11:22:46.51ID:BKo58x30 ここまで俺の自演
711デフォルトの名無しさん
2024/02/13(火) 11:32:02.27ID:mXdLEMzy712デフォルトの名無しさん
2024/02/13(火) 11:43:25.76ID:bOFev+sF713デフォルトの名無しさん
2024/02/13(火) 11:46:14.62ID:bOFev+sF まあどうせ荒らしのたぐいだろうから安価つけても無視されて無駄なんだろうな
くだらねえほんと
くだらねえほんと
714デフォルトの名無しさん
2024/02/13(火) 11:53:02.08ID:rA+hqhZ3 荒らしに構った時点でお前らの負け
715デフォルトの名無しさん
2024/02/13(火) 11:57:48.21ID:qvC4XjeP >>703が荒らし判定されてて草ww
716デフォルトの名無しさん
2024/02/13(火) 12:05:17.83ID:n6Gkr1cM >>702
trait boundはgenerics と型パラメータの相互依存が重たい気が。
c++ template & conceptみたいに、templateから型パラメータへの一方向依存になるように(型パラメータに指定される型はtemplateから独立するように)できたっけ?
trait boundはgenerics と型パラメータの相互依存が重たい気が。
c++ template & conceptみたいに、templateから型パラメータへの一方向依存になるように(型パラメータに指定される型はtemplateから独立するように)できたっけ?
717デフォルトの名無しさん
2024/02/13(火) 12:09:09.09ID:IxuyFkNI わかる→ Pythonで簡単なスクリプトを書く
キチガイ→ Pythonでプログラミング開発する
キチガイ→ Pythonでプログラミング開発する
718デフォルトの名無しさん
2024/02/13(火) 12:12:34.52ID:KvZIg8uL Pythonでプログラム書くのもちゃんと型書いてlintしたら出来なくもないよ
719デフォルトの名無しさん
2024/02/13(火) 12:15:32.69ID:1UgkqCq+ よく分からんが画像生成系のフロントエンドでrubyベースのってあったっけ?
720デフォルトの名無しさん
2024/02/13(火) 13:03:33.72ID:X5Whr4lm 単発NG推奨
721デフォルトの名無しさん
2024/02/13(火) 13:04:48.12ID:X5Whr4lm 単発NG推奨
連鎖あぼーん推奨
連鎖あぼーん推奨
722デフォルトの名無しさん
2024/02/13(火) 13:49:44.45ID:BKo58x30 スレNG推奨では?
723デフォルトの名無しさん
2024/02/13(火) 14:10:44.85ID:q0xfm82v また境界知能が暴れてんのか
いい加減諦めろよ
いい加減諦めろよ
724デフォルトの名無しさん
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大嫌い
726デフォルトの名無しさん
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の型パラメータでやろうとするとカオスになる
やりたいことがよく分からないけど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の型パラメータでやろうとするとカオスになる
727デフォルトの名無しさん
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
その二種類の混合も可能
できる
例えばこのように
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
その二種類の混合も可能
728デフォルトの名無しさん
2024/02/13(火) 21:08:42.27ID:4D6oEUgV729デフォルトの名無しさん
2024/02/13(火) 22:37:37.84ID:s0kRtfrq ちょっと違うなぁ。
c++ template & conceptだと
wandbox.org/permlink/74j79ZQ3mbPb2cLO
みたいな感じでCircleはf()の影響を受けずに独立させることができる。
draw()メソッドというダックテストを満たせば他はどうでも良い。
Rustのgenericsだと
wandbox.org/permlink/CvepQKXOXaNTJoJm
みたいにCircleとf()の間にtrait Dという相互依存ができて、Circleを好き勝手に定義できなくなる。
f()が欲しいのはあくまでdraw()メソッドだけだから、双方にtrait Dが必要になるのは過剰な相互依存になる。
クラスの継承もそうだけど、余計な依存性は面倒だからできるだけ排除したいところ。
c++ template & conceptだと
wandbox.org/permlink/74j79ZQ3mbPb2cLO
みたいな感じでCircleはf()の影響を受けずに独立させることができる。
draw()メソッドというダックテストを満たせば他はどうでも良い。
Rustのgenericsだと
wandbox.org/permlink/CvepQKXOXaNTJoJm
みたいにCircleとf()の間にtrait Dという相互依存ができて、Circleを好き勝手に定義できなくなる。
f()が欲しいのはあくまでdraw()メソッドだけだから、双方にtrait Dが必要になるのは過剰な相互依存になる。
クラスの継承もそうだけど、余計な依存性は面倒だからできるだけ排除したいところ。
730デフォルトの名無しさん
2024/02/13(火) 23:17:32.55ID:RVgq5WHA それはgeneric constraintがnominalかstructuralかという違い
Rustはnominalのみでstructural generic constraintはサポートしてないよ
Rustはnominalのみでstructural generic constraintはサポートしてないよ
731デフォルトの名無しさん
2024/02/13(火) 23:20:56.53ID:KlTxxkJG Pythonは全てにおいてJuliaに劣った言語だな
732デフォルトの名無しさん
2024/02/13(火) 23:28:47.57ID:u8WS3GIa >>729
Circleを
fn f<T: Drawable>(t: &T) -> f64 { t.draw() }
に渡したいなら普通に
impl Drawable for Circle {
fn draw(&self) -> f64 { <Circle as D>::draw(self) }
}
を追加するな
コントラクトの明示を余計な依存関係だとは思わない
ちなみに
impl Circle {
fn draw() -> f64 {...}
}
みたいに本体のimplに定義するとCircleのself.draw()は全部こっちで解決されるから
impl Drawable for Circle {
fn draw(&self) -> f64 { self.draw() }
}
って書ける
1つの型に複数のtraitで同じ名前の関数を持たせるのはRustだとたまに見かける
impl Debugとimpl Displayはどっちもfn fmt()で別の実装するし
Circleを
fn f<T: Drawable>(t: &T) -> f64 { t.draw() }
に渡したいなら普通に
impl Drawable for Circle {
fn draw(&self) -> f64 { <Circle as D>::draw(self) }
}
を追加するな
コントラクトの明示を余計な依存関係だとは思わない
ちなみに
impl Circle {
fn draw() -> f64 {...}
}
みたいに本体のimplに定義するとCircleのself.draw()は全部こっちで解決されるから
impl Drawable for Circle {
fn draw(&self) -> f64 { self.draw() }
}
って書ける
1つの型に複数のtraitで同じ名前の関数を持たせるのはRustだとたまに見かける
impl Debugとimpl Displayはどっちもfn fmt()で別の実装するし
733デフォルトの名無しさん
2024/02/13(火) 23:28:48.94ID:RVgq5WHA >>726
>traitを実装するときに内部で自動的に決まる ⇒ association type(例:Deref::Target)
ある型に対するtrait実装をただ一つだけにしたいものや
自然と一つだけになるような性質のものはassciated typesを使う
使う側はassociated typesのほうが使いやすいので
悩んだらとりあえずassociated typesからはじめてみる
>traitを実装するときに内部で自動的に決まる ⇒ association type(例:Deref::Target)
ある型に対するtrait実装をただ一つだけにしたいものや
自然と一つだけになるような性質のものはassciated typesを使う
使う側はassociated typesのほうが使いやすいので
悩んだらとりあえずassociated typesからはじめてみる
734デフォルトの名無しさん
2024/02/13(火) 23:30:39.22ID:9eHJiOzP735デフォルトの名無しさん
2024/02/13(火) 23:32:24.97ID:RaqlAe+S traitとかいうつまらない機能にこだわってないでPython極めろよ
時代はAIだぞ
時代はAIだぞ
736デフォルトの名無しさん
2024/02/13(火) 23:35:00.89ID:8wj/C7pB >>735
Rustをただ貶したいだけのやつは黙っとけよ雑魚
Rustをただ貶したいだけのやつは黙っとけよ雑魚
737デフォルトの名無しさん
2024/02/14(水) 05:05:25.04ID:uLd8jazY Pythonはスクリプト言語のクセにメソッドチェーンもロクに使えないうんこだからなぁ。
比較で持ち出すならせめてNimにしろよ。
比較で持ち出すならせめてNimにしろよ。
738デフォルトの名無しさん
2024/02/14(水) 05:28:01.52ID:uLd8jazY >732 >734
Rustのtrait boundはあらかじめ型の方でtraitを準備しておかなきゃいけない。
これはRustが嫌っているクラスの継承みたいなもので、genericsやるごとに元の型/traitを弄くり回す必要が出てこない?
呼び出し元が真に必要なのは機能だけなんだから、同じ名前で互換性のある引数型・戻り値型ならそのまま利用できる方が良い。
まあ、ダックタイプみたいに手を抜かずにAdapter作れ、と言う方針でも良いけど、それならAdapter helperをもっと充実して欲しいところ。
AdapterパターンとかDecorator パターンて重要なのに言語側のサポート薄いよなぁ。
Rustのtrait boundはあらかじめ型の方でtraitを準備しておかなきゃいけない。
これはRustが嫌っているクラスの継承みたいなもので、genericsやるごとに元の型/traitを弄くり回す必要が出てこない?
呼び出し元が真に必要なのは機能だけなんだから、同じ名前で互換性のある引数型・戻り値型ならそのまま利用できる方が良い。
まあ、ダックタイプみたいに手を抜かずにAdapter作れ、と言う方針でも良いけど、それならAdapter helperをもっと充実して欲しいところ。
AdapterパターンとかDecorator パターンて重要なのに言語側のサポート薄いよなぁ。
739デフォルトの名無しさん
2024/02/14(水) 06:58:38.09ID:t2TEYrx/ >>738
>>これはRustが嫌っているクラスの継承みたいなもの
クラス継承は基底クラスの実装をそのまま継承する実装継承になっていることが問題点
一方でRustはトレイト境界となるトレイトに対して自分で実装を用意する
したがってRustでは実装継承とはならず問題が生じない
>>これはRustが嫌っているクラスの継承みたいなもの
クラス継承は基底クラスの実装をそのまま継承する実装継承になっていることが問題点
一方でRustはトレイト境界となるトレイトに対して自分で実装を用意する
したがってRustでは実装継承とはならず問題が生じない
740デフォルトの名無しさん
2024/02/14(水) 07:00:00.30ID:HWQ4xiFb 自演きもいなあ
741デフォルトの名無しさん
2024/02/14(水) 07:00:27.71ID:523CbVaw 実装継承はゴミ
742デフォルトの名無しさん
2024/02/14(水) 07:05:57.04ID:Uwd6Wtce743デフォルトの名無しさん
2024/02/14(水) 07:33:52.24ID:uLd8jazY744デフォルトの名無しさん
2024/02/14(水) 08:08:30.71ID:b46uhNiQ >>742
実運用はビルド済だから関係ないな。
実運用はビルド済だから関係ないな。
745デフォルトの名無しさん
2024/02/14(水) 08:09:58.02ID:t2TEYrx/746デフォルトの名無しさん
2024/02/14(水) 08:41:45.06ID:W3PM5KGQ >>745
早すぎる最適化が問題なんだから、トレイトもその問題を引き継いでるぞ
早すぎる最適化が問題なんだから、トレイトもその問題を引き継いでるぞ
747デフォルトの名無しさん
2024/02/14(水) 08:51:32.74ID:t2TEYrx/748デフォルトの名無しさん
2024/02/14(水) 08:55:57.66ID:b46uhNiQ749デフォルトの名無しさん
2024/02/14(水) 09:07:35.89ID:L7EuZktb 真面目に理解したいなら>>730が正解だからstructural typingとnominal typingの意味を調べてくればいいよ
750デフォルトの名無しさん
2024/02/14(水) 09:20:06.07ID:BSRmwKLd >>729
C++は酷いな
struct定義の時点でdraw()宣言を要求してしまうのか
Rustなら
struct定義の時点でdraw()宣言を要求せずに済む
後からdraw()という機能(=Drawableトレイト)が必要になった時点で
structに対してDrawableを実装すればいい
Rustの方が優れてるな
C++は酷いな
struct定義の時点でdraw()宣言を要求してしまうのか
Rustなら
struct定義の時点でdraw()宣言を要求せずに済む
後からdraw()という機能(=Drawableトレイト)が必要になった時点で
structに対してDrawableを実装すればいい
Rustの方が優れてるな
751デフォルトの名無しさん
2024/02/14(水) 09:36:07.02ID:48k6rT3Y■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 首相官邸前で「戦争あおるな」 台湾有事巡る答弁に抗議 [蚤の市★]
- 国民・榛葉氏「中国焦ってる」 [ぐれ★]
- 高市首相告白「『なめられない服』を選ぶことに数時間を費やしました」「外交交渉でマウント取れる服、買わなくてはいかんかもなぁ」 [ぐれ★]
- 【高市リスク】立民・小西洋之参院議員「高市総理がとんでもない安全保障オンチで外交オンチ」 [ぐれ★]
- 中国、高市首相非難の漫画 在フィリピン大使館がXに投稿 [ぐれ★]
- 『νガンダム』 最高峰ガンプラの“化け物スペック”に驚愕の声 「6万6000円でも安く感じる」「一生モノ」 [冬月記者★]
- 日本人「憲法9条があれば侵略されないって叫んでた売国左翼のゴミどもは今どんな気分?😂wwwwww」 [441660812]
- 【んな専🏡】三連休もんなってんなってんなりまくるのらよ🍬(・o・🍬)🏰
- 高市「財務省案はしょぼすぎる」経済対策自ら上乗せ、野党の要望も取り入れ予算規模拡大 [903292576]
- 早く中国と戦争したいよな??????????????????🤔
- 女死ね
- 【悲報】東京都民さん、20過ぎてるのに自転車に乗っててて大炎上wwwwwwwwwwww女「いい歳した男で自転車に乗るのは知的障がい者だけだよ? [483447288]
