公式
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 part23
https://mevius.5ch.net/test/read.cgi/tech/1708677472/
Rust part24
■ このスレッドは過去ログ倉庫に格納されています
2024/05/27(月) 06:41:26.82ID:T4AFD1f4
548デフォルトの名無しさん
2024/07/01(月) 15:56:35.04ID:iVgAAf6K rustもprint時のstring interpolationはもう少しどうにかならんものかね
549デフォルトの名無しさん
2024/07/01(月) 18:51:52.61ID:r9fpSp0F macroなんで自分で描き替えればええんやで
550デフォルトの名無しさん
2024/07/01(月) 20:45:22.07ID:WAZyoaEd 自作した後の自己肯定を10年続けるまでがプログラム技術
551デフォルトの名無しさん
2024/07/01(月) 23:04:21.05ID:3i64JhgU 昔、C++でprintf使ったら怖い人に怒られたのに
今じゃあれはクソ設計だったって評価に固まってるんだね、英語圏でも
今じゃあれはクソ設計だったって評価に固まってるんだね、英語圏でも
552デフォルトの名無しさん
2024/07/01(月) 23:12:10.92ID:wNG1bhSA >>551
C/C++ の printf は iostream 以上にカス。
型のチェックがガバガバだし、ちゃんと理解してないやつのほうが多いので常に問題を引き起こしていた。
ただ、記法としてはこれで良かった。
C/C++ の printf は iostream 以上にカス。
型のチェックがガバガバだし、ちゃんと理解してないやつのほうが多いので常に問題を引き起こしていた。
ただ、記法としてはこれで良かった。
553デフォルトの名無しさん
2024/07/02(火) 02:06:02.53ID:bkJ9zxrb 今の C/C++ の printf はコンパイル時に型チェックして警告してくれる
554デフォルトの名無しさん
2024/07/02(火) 05:00:17.05ID:VNjymWLQ555デフォルトの名無しさん
2024/07/02(火) 06:06:14.65ID:wHmBy3hI >>554
みえる、じゃなくて完全に遺物だろ
みえる、じゃなくて完全に遺物だろ
556デフォルトの名無しさん
2024/07/02(火) 06:44:02.90ID:VNjymWLQ 表示はRustのDisplayトレイト実装方式が洗練されていて使いやすくていいね
557デフォルトの名無しさん
2024/07/02(火) 08:28:24.43ID:UD4Nu927 仕様書が聖書のようなものだから遺物だろうが仕様書に逆らうわけにはいかないじゃん
558デフォルトの名無しさん
2024/07/02(火) 08:41:47.20ID:hGRi0mb2 >>544
C の関数は基本的にはちゃんと型はついてるが可変長引数は静的な型情報を捨てること実現してる。
もちろんそれを引き継いだ C++ も。
C++ は後に variadic template による安全な可変長引数を導入したが古いスタイルの可変長引数も廃止はしてない。
言語仕様を素朴に実装したら型はわからないんだよ。
printf などの一部の関数に限っては「関数の型情報によらずに」コンパイラが特別扱いでチェックしてる。
関数の型を元に検査してるんじゃなくて printf の仕様をビルトインして特別扱いしてるの。
C の関数は基本的にはちゃんと型はついてるが可変長引数は静的な型情報を捨てること実現してる。
もちろんそれを引き継いだ C++ も。
C++ は後に variadic template による安全な可変長引数を導入したが古いスタイルの可変長引数も廃止はしてない。
言語仕様を素朴に実装したら型はわからないんだよ。
printf などの一部の関数に限っては「関数の型情報によらずに」コンパイラが特別扱いでチェックしてる。
関数の型を元に検査してるんじゃなくて printf の仕様をビルトインして特別扱いしてるの。
559デフォルトの名無しさん
2024/07/02(火) 10:27:11.96ID:LnXo4/R2 >>538
result.and_then(|val| Ok(f(val)?))
とか
result.and_then(|val| Ok(f(val).unwrap()))
じゃなくて
result.and_then(|val| Ok(f(val)))
で良いのはなぜ?
result.and_then(|val| Ok(f(val)?))
とか
result.and_then(|val| Ok(f(val).unwrap()))
じゃなくて
result.and_then(|val| Ok(f(val)))
で良いのはなぜ?
560デフォルトの名無しさん
2024/07/02(火) 10:37:23.15ID:tsLlTVbC Rust初めて使ったときは「println! みたいな基本的なものがマクロで?大丈夫かこの言語」みたいに思ったもんだが、
よくよく考えるとマクロにせずに、柔軟なシグニチャでなんとかしようとする他の言語のほうがよっぽど醜いもんな。
よくよく考えるとマクロにせずに、柔軟なシグニチャでなんとかしようとする他の言語のほうがよっぽど醜いもんな。
561デフォルトの名無しさん
2024/07/02(火) 10:55:15.33ID:/ZI4FWA6562デフォルトの名無しさん
2024/07/02(火) 11:50:20.39ID:hGRi0mb2 >>560
C++ のライトユーザは関数テンプレートのことを誤ってテンプレート関数と呼ぶことが頻繁にある。
関数テンプレートが関数であるという誤解が言葉になって表れてるんだと思う。
単に使うだけなら関数みたいに見えてしまうからかもしれない。
関数テンプレートは関数を生成する元になるテンプレートだから関数テンプレートなので「生成する」というところに着目したらマクロで生成するのでも理屈はあまり変わらないかもしれない。
ただ、 LISP 系言語の経験から言うと構文レベルで制御されるマクロはエディタのサポートが受けづらいし、ドキュメントを型で表現できないのはやりづらい。
マクロ展開の失敗がどういう失敗なのかをきちんとエラーメッセージにするのも難しい。
デメリットもあるけど、どうせどこかに問題があるならこのくらいで良いという潔さは感じる。
C++ のライトユーザは関数テンプレートのことを誤ってテンプレート関数と呼ぶことが頻繁にある。
関数テンプレートが関数であるという誤解が言葉になって表れてるんだと思う。
単に使うだけなら関数みたいに見えてしまうからかもしれない。
関数テンプレートは関数を生成する元になるテンプレートだから関数テンプレートなので「生成する」というところに着目したらマクロで生成するのでも理屈はあまり変わらないかもしれない。
ただ、 LISP 系言語の経験から言うと構文レベルで制御されるマクロはエディタのサポートが受けづらいし、ドキュメントを型で表現できないのはやりづらい。
マクロ展開の失敗がどういう失敗なのかをきちんとエラーメッセージにするのも難しい。
デメリットもあるけど、どうせどこかに問題があるならこのくらいで良いという潔さは感じる。
563デフォルトの名無しさん
2024/07/02(火) 12:37:13.61ID:UD4Nu927 仕様書がなくなっても
統合環境の支援の成功体験から逆算された縛りがあるんだな
統合環境の支援の成功体験から逆算された縛りがあるんだな
564デフォルトの名無しさん
2024/07/02(火) 16:01:50.82ID:LnXo4/R2 and_thenってネストが深くても自動で中いじってくれるのか
565デフォルトの名無しさん
2024/07/02(火) 17:51:34.66ID:XMmeU2jA Slint ってなんなん? javascript ?
conrod とどう違うん?
conrod とどう違うん?
566デフォルトの名無しさん
2024/07/02(火) 18:31:45.59ID:W5A1QJhP conrodならもう死んだよ
567デフォルトの名無しさん
2024/07/02(火) 18:32:06.29ID:0AnHLV8o >>559
Rustでそれらは全てmatchになるので置き換えて比較すれば理解は簡単
ちなみにmatchにすると記述が長くなるが同レベルで「?」オペレータ適用できるメリットがある
result.and_then(|val| f(val))
これはこう置き換えられる
match result {
Ok(val) => f(val),
Err(err) => Err(err),
}
result.map(|val| f(val))
これはこう置き換えられる
match result {
Ok(val) => Ok(f(val)),
Err(err) => Err(err),
}
つまり常にこれが成り立つ
>>534
> 以下の二つは同等
> result.map(|val| f(val))
> result.and_then(|val| Ok(f(val)))
Rustでそれらは全てmatchになるので置き換えて比較すれば理解は簡単
ちなみにmatchにすると記述が長くなるが同レベルで「?」オペレータ適用できるメリットがある
result.and_then(|val| f(val))
これはこう置き換えられる
match result {
Ok(val) => f(val),
Err(err) => Err(err),
}
result.map(|val| f(val))
これはこう置き換えられる
match result {
Ok(val) => Ok(f(val)),
Err(err) => Err(err),
}
つまり常にこれが成り立つ
>>534
> 以下の二つは同等
> result.map(|val| f(val))
> result.and_then(|val| Ok(f(val)))
568デフォルトの名無しさん
2024/07/02(火) 18:34:46.10ID:0AnHLV8o569デフォルトの名無しさん
2024/07/02(火) 22:09:25.08ID:PHqzDXJL RustのGUIまわりは安定しない印象
conrodやdruidやorbtkのようにここ数年内に消えたものもあるし、いま人気のものも今後消えないとは言い切れない感じがする
conrodやdruidやorbtkのようにここ数年内に消えたものもあるし、いま人気のものも今後消えないとは言い切れない感じがする
570デフォルトの名無しさん
2024/07/02(火) 23:44:50.93ID:sYgKhdog RustでGUIならこの5つ
https://iced.rs/
https://slint.dev/
https://tauri.app/
https://www.egui.rs/
https://dioxuslabs.com/
方向性がそれぞれ異なるので目的に合わせて選ぶ
https://iced.rs/
https://slint.dev/
https://tauri.app/
https://www.egui.rs/
https://dioxuslabs.com/
方向性がそれぞれ異なるので目的に合わせて選ぶ
571デフォルトの名無しさん
2024/07/03(水) 03:55:17.90ID:aYT0CHki tauri遅いな
eguiはサクサク
eguiはサクサク
572デフォルトの名無しさん
2024/07/03(水) 06:25:46.46ID:uJMJjlOC573デフォルトの名無しさん
2024/07/03(水) 07:06:30.59ID:OX+N1U2y574デフォルトの名無しさん
2024/07/03(水) 09:04:55.71ID:TWMTGehv rstkはどうなの?
575デフォルトの名無しさん
2024/07/03(水) 20:03:02.84ID:zo80GwO2 しかしほんとにデスクトップアプリのライブラリってすぐ出ては消えていくな
自分で作ったほうが安定するんじゃないか
自分で作ったほうが安定するんじゃないか
576デフォルトの名無しさん
2024/07/03(水) 22:16:18.13ID:opT6Sw/L クロスプラットフォームでいくならwinitとwgpuぐらいは頼らないと無理じゃないかな。
しかしその2つもまだまだブレイキングチェンジ激しい発展途上だけどね。
しかしその2つもまだまだブレイキングチェンジ激しい発展途上だけどね。
577デフォルトの名無しさん
2024/07/03(水) 22:53:26.72ID:cnEeYmV/578デフォルトの名無しさん
2024/07/03(水) 23:54:41.68ID:nLMSU1jW >>573
Yewのこと?ならそう書けよYewなんてくっそマイナーでReact使うのが普通なのに
Yewのこと?ならそう書けよYewなんてくっそマイナーでReact使うのが普通なのに
579デフォルトの名無しさん
2024/07/03(水) 23:56:15.32ID:nLMSU1jW Yew使ったことあるけどゴミだぞまじで
580デフォルトの名無しさん
2024/07/04(木) 00:31:14.93ID:gMzXB5nS 30年くらい前にTcl/Tkを使ったわ。
581デフォルトの名無しさん
2024/07/04(木) 00:37:01.85ID:0fbU9cKr582デフォルトの名無しさん
2024/07/04(木) 04:07:16.49ID:H+976rVP >>570
eguiの公式サイト、オサレね
eguiの公式サイト、オサレね
583デフォルトの名無しさん
2024/07/04(木) 07:04:39.24ID:pjeQ5Ua2 サイト自体が見本なのな
584デフォルトの名無しさん
2024/07/04(木) 10:17:42.23ID:HAZY/W56 reactもこの10年でだいぶ変わったわな。
プレゼンテーション層はそういうもんかもなと思ってる。
プレゼンテーション層はそういうもんかもなと思ってる。
585デフォルトの名無しさん
2024/07/05(金) 08:36:28.68ID:GQkuHNKI 銀河英雄伝説で考えるセキュリティ--将来の「帝国の双璧」が陥った罠とセキュリティ業界
https://japan.zdnet.com/article/35220819/
https://japan.zdnet.com/article/35220819/
586デフォルトの名無しさん
2024/07/05(金) 10:29:56.20ID:G0wJmtVU587デフォルトの名無しさん
2024/07/05(金) 18:22:04.62ID:cNWaNn+n どちらも利用者少なくて数の差ではわからんな
588デフォルトの名無しさん
2024/07/06(土) 04:04:15.80ID:MPM8/XaB Tkは何十年も前のGUIで古いからね
589デフォルトの名無しさん
2024/07/06(土) 04:24:49.23ID:mF2Bv0pD やりたいことを出来る範囲で最小限の道具を選ぶのが望ましい。
Tk で足りるときは Tk を使えばよい。
Tk で足りるときは Tk を使えばよい。
590デフォルトの名無しさん
2024/07/06(土) 09:36:32.81ID:5g1fLWJR UNIX系でGUIをどうしても使わないといけない場合にTk使ってたけど
今はhtmlでいいかなって
今はhtmlでいいかなって
591デフォルトの名無しさん
2024/07/06(土) 09:36:55.52ID:tDR9EaCv wgpu最強だが変化速過ぎ
592デフォルトの名無しさん
2024/07/06(土) 10:12:50.18ID:fehAbjyn 正直GUIをRustで書くメリットが思いつかない
ただの2DグラフィックでRustの実行速度を求めるってのはおかしな話だと思うもん
ロジックをRustで書いてGUIは安定してるReactでいいよ
ただの2DグラフィックでRustの実行速度を求めるってのはおかしな話だと思うもん
ロジックをRustで書いてGUIは安定してるReactでいいよ
593デフォルトの名無しさん
2024/07/06(土) 10:14:23.55ID:5g1fLWJR wgpuは三角を書きたい人向けでGUIとは関係ない
594デフォルトの名無しさん
2024/07/06(土) 11:05:29.63ID:l5YBQ3zH595デフォルトの名無しさん
2024/07/06(土) 12:27:12.12ID:KR8eM4HE >>592
reactはデータリフトアップして上にまとめるのめんどい。状態管理だけにライブラリ導入とか無理あるんじゃねーの
reactはデータリフトアップして上にまとめるのめんどい。状態管理だけにライブラリ導入とか無理あるんじゃねーの
596デフォルトの名無しさん
2024/07/06(土) 12:35:51.52ID:5g1fLWJR streamlitなどのHTML書かないでも作れるようなのがメジャーになればいいんだけど
597デフォルトの名無しさん
2024/07/06(土) 12:47:45.00ID:5g1fLWJR reactがパックされてて高度なページはjinjaみたいので中のデータだけいじれればなんでもいい気がする
通常のページの記述はhtmlではなく素のrustで簡単に書ける必要がある
通常のページの記述はhtmlではなく素のrustで簡単に書ける必要がある
598デフォルトの名無しさん
2024/07/06(土) 13:00:47.32ID:mF2Bv0pD ウェブ技術系は普段使いするにはリッチすぎるんだよな。
屋上屋を重ねまくった一番上でしょうもないことをするのは気が引ける。
屋上屋を重ねまくった一番上でしょうもないことをするのは気が引ける。
599デフォルトの名無しさん
2024/07/06(土) 13:56:26.87ID:5g1fLWJR streamlitレベルでいいんだけどな
600デフォルトの名無しさん
2024/07/06(土) 14:33:03.19ID:+47S9kNa rust版のstreamlit作れよ
601デフォルトの名無しさん
2024/07/06(土) 14:56:55.97ID:X3tW4qHs タウリンなんていらん
eguiで充分
eguiで充分
602デフォルトの名無しさん
2024/07/06(土) 22:06:51.02ID:PIuhFLFS Rustってオブジェクト指向言語ではないということですが、それでも困ることはないんですか?
これが最後の言語だ!とRustって名付けたんですか?
これが最後の言語だ!とRustって名付けたんですか?
603デフォルトの名無しさん
2024/07/06(土) 22:35:00.58ID:KApGuCzH Rust触ってないから分らんけど、QtのRustラッパーライブラリは無いのん?
一応Android/iOS含めたソースコードレベルでのマルチプラットフォームライブラリに進化しているらしいが、Haskellにすらラッパーライブラリあるんなら、Rustにも探せばあるんじゃ?
一応Android/iOS含めたソースコードレベルでのマルチプラットフォームライブラリに進化しているらしいが、Haskellにすらラッパーライブラリあるんなら、Rustにも探せばあるんじゃ?
604デフォルトの名無しさん
2024/07/07(日) 00:52:56.61ID:goRFIXq7 >>602
ネタにマジレスかもしれないけどRustはオブジェクト指向的なものも使えるよ
構造体にメソッドを持たせたり、インターフェースのようなものも扱える
継承はないけど、これはむしろ「その方が良い」というもので、同じくモダンな言語であるGOでも継承は無くしてる
ネタにマジレスかもしれないけどRustはオブジェクト指向的なものも使えるよ
構造体にメソッドを持たせたり、インターフェースのようなものも扱える
継承はないけど、これはむしろ「その方が良い」というもので、同じくモダンな言語であるGOでも継承は無くしてる
605デフォルトの名無しさん
2024/07/07(日) 01:50:01.52ID:NnH56+1c オブジェクト指向プログラミングには
クラス継承という悪いやり方を用いるダメな方法と
クラス継承を用いない正しい方法があって
RustやGoなどのモダンな言語は後者の方法をサポートしている
クラス継承という悪いやり方を用いるダメな方法と
クラス継承を用いない正しい方法があって
RustやGoなどのモダンな言語は後者の方法をサポートしている
606デフォルトの名無しさん
2024/07/07(日) 08:48:31.04ID:5sr/rOi5607デフォルトの名無しさん
2024/07/07(日) 09:17:14.13ID:7aG8TPof >>604-605
ありがとうございました。
「継承」って良いからオブジェクト指向言語の機能になっていたのではないんですか?
なんか時代とともに、昔は良いとされていたものが今ではダメになったりするんですか?
なぜそんなに揺らぐのでしょうか?
言語の設計の学者はぼんくらばかりなんですか?
ありがとうございました。
「継承」って良いからオブジェクト指向言語の機能になっていたのではないんですか?
なんか時代とともに、昔は良いとされていたものが今ではダメになったりするんですか?
なぜそんなに揺らぐのでしょうか?
言語の設計の学者はぼんくらばかりなんですか?
608デフォルトの名無しさん
2024/07/07(日) 09:17:45.74ID:LJE8DJUz 継承がないほうが「正しい」というのは行きすぎた思想だよ。
正しく使えないカスばっかりだという現実に敗北しただけ。
正しく使えないカスばっかりだという現実に敗北しただけ。
609デフォルトの名無しさん
2024/07/07(日) 09:49:42.70ID:Qx35uTG5 何がダメかというと「ある型(クラス)が別の型(クラス)の実装を継承してしまうこと」でこれが依存関係となり負の連鎖をもたらす
クラスの継承はこれに該当するから使ってはいけない
Rustにも継承とみなせる機能はあるけれど上記に該当しないため大丈夫
そこが決定的な違い
クラスの継承はこれに該当するから使ってはいけない
Rustにも継承とみなせる機能はあるけれど上記に該当しないため大丈夫
そこが決定的な違い
610デフォルトの名無しさん
2024/07/07(日) 10:06:45.11ID:rz+I+TB4 >実装を継承してしまうこと」でこれが依存関係となり負の連鎖をもたらす
実装継承を使えないレベルの人はだいたいこういうふわっとした認識だよね
実装継承を使えないレベルの人はだいたいこういうふわっとした認識だよね
611デフォルトの名無しさん
2024/07/07(日) 10:11:15.42ID:Eha1J0DV 暗殺術を正しく使える賢者がいる国なんてあったら嫌だなあ
正しく使える者など絶対存在しないという思想は行き過ぎではなくむしろ穏健派
正しく使える者など絶対存在しないという思想は行き過ぎではなくむしろ穏健派
612デフォルトの名無しさん
2024/07/07(日) 10:27:32.62ID:nRN7u0+P 全部が悪いと言う話じゃないけど
既存部分をただ継承させるだけならいいけど一部を上書きしたりして
それが全ての箇所で矛盾のない正しい挙動になるか判定が難しいか不可能な場合がある
結果実装コスト以上に考えざるを得ない…残念なことに本当に楽をしたのかどうか不明な場合がある
継承がないとそれは避けられるから使うな!と言う人が出てくる
既存部分をただ継承させるだけならいいけど一部を上書きしたりして
それが全ての箇所で矛盾のない正しい挙動になるか判定が難しいか不可能な場合がある
結果実装コスト以上に考えざるを得ない…残念なことに本当に楽をしたのかどうか不明な場合がある
継承がないとそれは避けられるから使うな!と言う人が出てくる
613デフォルトの名無しさん
2024/07/07(日) 10:29:57.11ID:nRN7u0+P 変数などに細かいアクセス制限のない言語は特に陥りやすい
制限があったところで制作者がそれを適切に選ばなければならない
どうしても経験や思考時間を必要とする
ガチ勢にはそれが無駄に思えるんだろう
制限があったところで制作者がそれを適切に選ばなければならない
どうしても経験や思考時間を必要とする
ガチ勢にはそれが無駄に思えるんだろう
614デフォルトの名無しさん
2024/07/07(日) 10:32:06.74ID:syATK/7U 実装継承は問題を引き起こすだけでなく
代わりの継承機能を提供することで
実装継承は全く不要になったことが大きい
そのためRust、Zig、Nim、Goなどモダンな言語はいずれも言語仕様からクラスを追放している
代わりの継承機能を提供することで
実装継承は全く不要になったことが大きい
そのためRust、Zig、Nim、Goなどモダンな言語はいずれも言語仕様からクラスを追放している
615デフォルトの名無しさん
2024/07/07(日) 10:33:57.16ID:nRN7u0+P それをやっても実質オーバーライド問題は解決されていないけどな
616デフォルトの名無しさん
2024/07/07(日) 10:45:17.84ID:4XBGKwNL >>607
実装継承はすごく便利だからオブジェクト指向言語では誰でも使いやすい機能としてサポートされてた
でも便利すぎて乱用されたからその経験と反省から不便でも乱用されにくいようにした方が得策という考えに至った言語開発者が増えたというのが2010年代
だから今は実装継承は上級者向けの機能という扱い
GoでもRustでも一般的なオブジェクト指向言語よりもわざと使いにくくすることで利便性と問題点を理解して実装方法を選択できる上級者向けの技術になっている
実装継承はすごく便利だからオブジェクト指向言語では誰でも使いやすい機能としてサポートされてた
でも便利すぎて乱用されたからその経験と反省から不便でも乱用されにくいようにした方が得策という考えに至った言語開発者が増えたというのが2010年代
だから今は実装継承は上級者向けの機能という扱い
GoでもRustでも一般的なオブジェクト指向言語よりもわざと使いにくくすることで利便性と問題点を理解して実装方法を選択できる上級者向けの技術になっている
617デフォルトの名無しさん
2024/07/07(日) 10:46:54.77ID:RLTFRTn6 >>615
それは(実装継承となる)クラスでのみ問題となるよな
それは(実装継承となる)クラスでのみ問題となるよな
618デフォルトの名無しさん
2024/07/07(日) 10:53:40.16ID:suA6qkkI >>616
デタラメを書くなよ
問題となる機能の代わりに便利で問題を起こさない機能を導入したのがRustだ
頭の固いクラス原理主義の人だけが使いにくいと主張してるが
クラスの洗脳から解き放たれた普通の人たちはRustが便利で使いやすいとの理解に至っている
デタラメを書くなよ
問題となる機能の代わりに便利で問題を起こさない機能を導入したのがRustだ
頭の固いクラス原理主義の人だけが使いにくいと主張してるが
クラスの洗脳から解き放たれた普通の人たちはRustが便利で使いやすいとの理解に至っている
619デフォルトの名無しさん
2024/07/07(日) 11:05:57.49ID:nRN7u0+P >>618
それは違うかなw
Rustで具体的に他と何が違ってて便利になってるか明言できるか?
Rustでも本質は変わってないのでなんも考えないでコピペ(継承)は避けましょうね
ぐらいのレベルでしかない
それは違うかなw
Rustで具体的に他と何が違ってて便利になってるか明言できるか?
Rustでも本質は変わってないのでなんも考えないでコピペ(継承)は避けましょうね
ぐらいのレベルでしかない
620デフォルトの名無しさん
2024/07/07(日) 11:21:22.62ID:goRFIXq7 >>607
当時は良いと考えられてたものが後から振り返って「あれは良くなかった」と分かる例はプログラミングに限らず多くあるだろ
Cの時代にRustを設計しろというのは無理で、その間にC++やJavaを経験し、そこで生まれた課題意識がないとGoやRustは生まれなかった
ニュートンの時代に古典力学を超えた量子力学を発見しろみたいなもの
当時は良いと考えられてたものが後から振り返って「あれは良くなかった」と分かる例はプログラミングに限らず多くあるだろ
Cの時代にRustを設計しろというのは無理で、その間にC++やJavaを経験し、そこで生まれた課題意識がないとGoやRustは生まれなかった
ニュートンの時代に古典力学を超えた量子力学を発見しろみたいなもの
621デフォルトの名無しさん
2024/07/07(日) 11:23:38.24ID:E46Yge5y622デフォルトの名無しさん
2024/07/07(日) 11:31:52.81ID:Eha1J0DV 当初から、算数の四則演算の型を継承で説明できないことを
知りながら無理を通したぼんくらが流行らせたのだ
難しい算数よりも布教しやすい教義を優先するほうが儲かるという判断
その判断が合理的と思うかどうかは人それぞれ
知りながら無理を通したぼんくらが流行らせたのだ
難しい算数よりも布教しやすい教義を優先するほうが儲かるという判断
その判断が合理的と思うかどうかは人それぞれ
623デフォルトの名無しさん
2024/07/07(日) 11:55:49.26ID:nRN7u0+P 根本的に継承だけの問題じゃない
結局可視であろうがなかろうが関数自体の挙動が理解しないといけない
addがあってもリストの一番前に追加するか後ろに追加するかと言う機能の違いが合って
コーディングする側がそれを統一的に扱って思った場所に追加されずにバグになる
そういう話だからトレイトだからとか継承亡くしたからとかどうとか関係ない
結局可視であろうがなかろうが関数自体の挙動が理解しないといけない
addがあってもリストの一番前に追加するか後ろに追加するかと言う機能の違いが合って
コーディングする側がそれを統一的に扱って思った場所に追加されずにバグになる
そういう話だからトレイトだからとか継承亡くしたからとかどうとか関係ない
624デフォルトの名無しさん
2024/07/07(日) 11:59:33.31ID:kX4AKaVh 継承はなくても良いがあると便利 vs 継承はあってはならない
C++は知らなくてもいいが先に知っておくと理解が速い vs C++の理解はいらない
こういう境界線のビミョーな議論だと「まだ結論は出てない」と嘯きやすく続けやすいんだろうか
C++は知らなくてもいいが先に知っておくと理解が速い vs C++の理解はいらない
こういう境界線のビミョーな議論だと「まだ結論は出てない」と嘯きやすく続けやすいんだろうか
625デフォルトの名無しさん
2024/07/07(日) 13:43:23.71ID:7CPxEWjC interfaceはおっけー、abstractは隠蔽されるからだめってことだよ
継承全てが悪というわけではない
継承全てが悪というわけではない
626デフォルトの名無しさん
2024/07/07(日) 13:46:30.77ID:7CPxEWjC kotlinでもabstractクラスはコード自動生成するときしか書かないもん
rustはtraitで十分だし
rustはtraitで十分だし
627デフォルトの名無しさん
2024/07/07(日) 14:05:34.19ID:nRN7u0+P rustにも派生はあるじゃん
628デフォルトの名無しさん
2024/07/07(日) 16:52:52.64ID:7aG8TPof 大きなプログラムを実際に書かずに、本を読むだけで、この言語のこの仕様は悪いとか良いとか判断できるようになりますか?
629デフォルトの名無しさん
2024/07/07(日) 17:13:03.91ID:KUDE2scl 継承はいらん。
理想(のひとつ)はダックタイプで、継承は実装上の都合でそうなっている妥協の産物でしかない。
理想(のひとつ)はダックタイプで、継承は実装上の都合でそうなっている妥協の産物でしかない。
630デフォルトの名無しさん
2024/07/07(日) 17:36:36.74ID:h+XkpNj2 今まで築いてきた価値観を繰り返し短い言葉で否定して徹底的に壊すというのが洗脳の基本
「継承は悪」「モダンな言語に継承はない」「Rustでは継承による問題は発生しない」(※全部嘘ですよ)
最初に洗脳をはじめた人と違って
洗脳者に洗脳された人は本質を理解していない
そればかりか真実かどうかなんてもはやどうでもよく
自分が信じてることだけが真実だと思っている
だから議論しようという気もなく一方的に同じことを繰り返し書くだけ
掲示板界隈では身近によくあることなので気をつけようね
「継承は悪」「モダンな言語に継承はない」「Rustでは継承による問題は発生しない」(※全部嘘ですよ)
最初に洗脳をはじめた人と違って
洗脳者に洗脳された人は本質を理解していない
そればかりか真実かどうかなんてもはやどうでもよく
自分が信じてることだけが真実だと思っている
だから議論しようという気もなく一方的に同じことを繰り返し書くだけ
掲示板界隈では身近によくあることなので気をつけようね
631デフォルトの名無しさん
2024/07/07(日) 18:10:28.88ID:rdCPsToy 継承はプログラミングで絶対に必要な重要な機能で重複コードを避けることができる
ただし継承といっても複数の方法があって実装継承だけは害を招いてしまう
実装継承とは別の型の具体的な実装をそのまま継承してしまうことを指す
つまり実装継承をすると二つの型の間に不必要に強力な依存関係が生じてしまう
クラス継承でプログラムを書くと自然にこの害悪な実装継承となってしまう
そのため様々な異なる方針のモダンな言語が同じ結論に達してクラスを言語仕様から無くした
Rustではトレイトを使うことで健全な継承機能のみを使うことができる
特にトレイトのデフォルト実装はどの型にも依存しないため実装継承にならずに健全な継承のメリットを最大限に享受することができる
ただし継承といっても複数の方法があって実装継承だけは害を招いてしまう
実装継承とは別の型の具体的な実装をそのまま継承してしまうことを指す
つまり実装継承をすると二つの型の間に不必要に強力な依存関係が生じてしまう
クラス継承でプログラムを書くと自然にこの害悪な実装継承となってしまう
そのため様々な異なる方針のモダンな言語が同じ結論に達してクラスを言語仕様から無くした
Rustではトレイトを使うことで健全な継承機能のみを使うことができる
特にトレイトのデフォルト実装はどの型にも依存しないため実装継承にならずに健全な継承のメリットを最大限に享受することができる
632デフォルトの名無しさん
2024/07/07(日) 18:53:59.08ID:0Udg54Yk >>628
たくさん本を読み自分の頭で考える努力をすればある程度まではなれる
ただし実地の経験がなければ最終的には他人の受け売りを判断基準にするしかなく
経験のある人間に比べると妥当な判断ができない状況が多くなる
言語の仕様は一面的に良いとか悪いとかという判断を下せるものはほとんどない
長所短所を把握した上でどういう状況であれば他の仕様に比べて優れていて
逆にどういう状況であれば他の仕様に比べて劣るのかという
状況に合わせた判断が必要
つまり妥当な判断を下せる確率を上げるためには
言語の仕様を把握する力よりもそれが使われる状況を幅広く奥深く想定する力を身につけることが重要
これを本を読むだけで身につけようとしてもすぐに頭打ちになる
たくさん本を読み自分の頭で考える努力をすればある程度まではなれる
ただし実地の経験がなければ最終的には他人の受け売りを判断基準にするしかなく
経験のある人間に比べると妥当な判断ができない状況が多くなる
言語の仕様は一面的に良いとか悪いとかという判断を下せるものはほとんどない
長所短所を把握した上でどういう状況であれば他の仕様に比べて優れていて
逆にどういう状況であれば他の仕様に比べて劣るのかという
状況に合わせた判断が必要
つまり妥当な判断を下せる確率を上げるためには
言語の仕様を把握する力よりもそれが使われる状況を幅広く奥深く想定する力を身につけることが重要
これを本を読むだけで身につけようとしてもすぐに頭打ちになる
633デフォルトの名無しさん
2024/07/07(日) 19:04:36.65ID:tn8SIXEe634デフォルトの名無しさん
2024/07/07(日) 19:34:52.42ID:goRFIXq7 >>628
他の言語での開発経験がある人が仕様を見て「この言語のこの仕様は好き/嫌い」と言うことはあると思う
どの言語も初心者という人だと無理
それに言語の良し悪しなんて点数で評価できるようなものでないし、好みの問題だったり、ライブラリなどの周辺環境だったり、作りたいもの次第だったりする
他の言語での開発経験がある人が仕様を見て「この言語のこの仕様は好き/嫌い」と言うことはあると思う
どの言語も初心者という人だと無理
それに言語の良し悪しなんて点数で評価できるようなものでないし、好みの問題だったり、ライブラリなどの周辺環境だったり、作りたいもの次第だったりする
635デフォルトの名無しさん
2024/07/07(日) 21:58:17.95ID:rdCPsToy 好き嫌いと良い悪いはしっかり区別つけなければならない
他の型との間で不必要に強力な依存関係が生じてしまう実装継承は悪い
この実装継承となってしまうクラス継承は悪い
Rustに実装継承はなくトレイトを用いることで健全な継承を活用してプログラミングできる
他の型との間で不必要に強力な依存関係が生じてしまう実装継承は悪い
この実装継承となってしまうクラス継承は悪い
Rustに実装継承はなくトレイトを用いることで健全な継承を活用してプログラミングできる
636デフォルトの名無しさん
2024/07/07(日) 22:26:34.08ID:rVoIwJvq 受け売り知識しか持たないとこういう感じで論拠薄弱で空疎な意見しか書けなくなる
いい反面教師だね
いい反面教師だね
637デフォルトの名無しさん
2024/07/07(日) 22:51:49.25ID:goRFIXq7 Rustが継承の問題を防げるのってトレイトだけじゃなくてenumの存在も大きいよね
静的ポリモーフィズムを自然に実装できるから、多態のために無理やりインタフェースに当て嵌めようとしたり、ダウンキャストが必要になったりといったものを防げる
本質的に違うものを抽象化しようとして失敗してる例を見たことのある人はそれなりにいるはず
静的ポリモーフィズムを自然に実装できるから、多態のために無理やりインタフェースに当て嵌めようとしたり、ダウンキャストが必要になったりといったものを防げる
本質的に違うものを抽象化しようとして失敗してる例を見たことのある人はそれなりにいるはず
638デフォルトの名無しさん
2024/07/07(日) 23:03:31.83ID:Eha1J0DV >>633
整数クラスは分数クラスを継承したいが、分母を表す変数は継承したくない
それと文字列 + 文字列が定義されている言語では
分数 + 整数の定義に必要な関数も継承したくない
その関数は文字列と無関係だから
整数クラスは分数クラスを継承したいが、分母を表す変数は継承したくない
それと文字列 + 文字列が定義されている言語では
分数 + 整数の定義に必要な関数も継承したくない
その関数は文字列と無関係だから
639デフォルトの名無しさん
2024/07/07(日) 23:46:19.40ID:QlaAOMK5 >>638
>整数クラスは分数クラスを継承したいが、分母を表す変数は継承したくない
普通、C++だと、整数クラスを作っておき、
分数クラスはそれを継承せずに、
整数クラスを2つメンバに持つクラス
として定義しますよね。
その場合、整数クラスと分数クラスは継承関係を持ってない。
>整数クラスは分数クラスを継承したいが、分母を表す変数は継承したくない
普通、C++だと、整数クラスを作っておき、
分数クラスはそれを継承せずに、
整数クラスを2つメンバに持つクラス
として定義しますよね。
その場合、整数クラスと分数クラスは継承関係を持ってない。
640デフォルトの名無しさん
2024/07/07(日) 23:51:53.41ID:gwkq/Sum >>635
クラス継承の問題はある程度の規模でプログラミングしてきた人の多くが体験してきて、
その根本的原因は実装継承にあることが多くのサイトで解説されている通りだけど、
従来の言語ではクラス継承に代わる手段が弱かったり不便であるため、
仕方なく欠陥のあるクラス継承を使い続けてきた不幸な歴史があるんだよ。
クラス継承を使わずにすむRustは恵まれてる。
クラス継承の問題はある程度の規模でプログラミングしてきた人の多くが体験してきて、
その根本的原因は実装継承にあることが多くのサイトで解説されている通りだけど、
従来の言語ではクラス継承に代わる手段が弱かったり不便であるため、
仕方なく欠陥のあるクラス継承を使い続けてきた不幸な歴史があるんだよ。
クラス継承を使わずにすむRustは恵まれてる。
641デフォルトの名無しさん
2024/07/08(月) 00:13:34.95ID:dSFAEVvP >>638
分数クラスを継承して整数クラスを作りたいという要求と
分母を表す変数は継承したくないという要求が矛盾してる
分数クラスを継承して整数クラスを作りたいということは
分数を特化したものが整数であるというモデルを
分数クラスと整数クラスの実装でも作りたいということ
そのためには整数クラスにも分母を表す変数が当然必要
矛盾した要求が実現できないのは実装技術の問題ではなく要求の不備
分数クラスを継承して整数クラスを作りたいという要求と
分母を表す変数は継承したくないという要求が矛盾してる
分数クラスを継承して整数クラスを作りたいということは
分数を特化したものが整数であるというモデルを
分数クラスと整数クラスの実装でも作りたいということ
そのためには整数クラスにも分母を表す変数が当然必要
矛盾した要求が実現できないのは実装技術の問題ではなく要求の不備
642デフォルトの名無しさん
2024/07/08(月) 00:24:32.58ID:aZihrzFg >>607
コード メトリック - 継承の深さ (DIT)
https://learn.microsoft.com/ja-jp/visualstudio/code-quality/code-metrics-depth-of-inheritance?view=vs-2022
継承もやりすぎると毒になるってだけで、全くダメってわけじゃない。
コード メトリック - 継承の深さ (DIT)
https://learn.microsoft.com/ja-jp/visualstudio/code-quality/code-metrics-depth-of-inheritance?view=vs-2022
継承もやりすぎると毒になるってだけで、全くダメってわけじゃない。
643デフォルトの名無しさん
2024/07/08(月) 00:26:00.53ID:wE6spjgC >>638
不適切な継承の典型例だな
不適切な継承の典型例だな
644デフォルトの名無しさん
2024/07/08(月) 00:36:15.98ID:aZihrzFg >>638
数学では整数の組から分数作るけど、整数クラスが親クラスじゃないのは変じゃない?
(そもそも、継承より整数クラスのインスタンスを分子用と分母用の2個使う委譲スタイルの方が適切だと思うけど)
(n,m)とn/mは同型
数学では整数の組から分数作るけど、整数クラスが親クラスじゃないのは変じゃない?
(そもそも、継承より整数クラスのインスタンスを分子用と分母用の2個使う委譲スタイルの方が適切だと思うけど)
(n,m)とn/mは同型
645デフォルトの名無しさん
2024/07/08(月) 01:24:33.08ID:QXtalhpf どういう用途のためにクラスを作ろうとしているのか不明瞭な段階で
特定の実装方法が適切だと思い込むのは感心しない
特定の実装方法が適切だと思い込むのは感心しない
646デフォルトの名無しさん
2024/07/08(月) 05:17:42.23ID:9vKk3LiW >>630
継承自体は悪くない
重複コードを回避できて保守性も向上する
つまり継承自体は良いもの
ただし実装継承だけは悪
異なる型同士に過度な依存をもたらし保守性を悪くする
クラス継承は実装継承となるため悪
モダンな各言語がクラスを排除した理由はそのため
Rustに実装継承はなく継承でそのような問題を起こさない
継承自体は悪くない
重複コードを回避できて保守性も向上する
つまり継承自体は良いもの
ただし実装継承だけは悪
異なる型同士に過度な依存をもたらし保守性を悪くする
クラス継承は実装継承となるため悪
モダンな各言語がクラスを排除した理由はそのため
Rustに実装継承はなく継承でそのような問題を起こさない
647デフォルトの名無しさん
2024/07/08(月) 09:13:52.72ID:1Z2Y8mSg 継承で重複コードを回避できるのは実装も共有する継承だけ
つまり実装継承だけ
Rustスレでこんな初歩的なことを説明しなきゃいけないのはすごく悲しい
つまり実装継承だけ
Rustスレでこんな初歩的なことを説明しなきゃいけないのはすごく悲しい
648デフォルトの名無しさん
2024/07/08(月) 09:32:49.17ID:QAb8fFud 今回はいつまでやるの?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 毒親「働かないでいつもゴロゴロして!」俺「…」毒親「あっ近隣に熊が出たって!」俺「ふぅ」毒親「どこ行くんだ」
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 生活保護の受給額ってなんでこんなに安いの?
- お前らは“スカイマイルタワー”建設計画を知っているか?
- これ誰か分かるか?
- 支払い詰まってインターネット止まった
