「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」
っていうスレ。
前スレ: 結局C++とRustってどっちが良いの?
https://mevius.5ch.net/test/read.cgi/tech/1677286186/
探検
結局C++とRustってどっちが良いの? 2traits
レス数が900を超えています。1000を超えると表示できなくなるよ。
2023/04/02(日) 00:42:57.53ID:W9/nq+tL
837デフォルトの名無しさん
2023/05/02(火) 01:58:03.27ID:1DAvDJUY Rustを試す場合、ストレージが結構食うのと、「パス汚染」の問題や、いつのまにか
大事にしていた開発の複雑なツールチェイン環境が
「おかしくなるかも知れない問題」が有る。
経験法則として、ツールチェインが壊れることは辛すぎる。
大事にしていた開発の複雑なツールチェイン環境が
「おかしくなるかも知れない問題」が有る。
経験法則として、ツールチェインが壊れることは辛すぎる。
838デフォルトの名無しさん
2023/05/02(火) 02:05:41.68ID:1DAvDJUY Rustは、確かにニーズは有ることはあるが、緊急レベルが低いのかもね。
それとターゲット層が狭いかも。
それとターゲット層が狭いかも。
839デフォルトの名無しさん
2023/05/02(火) 02:12:40.43ID:1DAvDJUY Rustを使いたがってる層って、なぜかサーバーサイドで使おうと思ってる人が多いが、
複雑で遅くなるような処理はMySQLやSQLiteみたいなDBMSがやってしまう。
だから自分でやる部分は余り速度が必要なかったりする。
Rustは安全性と速度の両方重視だが、この場合、速度は不要であり、安全面だけ
しか残らないがだとすると、JavaやRubyなどでも互角と言えてしまう。
しかも分かり易さは後者の方が勝ってる。
複雑で遅くなるような処理はMySQLやSQLiteみたいなDBMSがやってしまう。
だから自分でやる部分は余り速度が必要なかったりする。
Rustは安全性と速度の両方重視だが、この場合、速度は不要であり、安全面だけ
しか残らないがだとすると、JavaやRubyなどでも互角と言えてしまう。
しかも分かり易さは後者の方が勝ってる。
840デフォルトの名無しさん
2023/05/02(火) 02:15:06.87ID:1DAvDJUY SNSを見ても、なぜかRustをフロントやデスクトップアプリで使おうとしている人は少ない。
そもそもデスクトップアプリが絶滅危惧種になりつつあるが。
多分、GAFAMが全部需要を吸い取っているからかも知れんが。
そもそもデスクトップアプリが絶滅危惧種になりつつあるが。
多分、GAFAMが全部需要を吸い取っているからかも知れんが。
841デフォルトの名無しさん
2023/05/02(火) 02:28:34.92ID:7LVjR2sm ガンダム00のイノベーター理論か
842デフォルトの名無しさん
2023/05/02(火) 02:28:36.64ID:1DAvDJUY そもそも、サーバーサイドやフロントは、CもC++も余り使われてこなかったが、
SNSでは、なぜか、そっち側でRustを使いたがってる人が目立つ。
そもそも、デスクトップやゲームでCやC++が強い。だから、C++の優位性や
慣れ親しみが有る人と層が被ってない。
なのに、彼らは「C/C++をRustが置き換える」と主張している。
彼らにはそもそも自分がCやC++を愛した時期があったのかと問うてみたい。
C++を使いこなした上で、さらにそれより便利だからRustを使おうとしている
ならまだしも、C++とは縁遠い人達がRustを礼賛している様に思えてならない。
SNSでは、なぜか、そっち側でRustを使いたがってる人が目立つ。
そもそも、デスクトップやゲームでCやC++が強い。だから、C++の優位性や
慣れ親しみが有る人と層が被ってない。
なのに、彼らは「C/C++をRustが置き換える」と主張している。
彼らにはそもそも自分がCやC++を愛した時期があったのかと問うてみたい。
C++を使いこなした上で、さらにそれより便利だからRustを使おうとしている
ならまだしも、C++とは縁遠い人達がRustを礼賛している様に思えてならない。
843デフォルトの名無しさん
2023/05/02(火) 02:32:22.41ID:1DAvDJUY もともとC++が大嫌いな状態で、C++が消えてなくなればいい、と思っている
層がRustを嬉々として使いたがっている様に見えるのだ。
そして彼らはC/C++を一切話題にしない。もし今ままでC/C++を使い倒してきた
ならば、少しは触れてもいいはずなのに、彼らが好きな言語としてあげるリスト
の中には、決まって、C/C++が全く触れられておらず、
JS、Go、Kotlin、Java、Pythonなどが上がってくる。
C#ですら上がって来ない事が多い。
層がRustを嬉々として使いたがっている様に見えるのだ。
そして彼らはC/C++を一切話題にしない。もし今ままでC/C++を使い倒してきた
ならば、少しは触れてもいいはずなのに、彼らが好きな言語としてあげるリスト
の中には、決まって、C/C++が全く触れられておらず、
JS、Go、Kotlin、Java、Pythonなどが上がってくる。
C#ですら上がって来ない事が多い。
844デフォルトの名無しさん
2023/05/02(火) 02:33:32.83ID:1DAvDJUY よく見ると、彼らがリストアップする言語は、無料の環境ばかりだ。
845デフォルトの名無しさん
2023/05/02(火) 02:36:05.66ID:1DAvDJUY 昔から言われてきたことだが、Windowsのデスクトップアプリを作るのは、
ほぼ Visual Studio 一択 だということである、
そして、その場合、通常、C/C++(MFC、Win32)、C#(WinForms、WPF)、VB
のどれかとなる。
プロは、有料のVSを購入して、C++でMFCで組むのが標準とされてきた。
ほぼ Visual Studio 一択 だということである、
そして、その場合、通常、C/C++(MFC、Win32)、C#(WinForms、WPF)、VB
のどれかとなる。
プロは、有料のVSを購入して、C++でMFCで組むのが標準とされてきた。
846デフォルトの名無しさん
2023/05/02(火) 02:50:16.47ID:7LVjR2sm MFCは流石にストレスだな
847デフォルトの名無しさん
2023/05/02(火) 02:51:03.38ID:7LVjR2sm BoostはURLやJSON、そしてついにMySQLが入ったぞ
848デフォルトの名無しさん
2023/05/02(火) 03:00:27.06ID:7LVjR2sm RegexはC++のパワーが発揮される好例だが、あまり使われてないね
文字を返すイテレータさえ用意できれば、どんなデータ構造にも正規表現が使えるんだから凄いけどね
文字を返すイテレータさえ用意できれば、どんなデータ構造にも正規表現が使えるんだから凄いけどね
849デフォルトの名無しさん
2023/05/02(火) 03:04:05.05ID:1DAvDJUY >>848
RegExの基礎の部分で、日本語周りがちょっと独特の仕様だった気がする。
UTF8やSJISには状態がない(Stateless)符合なのに、状態があるかのような
独特のC関数(?)を基礎にしている。
それは、もはやほとんど使われて無い、「Shiftじゃない方のJIS」の
ShiftIn(SI), ShiftOut(SO)方式ならそうかも知れないが。
RegExの基礎の部分で、日本語周りがちょっと独特の仕様だった気がする。
UTF8やSJISには状態がない(Stateless)符合なのに、状態があるかのような
独特のC関数(?)を基礎にしている。
それは、もはやほとんど使われて無い、「Shiftじゃない方のJIS」の
ShiftIn(SI), ShiftOut(SO)方式ならそうかも知れないが。
850デフォルトの名無しさん
2023/05/02(火) 03:04:47.55ID:1DAvDJUY >>846
だとするとC#しか選択肢が無い事になる。
だとするとC#しか選択肢が無い事になる。
851デフォルトの名無しさん
2023/05/02(火) 03:11:39.95ID:1DAvDJUY >>843
補足すると、C++が好きで、または、どこかに問題点を感じながらも使ってきたが、
さらに良いものを見つけたからRustに移行したい、というなら、C++も好きな
言語リストに入れたり、話題に触れたりするものだが、彼らは一切、
C++に触れようとしない傾向がある。
どんな言語にも欠点があるから、長年使ってきた言語であるならば、
愛着があっても、欠点も知っている。だから、もしC++を使ってきたならば、
C++の欠点を沢山気付いても、一方で、愛着も持っているはずだ。
ところが、彼らは、C++について一切触れずに、初心者用の簡易言語で
あるところの、JS、Java、Kotlin、Go、C#、Pythonなどには沢山触れるが、
C++には一切触れようとしない。
補足すると、C++が好きで、または、どこかに問題点を感じながらも使ってきたが、
さらに良いものを見つけたからRustに移行したい、というなら、C++も好きな
言語リストに入れたり、話題に触れたりするものだが、彼らは一切、
C++に触れようとしない傾向がある。
どんな言語にも欠点があるから、長年使ってきた言語であるならば、
愛着があっても、欠点も知っている。だから、もしC++を使ってきたならば、
C++の欠点を沢山気付いても、一方で、愛着も持っているはずだ。
ところが、彼らは、C++について一切触れずに、初心者用の簡易言語で
あるところの、JS、Java、Kotlin、Go、C#、Pythonなどには沢山触れるが、
C++には一切触れようとしない。
852デフォルトの名無しさん
2023/05/02(火) 03:20:05.38ID:7LVjR2sm >>851
キミもあまりC++を使っていないのでは?
キミもあまりC++を使っていないのでは?
853デフォルトの名無しさん
2023/05/02(火) 03:25:47.05ID:1DAvDJUY >>852
使ってる。
使ってる。
854デフォルトの名無しさん
2023/05/02(火) 04:07:41.22ID:6GBjYlnU 世の中の流れが様々な方向からRustへ向かっているところをみると残るは時間だけの問題かな
ロジックに弱い一部のプログラマーはRustでスマートに組めない傾向があるからその点での差別化も進むのかもしれない
ロジックに弱い一部のプログラマーはRustでスマートに組めない傾向があるからその点での差別化も進むのかもしれない
855デフォルトの名無しさん
2023/05/02(火) 04:14:17.45ID:1DAvDJUY856デフォルトの名無しさん
2023/05/02(火) 04:38:02.37ID:6GBjYlnU >>855
Rustをメンドクサイと感じるならロジックが苦手な人なのかもしれないね
一般的にどの言語でもプログラミングする時はロジックをパズルのように解いて組み立てていくんだけど
複雑な対象かどうかでそのパズルの難易度は様々でロジックが苦手な人は難しいパズルのケースではお手上げ
Rustではその解かなきゃいけないパズルが問題によって難易度が増す場合もある
それと引き換えに様々な多大な恩恵が生じるわけだけどロジックが苦手な人には難しかったり面倒だったり無理だったりしてしまう
でも元々のパズル自体の難度に対してそれほど難しくなるわけではないためプログラマーのほとんどはクリアできるけどね
結果的に極一部のロジックが苦手なプログラマーを切り捨てることで可読性や開発効率や安全性などを上昇させるのがRustというものの本質かもね
Rustをメンドクサイと感じるならロジックが苦手な人なのかもしれないね
一般的にどの言語でもプログラミングする時はロジックをパズルのように解いて組み立てていくんだけど
複雑な対象かどうかでそのパズルの難易度は様々でロジックが苦手な人は難しいパズルのケースではお手上げ
Rustではその解かなきゃいけないパズルが問題によって難易度が増す場合もある
それと引き換えに様々な多大な恩恵が生じるわけだけどロジックが苦手な人には難しかったり面倒だったり無理だったりしてしまう
でも元々のパズル自体の難度に対してそれほど難しくなるわけではないためプログラマーのほとんどはクリアできるけどね
結果的に極一部のロジックが苦手なプログラマーを切り捨てることで可読性や開発効率や安全性などを上昇させるのがRustというものの本質かもね
857デフォルトの名無しさん
2023/05/02(火) 04:41:01.18ID:1DAvDJUY858デフォルトの名無しさん
2023/05/02(火) 04:45:42.58ID:iwR4I1Vp ぶったぎるようでいて、多分関連ある 素直に聞かせて
上のほうでも少し出たけど、RustのOOPってどうなん 慣れればわりとなんでも書ける?
所有権関係を見習いたくて、そればっかり今まで調べてて、OOPの書き心地に目を向けてなかった
上のほうでも少し出たけど、RustのOOPってどうなん 慣れればわりとなんでも書ける?
所有権関係を見習いたくて、そればっかり今まで調べてて、OOPの書き心地に目を向けてなかった
859デフォルトの名無しさん
2023/05/02(火) 04:54:26.56ID:iwR4I1Vp860デフォルトの名無しさん
2023/05/02(火) 04:58:39.18ID:6GBjYlnU >>858
RustやGoなど最近の言語ではOOPの癌であるクラス継承を完全に廃止してくれている点が朗報
代わりにRustでは強力なトレイトがあって非常に分かりやすく可読性もよいコードに誘導されて書き心地もよいよ
ただしクラス継承という癌におかされ中毒症状というか依存症の人の一部はリハビリ期間が必要なこともあるみたい
RustやGoなど最近の言語ではOOPの癌であるクラス継承を完全に廃止してくれている点が朗報
代わりにRustでは強力なトレイトがあって非常に分かりやすく可読性もよいコードに誘導されて書き心地もよいよ
ただしクラス継承という癌におかされ中毒症状というか依存症の人の一部はリハビリ期間が必要なこともあるみたい
861デフォルトの名無しさん
2023/05/02(火) 05:48:34.65ID:iwR4I1Vp COMとか使ってたしねえ 今でもあるけど
やたらややこしくしないまで含めて、継承は使ってた世代だねえ
template<>だけがあるような感覚? (概要を聞いてからリファレンス見る勢
やたらややこしくしないまで含めて、継承は使ってた世代だねえ
template<>だけがあるような感覚? (概要を聞いてからリファレンス見る勢
862デフォルトの名無しさん
2023/05/02(火) 06:21:41.90ID:htF/u6KD Rustのtraitは機能や能力や属性でもあるし制約条件でもあるし抽象的な型でもあるしtraitオブジェクトとしての値でもあるし
traitと普通の型とは直交する存在だから多対多の関係になるけど
trait自体に別のtraitが制約としてつく形でtraitの持つ機能の継承のように見せかけて継承ではないけど親子関係的になったり
実際のコードではほとんどのケースで具体型にモノモーフィゼーションされるからコストはないけど
一部のケースではtraitオブジェクトになって動的ディスパッチになる点ではC++で仮想関数を定義する基底クラス的な立ち位置でもあり
traitと普通の型とは直交する存在だから多対多の関係になるけど
trait自体に別のtraitが制約としてつく形でtraitの持つ機能の継承のように見せかけて継承ではないけど親子関係的になったり
実際のコードではほとんどのケースで具体型にモノモーフィゼーションされるからコストはないけど
一部のケースではtraitオブジェクトになって動的ディスパッチになる点ではC++で仮想関数を定義する基底クラス的な立ち位置でもあり
863デフォルトの名無しさん
2023/05/02(火) 07:08:44.62ID:KGzdAUSh >>861
templateをRustでジェネリクスとして表現する時に、そのジェネリックパラメータに対して、条件(制約)を課す指示となる「トレイト境界」としてもトレイトが登場
そのおかげで、C++のtemplate使用時の展開深入りしたわかりにくいエラーメッセージが出る前に、Rustではトレイト境界を指定するようにとコンパイラが叱ってくれて話が早いこともある
templateをRustでジェネリクスとして表現する時に、そのジェネリックパラメータに対して、条件(制約)を課す指示となる「トレイト境界」としてもトレイトが登場
そのおかげで、C++のtemplate使用時の展開深入りしたわかりにくいエラーメッセージが出る前に、Rustではトレイト境界を指定するようにとコンパイラが叱ってくれて話が早いこともある
864デフォルトの名無しさん
2023/05/02(火) 07:41:43.85ID:7LVjR2sm 世界中で使われたはずのHaskellが跡形もないからどうだろな
865デフォルトの名無しさん
2023/05/02(火) 08:07:22.94ID:kr+/BuUA GC言語なんていくらでも置き換えが効くからな
しかもGC言語は用途が狭く限定
ダメ言語C++が長く崩れなかったのはライバルが登場しなかっただけにすぎない
何もかも優れている非GC言語が登場してC++がようやく崩れた
しかもGC言語は用途が狭く限定
ダメ言語C++が長く崩れなかったのはライバルが登場しなかっただけにすぎない
何もかも優れている非GC言語が登場してC++がようやく崩れた
866デフォルトの名無しさん
2023/05/02(火) 08:21:54.70ID:moHVYXda なんでそんな目の敵w C++はいいぞ
867デフォルトの名無しさん
2023/05/02(火) 09:16:12.71ID:AMbvZcVM >>833
プロダクトライフサイクルにおける顧客割合の意味を理解してたらそんなアホみたいな比較はしない
プロダクトライフサイクルにおける顧客割合の意味を理解してたらそんなアホみたいな比較はしない
868デフォルトの名無しさん
2023/05/02(火) 10:52:59.55ID:xauM/oA9869デフォルトの名無しさん
2023/05/02(火) 11:28:20.72ID:pc/ucEUa870デフォルトの名無しさん
2023/05/02(火) 12:01:15.54ID:mNHEEh2V >>867
じゃあ、Rustのプロダクトライフサイクルにおいて、分母は何で分子は何なのさ?
じゃあ、Rustのプロダクトライフサイクルにおいて、分母は何で分子は何なのさ?
871デフォルトの名無しさん
2023/05/02(火) 12:15:36.07ID:7LVjR2sm872デフォルトの名無しさん
2023/05/02(火) 12:18:56.04ID:gDBZ1McM873デフォルトの名無しさん
2023/05/02(火) 12:23:57.05ID:avRvtz73 >>869
何でか説明してるレスに何でか聞くのってヤバいと思う
何でか説明してるレスに何でか聞くのってヤバいと思う
874デフォルトの名無しさん
2023/05/02(火) 12:38:11.31ID:7LVjR2sm そもそもRustはC++に比肩しうるような性能を持たない
875デフォルトの名無しさん
2023/05/02(火) 12:49:18.38ID:pc/ucEUa >>873
説明がサッパリ分からん
説明がサッパリ分からん
876デフォルトの名無しさん
2023/05/02(火) 13:59:34.82ID:s1lomcWB #[derive]は継承とどう違うの?
877デフォルトの名無しさん
2023/05/02(火) 14:06:17.14ID:7LVjR2sm DEVICE=A:\DOS\HIMEM.SYS
878デフォルトの名無しさん
2023/05/02(火) 14:11:10.59ID:dgJNwoMt JavascriptやTypeScript関係の基盤やツールはRust製がかなり増えたね
879デフォルトの名無しさん
2023/05/02(火) 14:13:06.37ID:7LVjR2sm 主にJS使いがRustを使ってるからね
880デフォルトの名無しさん
2023/05/02(火) 14:21:48.41ID:moHVYXda881デフォルトの名無しさん
2023/05/02(火) 14:21:50.46ID:rS/MFCk8 >>869
Rustと関係なく昔からOOPでは
継承(is-a)より合成(has-a)が望ましい
という話を聞いたことがない?
合成(has-a)の方が柔軟性が高いだけでなく
各機能ごとにコードを分けられるため
可読性も上がり保守性も良くなる
菱形多重継承の問題も避けられる
巨大な親クラスを用意する必要もなくなる
別の見方をすると
継承は複数の役割を混ぜて詰め込んでいる
コードの共通化や多層性など別々の役割が混在してる
それが上述の継承の様々な問題を引き起こしている
それぞれの役割が個別に提供されたら継承は不要となる
そして問題はなくなり可読性も保守性も向上する
以上の話はRust以前から言われてきた話
そしてGoもRustも当然のように継承は廃止した
まともなプログラマーなら継承は複数の役割が混在してることに気付いてる
だから継承がない言語でもそれぞれの役割ごとにプログラミングすることができる
一部のダメなプログラマーを除いて継承がない言語で困ることはない
コードの可読性や保守性が上がったことで継承廃止に納得賛成する
Rustと関係なく昔からOOPでは
継承(is-a)より合成(has-a)が望ましい
という話を聞いたことがない?
合成(has-a)の方が柔軟性が高いだけでなく
各機能ごとにコードを分けられるため
可読性も上がり保守性も良くなる
菱形多重継承の問題も避けられる
巨大な親クラスを用意する必要もなくなる
別の見方をすると
継承は複数の役割を混ぜて詰め込んでいる
コードの共通化や多層性など別々の役割が混在してる
それが上述の継承の様々な問題を引き起こしている
それぞれの役割が個別に提供されたら継承は不要となる
そして問題はなくなり可読性も保守性も向上する
以上の話はRust以前から言われてきた話
そしてGoもRustも当然のように継承は廃止した
まともなプログラマーなら継承は複数の役割が混在してることに気付いてる
だから継承がない言語でもそれぞれの役割ごとにプログラミングすることができる
一部のダメなプログラマーを除いて継承がない言語で困ることはない
コードの可読性や保守性が上がったことで継承廃止に納得賛成する
882デフォルトの名無しさん
2023/05/02(火) 14:29:15.44ID:EwZoXXsg883デフォルトの名無しさん
2023/05/02(火) 14:35:22.14ID:pc/ucEUa >>881
新たなパラダイムを採用するにしても
継承を残しとけばC++ユーザの(Javaとかもかな?)取り込みが
もっと進んだのではないのかな?
本当に良いパラダイムであるのなら継承を残したままC++が呑み込むと思うよ
新たなパラダイムを採用するにしても
継承を残しとけばC++ユーザの(Javaとかもかな?)取り込みが
もっと進んだのではないのかな?
本当に良いパラダイムであるのなら継承を残したままC++が呑み込むと思うよ
884デフォルトの名無しさん
2023/05/02(火) 14:46:33.32ID:rS/MFCk8885デフォルトの名無しさん
2023/05/02(火) 14:46:57.82ID:moHVYXda 継承といってすぐ思いつくのは、COMのIFoo2:IFoo みたいなときだけど、Rustでもできないわけじゃないでしょ
886デフォルトの名無しさん
2023/05/02(火) 14:47:22.90ID:0THLQfdG887デフォルトの名無しさん
2023/05/02(火) 14:52:39.31ID:zNH+FeOM crate hoge を使うとき
extern crate hoge; する人と
use hoge; する人がいるけど
どっちがどう違うん?
extern crate hoge; する人と
use hoge; する人がいるけど
どっちがどう違うん?
888デフォルトの名無しさん
2023/05/02(火) 14:58:37.73ID:moHVYXda ちな、C++は継承全盛の時代にクソの山が築かれたので、その反省から、継承はナシでいくって発想はそんな違和感ない
現役のC++erは、そのクソの山をくぐってる(新参も過去資産を読まされるからね)から、継承するにしても注意深く設計する
だから、あんま反論する気はないからね
現役のC++erは、そのクソの山をくぐってる(新参も過去資産を読まされるからね)から、継承するにしても注意深く設計する
だから、あんま反論する気はないからね
889デフォルトの名無しさん
2023/05/02(火) 14:58:45.32ID:rS/MFCk8890デフォルトの名無しさん
2023/05/02(火) 15:04:00.26ID:zNH+FeOM >>856
C/C++もRustもどっちでも良いけど
Rustはアルゴリズムで悩むよりコンパイル通すことに悩む時間の方が長くなると感じる
まだ慣れてないだけかも知れないのは認めるが
アルゴリズムを実装したいのに集中力を削がれる
C/C++もRustもどっちでも良いけど
Rustはアルゴリズムで悩むよりコンパイル通すことに悩む時間の方が長くなると感じる
まだ慣れてないだけかも知れないのは認めるが
アルゴリズムを実装したいのに集中力を削がれる
891デフォルトの名無しさん
2023/05/02(火) 15:10:31.30ID:zNH+FeOM892デフォルトの名無しさん
2023/05/02(火) 15:13:11.14ID:moHVYXda893デフォルトの名無しさん
2023/05/02(火) 15:14:50.82ID:8SBmOXa9 >>890
それは単に慣れていないだけだよ
Lispを始めた時も最初は手続き型言語以外に慣れなくて似たような感じだった
Prologの時も宣言型言語の発想の転換に慣れるまでそんな感じだった
狭い範囲の言語しかやって来てないとその感じを初体験かもしれないね
いずれも最初のうち慣れるまでを乗り越える
それは単に慣れていないだけだよ
Lispを始めた時も最初は手続き型言語以外に慣れなくて似たような感じだった
Prologの時も宣言型言語の発想の転換に慣れるまでそんな感じだった
狭い範囲の言語しかやって来てないとその感じを初体験かもしれないね
いずれも最初のうち慣れるまでを乗り越える
894デフォルトの名無しさん
2023/05/02(火) 15:19:27.33ID:zNH+FeOM >>881
>Rustと関係なく昔からOOPでは
継承(is-a)より合成(has-a)が望ましい
という話を聞いたことがない?
合成(has-a)の方が柔軟性が高いだけでなく
各機能ごとにコードを分けられるため
可読性も上がり保守性も良くなる
菱形多重継承の問題も避けられる
巨大な親クラスを用意する必要もなくなる
↑ここはNimもうまくやってると思うが
規模が大きくなると型推論とかmatchで時間かかりそう
>Rustと関係なく昔からOOPでは
継承(is-a)より合成(has-a)が望ましい
という話を聞いたことがない?
合成(has-a)の方が柔軟性が高いだけでなく
各機能ごとにコードを分けられるため
可読性も上がり保守性も良くなる
菱形多重継承の問題も避けられる
巨大な親クラスを用意する必要もなくなる
↑ここはNimもうまくやってると思うが
規模が大きくなると型推論とかmatchで時間かかりそう
895デフォルトの名無しさん
2023/05/02(火) 15:20:21.37ID:rS/MFCk8 >>892
申し訳ないがWindows特有の話には一切関心かない
そしてそれはプログラミング言語の話でもない
マイクロソフトがRustについても大量のドキュメントとライブラリ提供している
それらを見ればよいのではないか
申し訳ないがWindows特有の話には一切関心かない
そしてそれはプログラミング言語の話でもない
マイクロソフトがRustについても大量のドキュメントとライブラリ提供している
それらを見ればよいのではないか
896デフォルトの名無しさん
2023/05/02(火) 15:22:44.69ID:UlsqlHPi >>887
extern crateはちょっと古い書き方(今でも用途ゼロではない)
rustコンパイラが外部のクレートを参照するためには
ソース内でextern crateを指定するかrustcに--externオプションで渡す必要があるんだけど
今はcargoがdependenciesの中身を全部渡してくれるからextern crateの出番は減ってる
今でも外側からのテストコードでdependenciesに含まれてない自分のクレートを参照する時は
extern crate [テスト対象のクレート名];
みたいに使われたりする
extern crateはちょっと古い書き方(今でも用途ゼロではない)
rustコンパイラが外部のクレートを参照するためには
ソース内でextern crateを指定するかrustcに--externオプションで渡す必要があるんだけど
今はcargoがdependenciesの中身を全部渡してくれるからextern crateの出番は減ってる
今でも外側からのテストコードでdependenciesに含まれてない自分のクレートを参照する時は
extern crate [テスト対象のクレート名];
みたいに使われたりする
897デフォルトの名無しさん
2023/05/02(火) 15:27:19.68ID:zNH+FeOM898デフォルトの名無しさん
2023/05/02(火) 15:35:19.29ID:pc/ucEUa >>889
>継承(is-a)より合成(has-a)が望ましい
使う場所が違うんでないの?
composition(has-a)を使うべきところで
継承で設計するので破綻すのではないかな?
所有権システムの話と違って
継承は合成と両立できるのなら
排除する必要はなかったと思うんだよね
>継承(is-a)より合成(has-a)が望ましい
使う場所が違うんでないの?
composition(has-a)を使うべきところで
継承で設計するので破綻すのではないかな?
所有権システムの話と違って
継承は合成と両立できるのなら
排除する必要はなかったと思うんだよね
899デフォルトの名無しさん
2023/05/02(火) 15:43:54.19ID:moHVYXda900デフォルトの名無しさん
2023/05/02(火) 15:44:03.40ID:avRvtz73 言語としての良さを捨ててシェアをとりにいくのは本末転倒でしょうよ
901デフォルトの名無しさん
2023/05/02(火) 15:44:37.51ID:8SBmOXa9 >>897
もちろんLispの例は手続き型とは異なる例として出しただけだから直接関係ないよ
でも別の話としてRustは関数型言語としての特徴も随所に見られるから慣れてると有利だね
C++で所有権や無効な参照を生まないことに慣れてれば有利な点とは別方向だよ
それら両方に慣れてない人は多重に慣れないといけないもんね
もちろんLispの例は手続き型とは異なる例として出しただけだから直接関係ないよ
でも別の話としてRustは関数型言語としての特徴も随所に見られるから慣れてると有利だね
C++で所有権や無効な参照を生まないことに慣れてれば有利な点とは別方向だよ
それら両方に慣れてない人は多重に慣れないといけないもんね
902デフォルトの名無しさん
2023/05/02(火) 15:57:21.78ID:rS/MFCk8 >>898
継承と呼ばれているものは複数の役割を混在させた醜い悪だから廃止が好ましい
全く異なる言語であるGoでもRustでも同じ結論となったことがそれを実証している
複数の役割を各々個別に用意しているのでプログラマーが困ることはない
むしろコードが役割毎に分離されて保守性も可読性も上がっている
継承と呼ばれているものは複数の役割を混在させた醜い悪だから廃止が好ましい
全く異なる言語であるGoでもRustでも同じ結論となったことがそれを実証している
複数の役割を各々個別に用意しているのでプログラマーが困ることはない
むしろコードが役割毎に分離されて保守性も可読性も上がっている
903デフォルトの名無しさん
2023/05/02(火) 16:09:56.45ID:jUW5YyXB OOP理解してないやつが継承にダメ出ししてるからクソレスにしかならんよなw
904デフォルトの名無しさん
2023/05/02(火) 16:12:23.50ID:ADB1nCOj Rustと違ってGoには実質継承と同じ使い方ができる機能があるのにね
905デフォルトの名無しさん
2023/05/02(火) 16:18:52.28ID:AI1f/TNN STLのコンテナを拝借したいときとか
private継承protect継承は便利やぞ
これってRustの合成にあたる?
private継承protect継承は便利やぞ
これってRustの合成にあたる?
906デフォルトの名無しさん
2023/05/02(火) 16:24:39.49ID:SLT/0ozg907デフォルトの名無しさん
2023/05/02(火) 17:47:10.50ID:moHVYXda Rustの美しいところだけで作ったOS…組み込みとかではできるかもしらんが
そうじゃない、Rustだって、泥臭いOOPもカバーできるだろ
泥臭いことを一切すべきでないとかいうなら、Rustは要らんぞ
そうじゃない、Rustだって、泥臭いOOPもカバーできるだろ
泥臭いことを一切すべきでないとかいうなら、Rustは要らんぞ
908デフォルトの名無しさん
2023/05/02(火) 18:05:24.51ID:7LVjR2sm いや、Rustは要らんだろ
Javascriptで十分
Javascriptで十分
909デフォルトの名無しさん
2023/05/02(火) 18:26:29.87ID:h3kIy3/6910デフォルトの名無しさん
2023/05/02(火) 18:47:19.21ID:dbPFRoX3 継承と移譲は考え方も方向も真逆だよな
移譲を使うべきところで何でも継承を使ってしまう継承しか知らないプログラマーが多くて困ったことだが
移譲を使うべきところで何でも継承を使ってしまう継承しか知らないプログラマーが多くて困ったことだが
911デフォルトの名無しさん
2023/05/02(火) 19:13:40.31ID:7LVjR2sm ウィンドウシステムを考える時、
ボタンクリックで呼び出されるあなたのコードを
デリゲートで実装するか継承で実装するか
という風に考えると
まあ大した違いは無い
ボタンクリックで呼び出されるあなたのコードを
デリゲートで実装するか継承で実装するか
という風に考えると
まあ大した違いは無い
912デフォルトの名無しさん
2023/05/02(火) 19:34:21.83ID:QBXdpuLD >>911
継承を敢えて持たないGo&Rustにもすぐ適応できそうね
継承を敢えて持たないGo&Rustにもすぐ適応できそうね
913デフォルトの名無しさん
2023/05/02(火) 20:13:21.79ID:FTssEmtC sudoとsuがRustで書き直される。メモリ安全性向上へ
https://pc.watch.impress.co.jp/docs/news/1498034.html
https://pc.watch.impress.co.jp/docs/news/1498034.html
914デフォルトの名無しさん
2023/05/02(火) 21:30:43.14ID:HZAuKpK5 Rustはファイル分割の仕組みとクレート、モジュール構造が意味不明
915デフォルトの名無しさん
2023/05/02(火) 22:22:33.76ID:61XWC/5S >>913
これまだ世に出しちゃいけないレベルでは?
未完でも早めに発表しないと資金切られるのか?
https://github.com/memorysafety/sudo-rs
⚠ WARNING
Sudo-rs is currently under active development and is not suited for any production environment. Using sudo-rs is only recommended for development and testing purposes, but you should expect any system that has sudo-rs installed to break easily and to not be secure.
Rust part20
https://mevius.5ch.net/test/read.cgi/tech/1677771928/354
354: デフォルトの名無しさん sage 2023/05/02(火) 20:03:17.56 ID:6g8Nsfp3
>>341,345
sudu-rsとsudo(original)のtokeiしました
LOCが違い過ぎて機能的に同等とは思えませんが誰か確認してください
https://i.imgur.com/wqUfNLQ.png
これまだ世に出しちゃいけないレベルでは?
未完でも早めに発表しないと資金切られるのか?
https://github.com/memorysafety/sudo-rs
⚠ WARNING
Sudo-rs is currently under active development and is not suited for any production environment. Using sudo-rs is only recommended for development and testing purposes, but you should expect any system that has sudo-rs installed to break easily and to not be secure.
Rust part20
https://mevius.5ch.net/test/read.cgi/tech/1677771928/354
354: デフォルトの名無しさん sage 2023/05/02(火) 20:03:17.56 ID:6g8Nsfp3
>>341,345
sudu-rsとsudo(original)のtokeiしました
LOCが違い過ぎて機能的に同等とは思えませんが誰か確認してください
https://i.imgur.com/wqUfNLQ.png
916デフォルトの名無しさん
2023/05/02(火) 22:58:22.97ID:moHVYXda917デフォルトの名無しさん
2023/05/02(火) 23:01:31.89ID:qhte9zom >>914
確かに最初はそう思った
確かに最初はそう思った
918デフォルトの名無しさん
2023/05/02(火) 23:07:21.35ID:HZAuKpK5 >>917
まともな解説サイトが知りたいんだけど
まともな解説サイトが知りたいんだけど
919デフォルトの名無しさん
2023/05/03(水) 02:03:29.65ID:KEEkEyxd920デフォルトの名無しさん
2023/05/03(水) 10:07:34.41ID:vFyxX5cE クレート・モジュール周りでわかりにくかったのは以下の2点
どっちも公式に書いてはいるんだけど直感的じゃないからわかりにくい
1. modにはinline定義と定義読み込みという2つの使い方があること
2. main.rsとlib.rsが両方あるプロジェクトは2つのcrateができるのでmain.rs内でcrate::と書いてもlib.rs内のモジュールは参照できないこと
どっちも公式に書いてはいるんだけど直感的じゃないからわかりにくい
1. modにはinline定義と定義読み込みという2つの使い方があること
2. main.rsとlib.rsが両方あるプロジェクトは2つのcrateができるのでmain.rs内でcrate::と書いてもlib.rs内のモジュールは参照できないこと
921デフォルトの名無しさん
2023/05/03(水) 11:03:39.95ID:RL708iOG >>920
インライン定義とファイル指定の二種類あるのは色んなものでそんな感じ
Rustでも色んなサンプルを見てそうなってるから初めてでも違和感なかった
プログラムのディレクトリにはlib.rsは無しでmain.rsが始点
クレートのディレクトリは別に作ってlib.rsが始点とするよね
Cargo.tomlも分けたいし
インライン定義とファイル指定の二種類あるのは色んなものでそんな感じ
Rustでも色んなサンプルを見てそうなってるから初めてでも違和感なかった
プログラムのディレクトリにはlib.rsは無しでmain.rsが始点
クレートのディレクトリは別に作ってlib.rsが始点とするよね
Cargo.tomlも分けたいし
922デフォルトの名無しさん
2023/05/03(水) 11:20:24.78ID:VnqPz5Ow923デフォルトの名無しさん
2023/05/03(水) 11:30:59.61ID:QRh0PIzj >>849
すべてUTF8に統一すればいいのになにか支障があるの?
すべてUTF8に統一すればいいのになにか支障があるの?
924デフォルトの名無しさん
2023/05/03(水) 11:55:22.78ID:lWIcvRA0 クレートとモジュールの仕組みがあまり賢い作りじゃない気がする
なんかもっとやりようがあっただろうと
なんかもっとやりようがあっただろうと
925デフォルトの名無しさん
2023/05/03(水) 12:04:46.25ID:654rMlMr926デフォルトの名無しさん
2023/05/03(水) 12:20:32.02ID:YLz+EvMm >>925
なぜ全く別物であるクレートとモジュールを混ぜて1つの章にするんだ?
区別ついてるならその関連性くらい自明だろw
https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html
なぜ全く別物であるクレートとモジュールを混ぜて1つの章にするんだ?
区別ついてるならその関連性くらい自明だろw
https://doc.rust-lang.org/book/ch07-00-managing-growing-projects-with-packages-crates-and-modules.html
927デフォルトの名無しさん
2023/05/03(水) 12:57:47.35ID:2vAcMAtp928デフォルトの名無しさん
2023/05/03(水) 13:04:28.94ID:mKdwc3tr929デフォルトの名無しさん
2023/05/03(水) 13:38:42.16ID:yfTPifNY モジュールはクレートの内部の話だから両者に混乱は起きないはず
930デフォルトの名無しさん
2023/05/03(水) 13:44:20.92ID:CZOik0F4 パッケージとクレートが紛らわしいって話でしょうが
931デフォルトの名無しさん
2023/05/03(水) 14:05:40.38ID:LKV06yDn クレートは独立した存在として
パッケージ内にいようが外部パッケージにいようが動作するはずだよね
紛らわしいならパッケージを分離して確認してみたら
パッケージ内にいようが外部パッケージにいようが動作するはずだよね
紛らわしいならパッケージを分離して確認してみたら
932デフォルトの名無しさん
2023/05/03(水) 14:17:42.39ID:KMrNo7SY クレートとモジュールを整理するとこんな感じ
どこか間違ってるかもしれない
・Rustのクレートは1つの仮想的なソースファイル(以下ルートファイル)から作られる
(rustcはインプットで1つのrsファイルだけを受け取ってクレート(bin, rlib, etc.)を出力する)
・ルートファイルは内部に階層的なモジュール(mod foo {...})を持つことができる
・ルートファイルのモジュール"mod foo {...}"は"mod foo;"とすることでモジュール本体を別ファイルに切り出すことができる
別ファイルのパスはそのモジュールの階層と名前によってルートファイルから相対的に決定される(ここが分かりにくい)
また、#[path="..."]で場所を直接指定することもできる
参考:https://doc.rust-lang.org/stable/reference/items/modules.html
・ルートファイルは慣習的に"main.rs"(実行用)、"lib.rs"(ライブラリ用)が使われる
(Cargo.tomlのpathで指定可能)
テスト実行用のルートファイルは見えないところで勝手に作成される
ルートファイルとかオプションを切り替えることで同じファイル群から
複数のクレート(ライブラリ、ツール、テスト、etc.)を出力できるのがパッケージかな
別に複数じゃなくてもいいけど
どこか間違ってるかもしれない
・Rustのクレートは1つの仮想的なソースファイル(以下ルートファイル)から作られる
(rustcはインプットで1つのrsファイルだけを受け取ってクレート(bin, rlib, etc.)を出力する)
・ルートファイルは内部に階層的なモジュール(mod foo {...})を持つことができる
・ルートファイルのモジュール"mod foo {...}"は"mod foo;"とすることでモジュール本体を別ファイルに切り出すことができる
別ファイルのパスはそのモジュールの階層と名前によってルートファイルから相対的に決定される(ここが分かりにくい)
また、#[path="..."]で場所を直接指定することもできる
参考:https://doc.rust-lang.org/stable/reference/items/modules.html
・ルートファイルは慣習的に"main.rs"(実行用)、"lib.rs"(ライブラリ用)が使われる
(Cargo.tomlのpathで指定可能)
テスト実行用のルートファイルは見えないところで勝手に作成される
ルートファイルとかオプションを切り替えることで同じファイル群から
複数のクレート(ライブラリ、ツール、テスト、etc.)を出力できるのがパッケージかな
別に複数じゃなくてもいいけど
933デフォルトの名無しさん
2023/05/03(水) 14:43:03.53ID:wz1HqF7D >>907
unsafe 最強ですね判ります
unsafe 最強ですね判ります
934デフォルトの名無しさん
2023/05/03(水) 14:56:29.41ID:qfRwg4l4935デフォルトの名無しさん
2023/05/03(水) 15:09:24.50ID:IgWfoZ6k936デフォルトの名無しさん
2023/05/03(水) 15:25:37.38ID:wz1HqF7D なぜzennは嫌われてるの?
https://zenn.dev/newgyu/articles/3b4677b4086768
https://zenn.dev/newgyu/articles/3b4677b4086768
レス数が900を超えています。1000を超えると表示できなくなるよ。
ニュース
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★6 [樽悶★]
- 【🐼🇨🇳】「高市総理VS中国」で日本からパンダはゼロに? 上野動物園「パンダ返還期限」まであと4カ月…★2 [BFU★]
- 小野田紀美 経済安保相「悪いことをする外国人、日本にいない状況つくる」 [Hitzeschleier★]
- 【速報】 米大使声明 「日本を支えていく」「中国が威圧的手段に訴えるのは断ち難い悪癖」 [お断り★]
- 群馬知事、前橋市長から2度メールも「気づかなかった」 面会せず [どどん★]
- 【千葉市】ロッテ本拠地マリン ドーム型再検討 市の試算ではドーム化で400億円以上の追加投資が生じる可能性 [尺アジ★]
- 【実況】博衣こよりのえちえち声遊楽プロジェクト 共同研究第三弾🧪
- 【悲報】立憲岡田「間違った答弁をした高市総理に問題がある」→愛国者ブチギレ炎上 [834922174]
- 【速報】アメリカ「高市総理を支持する。中国の威圧は許せない」 [931948549]
- 小野田紀美大臣「悪いことをする外国人は日本にいない状況をつくる」 [856698234]
- 珍🏡珍
- 【安倍悲報】山上徹也「押し入れに大量のつぼ」 [115996789]
