結局C++とRustってどっちが良いの? 8traits

レス数が1000を超えています。これ以上書き込みはできません。
2023/10/28(土) 13:45:00.38ID:fh9BWjjr
「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」

っていう雑談スレ。

・C/C++ <=> Rust いまさら聞けない移行質問なども適当にどぞ
・レスバはじめんのは勝手だけど、面白いこと・へぇなこと書いたヤツが優勝
・マな話は、マのスレもご活用ください↓

前スレ: 結局C++とRustってどっちが良いの? 7traits
http://mevius.5ch.net/test/read.cgi/tech/1693451813/

関連スレ(マ板): Google&Microsoft「セキュリティバグの70%はC/C++のメモリ管理ミス。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
2023/10/28(土) 13:45:36.64ID:fh9BWjjr
あるあるトピックス
・後発のRustは優れている(この点で特に争いはない
・といっても、C/C++から「推し変」するほどじゃない(使わないとは言ってない
・ていうか、Cとの比較と、C++との比較は違うくね?
・いくら安全っつっても、ヘタクソがunsafeだらけに書いちゃったらおんなし
・てかC++にも unsafe{ } はよ

・web方面、特に基盤部分での人気すごいね
・ChatGPTとかが賢くなる(のに賭けてる)からどうでもいい
3デフォルトの名無しさん
垢版 |
2023/10/28(土) 13:50:00.20ID:1iiYkiVL
スレ立て乙
unsafe {
2023/10/28(土) 14:37:18.81ID:o0Izqpe5
次スレいらんわボケ
2023/10/28(土) 16:34:04.19ID:enMMtIYH
ネットインフラが次々とRust製になっていってる

>【CDN世界トップシェアCloudflare】
https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html
>CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、
>同社自身がRust製のHTTPプロキシである「Pingora」を開発し利 用していることを明らかにしました。

>【クラウド世界トップシェアAWS】
https://japan.zdnet.com/article/35183866/
>Rustで構築されたAWSサービスの例としては、
>コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
>「Amazon Simple Storage Service(S3)」、
>「Amazon Elastic Compute Cloud(EC2)」、
>コンテンツ配信ネットワーク「Amazon CloudFront」、
>LinuxベースのコンテナーOS「Bottlerocket」などがある。
2023/10/29(日) 07:04:58.86ID:/j90tPs+
プログラミング言語「Rust」は世界のセキュリティレベルを底上げする
https://wired.jp/article/rust-secure-programming-language-memory-safe/

Androidでは今、暗号鍵を管理する機能の多くがRustで書かれているとGoogleのクライダーマーカーは話す。
たとえば、暗号化したインターネット通信の機能である「DNS over HTTPS」、新バージョンの超広帯域無線(UWB)チップスタック、
そしてグーグルの独自のチップである「Tensor G2」で使用される新しい「Android 仮想化フレームワーク(AVF)」 などだ。

また、BluetoothやWi-Fiなどの通信接続に使われるスタックも、Androidの開発チームによってRustへの変換が積極的に進められている。
理由は、これらが業界の複雑な標準規格に基づいており、脆弱性を多く含む傾向にあるからだとGoogleのクライダーマーカーは付け加える。
つまり最も狙われやすい、あるいは最も重要なソフトウェアの部分からRustに書き換えて、
そこから徐々に広げることで段階的にセキュリティ上の恩恵を受けようという戦略なのだ。
2023/10/29(日) 09:34:40.05ID:7Lr6oJeR
>>1
・・・で、結局どっちが良いの?
8デフォルトの名無しさん
垢版 |
2023/10/29(日) 11:34:03.80ID:GrwAVmld
>>2
C++はデフォルトがunsafeだから、入れるならsafe{}じゃないのけ?
2023/10/29(日) 11:55:56.89ID:jrKbdvhX
デフォルトをsafeにするって話やろw
そうすると現行のライブラリはビルドできないので取り敢えず全部unsafeで囲う
バージョンを重ねてunsafeの部分を減らすって戦略でしょ?
2023/10/29(日) 12:10:31.41ID:rFgSsne0
>>8
それ意味ないのわかんない?
2023/10/29(日) 12:58:33.36ID:gLyKM6Q0
null safetyですら無理なんだからunsafeなんて夢のまた夢
12デフォルトの名無しさん
垢版 |
2023/10/29(日) 13:01:53.93ID:IsQ6p7Vf
positive list と nagative list の違いやろ
どっちも一長一短があるってだけで
どっちが一方的に優れているということではない
2023/10/29(日) 13:06:42.15ID:x+5RB5aB
前者が明らかに劣ってるのは自衛隊見れば明らかじゃん
2023/10/29(日) 14:22:40.43ID:IsQ6p7Vf
青山繁晴ファンですね判ります
15デフォルトの名無しさん
垢版 |
2023/10/29(日) 14:24:26.17ID:IsQ6p7Vf
ちなみに Rust の unsafe {} は positive list に相当すると思う
2023/10/29(日) 16:22:18.96ID:UpWU1GX+
時代は静的検出なので、冒頭に

#pragma safe

とかでも書くとかになるんじゃないかな
そのうしろに、縛りの識別子が入るのでもいい
2023/10/29(日) 16:22:22.63ID:B2pW3CpU
unsafe {}ってなに?
ポインタ扱えなくするやつ?
2023/10/29(日) 18:07:40.10ID:UpWU1GX+
} // あとでみなおす

とりあえず生ポはなしかな
ポインタはきちんと定義される
19デフォルトの名無しさん
垢版 |
2023/10/30(月) 01:11:12.37ID:SHIqNVOV
>>9
あー、そういうことね。
2023/10/30(月) 14:08:13.49ID:yf48i6Jz
前スレ
>>997
HashMapはとVecは異なる型なので直接代入できない
一般的に入力イテレータinput_iterからHashMapを作るには
HashMap::from_iter(input_iter)とすればよい
これは代入先の型がHashMapの時のinput_iter.collect()と同じ
collect()の正体はfrom_iter()を呼ぶだけ

ちなみにfrom_iter()はFromIteratorトレイトのメソッド
引数としてIteratorだけでなくIntoIteratorも取れるため
今回の入力ベクタinput_vecに対してinto_iter()せずとも
そのままHashMap::from_iter(input_vec)と書ける
一方でcollect()を使う場合これはIteratorのメソッドなので
明示的に変換してinput_vec.into_iter().collect()となる
21デフォルトの名無しさん
垢版 |
2023/10/31(火) 05:55:29.82ID:DJT4usEp
ゲーム業界はC++かC#
Rustが入る余地なし
22デフォルトの名無しさん
垢版 |
2023/10/31(火) 08:54:10.63ID:5Lja4y81
Rust がリファクタリングと相性が悪いんじゃないか
と思うことが時々というより割と頻繁にある
2023/10/31(火) 10:17:54.25ID:Fz0aDVxr
設計が悪いおじさん「設計が悪い」

…とはいうものの、書き味ってもんがあるよね言語って
2023/10/31(火) 20:53:25.14ID:1IgY5W3A
難しそうという直感でリファクタリングを中止できるのは損なのか得なのか
2023/10/31(火) 22:01:39.08ID:PwivvYFW
Rustはリファクタリングや更新メンテとの相性いいと思う
C/C++で他人もしくは過去の自分が書いたコードの肝の部分をうっかり踏み抜いてメモリデバッグコースとなるところを
Rustは未然に防いでくれてる
2023/10/31(火) 22:13:21.13ID:3AsVVcfX
リファクタリングでエンバグしにくいけど、そもそもリファクタリング自体しにくいよね
2023/10/31(火) 22:25:05.59ID:NeIS8/9C
https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2687r0.pdf
C++はfeature gate方式でアノテーションした箇所のみ
static analyzerでチェックする方針で一応進み始めてるのね

なんというか過去の資産を生かすというのは大変なんだな
Rustと同レベルのsafetyが提供できるようになるかどうかまだわからないけどまあ頑張ってという感想
2023/11/01(水) 03:51:28.75ID:5z6NYMjm
悪い(かも知れない)設計を
良い(かも知れない)設計に
するのがリファクタリングのモチベだと思うので
元の設計が悪い(かも知れない)のは仕方ないが
良い(かも知れない)設計に変更するのを阻む力をRustはもってる
もちろんリファクタリングでエンバグしない利点は認めている
2023/11/01(水) 03:53:16.74ID:5z6NYMjm
更新メンテでエンバグしないと言っても
汚いコードが汚いまま増設されていく不安しかない
2023/11/01(水) 05:10:40.48ID:fNUPqUoJ
リファクタリングなんてもんは無能な働き者がすることよ
2023/11/01(水) 08:38:55.26ID:TrWFH7YA
以上、無能な働き者の感想でした
2023/11/01(水) 08:49:48.50ID:VeDR0B8A
耳が痛いわ〜w (横から

>>27
走り読み…と思ったら、かっちりしたまとめだった
型に含めることばっかり(自分なりに)考えてたが、属性かー。

ああそういや、VCの属性プロバイダ、API公開まだだったよな
33デフォルトの名無しさん
垢版 |
2023/11/01(水) 09:15:51.82ID:QJoNTbA8
borrow! またお前かっ!!
ですね
判ります

あとは C# みたいな PartialTrait があれば良いのに
2023/11/01(水) 09:29:13.02ID:g0uNXVFl
>>28
他の言語との比較も含めて具体的な例を上げてくれないと
何が困ってるのかよくわからん
2023/11/01(水) 11:28:14.65ID:r0MV67Oa
>ゼークトの組織論において、もっとも害のある存在とされるのが、無能な働き者(愚鈍:勤勉)タイプの人材です。正しい判断力や行動力が備わっていないにもかかわらず、自身の判断で行動してしまう特徴を持っています。いわゆる「余計なことをしてくれる」タイプの人材です。 無能な働き者が動くことで間違った判断により損害が出たり、周囲が後始末に追われたりといった混乱を招きます。しかも、本人は「よかれと思って動いている」点が、大きな問題となるのです。
2023/11/01(水) 11:36:32.25ID:r0MV67Oa
無能な働き者は放置しておくことで、組織にとって大きな損害をもたらすリスクとなります。
努力や判断のベクトルが間違っているだけで、意欲的な人材であるかもしれません。適切に関わり軌道修正を図れば、組織に貢献してくれる人材になってくれるかもしれません。この困ったちゃんを相手にする余力が会社や関係者にあればよいのですが、そうでない場合は自己都合退職へ誘導し、早めに組織から追い出しましょう。
2023/11/01(水) 12:40:12.80ID:8C4ZzEMt
軍人を4つのタイプに分類する「ゼークトの組織論」と呼ばれる軍事ジョークがあり[注釈 2]、ゼークトが以下のように語ったとされる。
---------8<----------8=------
これは実際には同時期のドイツ軍人であったクルト・フォン・ハンマーシュタイン=エクヴォルトが副官に述べたとされるもの[31]が元になっている。
2023/11/01(水) 19:08:00.09ID:gqkX1mpA
いつの間に、こんなに積極的に、異物は排除しましょうなんて世の中に深化したのかねえ
世知辛い
2023/11/01(水) 19:59:16.09ID:r0MV67Oa
>>38
>いつの間に
いつと問われれば人が集落として生活するようになるぐらい古代から…なんじゃね
村八分とか神隠しとかぐらいは聞いたことあると思うけど
司法がない時代は私刑が日常的に行われていたんだよ
今は法律もあるしネットで大騒ぎすれば助けてくれる奴も出てくるだろうけど
属していた会社なり組織からは切り離される形に落ち着くだろうね
2023/11/01(水) 20:11:22.67ID:mATsi7Ug
Rustはリファクタリングでのエンバグ防止も強力で開発効率良いな
2023/11/01(水) 22:31:20.11ID:H181/maX
>>38
嫌なら見るな
嫌なら出ていけ
2023/11/01(水) 23:11:21.03ID:FbXsZBSZ
競技プログラミングでは何でみんなc++なのですか
43デフォルトの名無しさん
垢版 |
2023/11/02(木) 02:07:29.05ID:uLntp6kp
>>42
Rust使ったことないだろ
44デフォルトの名無しさん
垢版 |
2023/11/02(木) 09:27:36.71ID:kxWwWLf8
>>36
東近江市市長ですね判ります
45デフォルトの名無しさん
垢版 |
2023/11/02(木) 09:30:06.68ID:kxWwWLf8
>>39
私刑の大半は「自分が気に入らない相手を消す」だろ
2023/11/02(木) 10:28:31.37ID:e3rN7I7Z
ゼロサムゲームなんだよねえ あいつがいると、こっちの幸せの取り分が減る
47デフォルトの名無しさん
垢版 |
2023/11/02(木) 11:00:23.03ID:NLwKfBpd
C++のchrono
Sun=0, Mon=1, ..., Sat=6
Rustのchrono
Mon=0, Tue=1, ..., Sun=0
なんかの嫌がらせか?これ
48デフォルトの名無しさん
垢版 |
2023/11/02(木) 11:01:31.85ID:NLwKfBpd
訂正
C++のchrono
Sun=0, Mon=1, ..., Sat=6
Rustのchrono
Mon=0, Tue=1, ..., Sun=6
なんかの嫌がらせか?これ
2023/11/02(木) 11:38:23.20ID:SgY2tw2G
>>48
enumで処理するもんじゃないの?
2023/11/02(木) 12:27:57.80ID:e3rN7I7Z
いっしょは嫌だったんじゃない? (はなほじ
2023/11/02(木) 13:14:01.78ID:sR7LRQS1
>>49
0と7が日曜だと便利なんだよ
なんで変えちゃったのかね
2023/11/02(木) 14:01:21.75ID:26D/b4Fo
おまえら全員エアプログラマーだな
Rustのchronoは両対応で困ることはない
num_days_from_sunday()だと日曜日から0発進
num_days_from_monday()だと月曜日から0発進
53デフォルトの名無しさん
垢版 |
2023/11/02(木) 14:21:03.74ID:R1/lC5p9
ISO8601では月曜は1で日曜は7なんだよな。
2023/11/02(木) 14:43:04.82ID:26D/b4Fo
>>53
Rustのchronoが日曜スタートと月曜スタートの両対応にしている理由がそれ
C++のchronoでISOに変換するには日曜日だけif文するか再び%7する必要がある
2023/11/02(木) 15:51:19.67ID:C/SY5g2v
たぶん何も考えてない+誰も使わないから放置されているだけだね
Mon=0固定の前提でTryFrom<u8>なんか実装してるし
2023/11/02(木) 16:27:45.50ID:26D/b4Fo
そこは言語によって異なるんだよ

Pythonは月曜スタート
weekday() 月曜日=0 ~ 日曜日=6
isoweekday() 月曜日=1 ~ 日曜日=7

Javaも月曜スタート
DayOfWeek 月曜日=1 ~ 日曜日=7

だから両対応しているRustが最も良い状況
2023/11/02(木) 20:37:31.47ID:YFXMye4z
曜日の内部表現とかどうでもいいだろ…
2023/11/02(木) 21:59:20.29ID:SgY2tw2G
HTTPでJSONやりとりしてるとき思い込みで
バグになるというのはあるかも
2023/11/02(木) 23:52:30.67ID:M3hXBmrb
今回のchronoでイチャモン始めたやつも
日曜日開始のC++しか知らなくてそれが正しいと思い込みをしてたからな
月曜日開始のISO8601とそれに従うプログラミング言語を一つでも知っていればそんな勘違いは起きなかった
2023/11/03(金) 00:21:59.00ID:g+drsbNI
と、C言語のtm構造体から続くC/C++/UNIX系全般の伝統を知らなかった人が申しております
61デフォルトの名無しさん
垢版 |
2023/11/03(金) 00:34:37.66ID:OMWtAqQI
恥ずかしいのぉ
ああ恥ずかしい
2023/11/03(金) 00:58:32.47ID:/+LsOzGq
>>60
それも常識だな
そしてISOおよびそれに準じるJavaやPythonも常識
両派あることを知っていれば両対応のRustを批判しだすような愚かな言動はしない
63デフォルトの名無しさん
垢版 |
2023/11/03(金) 03:57:01.11ID:QmAmywB5
>>62
コウモリ野郎が一番嫌われるんだよ
おまえは獣なのか鳥なのか
2023/11/03(金) 06:56:19.57ID:N2L5n51t
伝統的には日曜始まり、商用的には月曜始まり、ということだろ。

そもそも現代主流のグレゴリオ暦自体が欠陥だらけ (素数の7を週単位にしている、月の日数がバラバラ) だから、効率を気にしてもしょうがない。
完全数の6と3素数積の30を基準にすれば全然違ったのにな。
2023/11/03(金) 08:41:35.38ID:znXtgxSS
>>59
おまい望月衣望子そっくりな人間だな
2023/11/03(金) 08:41:37.96ID:hQugpIJj
>>64
だからその日曜始まり日曜終わり両方に対応できる日曜0,7が有能だった話よ
2023/11/03(金) 10:30:38.41ID:FAT4ZC6j
C++もc_encodingとiso_encodingで両方対応はしてる
簡単に変換できるから正直どうでもいいけど

https://en.cppreference.com/w/cpp/chrono/weekday/encoding
このドキュメントはReturn valueの2) の内容が間違ってる
レビュープロセスが心配になるな
2023/11/03(金) 11:42:31.25ID:7w5cnhLp
>>58
シリアライズ時と異なるエンコーディングで復元しようとしたらそりゃバグるわな
でもそんなやつらのために内部表現を統一しろと言われても誰も相手にしないでしょ
2023/11/03(金) 12:30:23.11ID:xNBDqk0z
>>56
JavaはWeekFields経由で日曜始まりにもできる
Pythonは日曜始まりのインデックスを直接取得することはできないがcalenderモジュールで日曜始まりのカレンダーを扱える

どちらもRustほど低レイヤーやC++を意識する必要がないからRust比べて少し高いレイヤーで日曜始まりにも対応している
Rustの開発者にとって最もいい状況が他の言語の開発者にとっても最もいい状況とは限らない
2023/11/03(金) 13:42:53.76ID:IVkiUA9g
=== 複製おじさん(通称複おじ)について ===
Rustスレを中心に活動し、2023年4月現在で1年以上ム板に住み着くRustacean。無自覚な荒らし。

Rustスレでは、基本的に他住民の意見を聞いて糧とすることなく、自らのコードが最善であると、ID変更自演を交えいつまでも主張し続ける。
同スレで「所有権が複製される」という違和感のある表現を、「違和感がある」とする他住民の意見をすべて否定してしつこく擁護し続けたことから、「複製おじさん」というあだ名が付けられた。
それ以外のム板スレでは、基本的に他住民の意見を聞いて糧とすることなく、Rustこそが最善であると、ID変更自演を交えいつまでも主張し続ける。
その基本戦術は、「GC言語は遅い」の一声でC/C++/Rust以外の言語を否定し、残ったC/C++は安全ではないので、Rustが最善であるとするもの。

しかしながら、Rust以外の言語に関しては、正当な批判を展開するのに十分な知識を持っているとは言いがたい。
本スレPart1では、C++の問題点を指摘しようとして多数の誤り・知識不足を露呈することとなった。特にしつこく食い下がったのが「動的ディスパッチ」に関する誤解である。
https://mevius.5ch.net/test/read.cgi/tech/1677286186/786-799(ID:Evbafc70とID:RiLc+pIfが複製おじさんであると考えられている)
要約すると、通常「条件分岐」と呼ばれるものを「動的ディスパッチ」と呼ぶのが正しいと主張し続けたのである。
常識的にはあり得ない誤解だが、提示されたC++のコードが自らの主張(C++にはパターンマッチが無い)に不都合であると感じたためか、C++のコードを正しく読み解くことができないにもかかわらず脊髄反射的に否定してしまい、その根拠として誤った論理をこじつけてしまったものと思われる。

ちなみにこの後、同種の誤解を持って書き込むID:wHEiYRW7(これはID使用歴的に複製おじさんとは考えにくい)に対して、正しい理解に基づく指摘を行う単発IDが複数出現するが、この中にも複製おじさんが多数含まれていると考えられている。
このように自分の誤りを認識した場合、それを認める書き込みは決して行わず、別人の振りをして最初から正しく理解していた体を装うのも複製おじさんの特徴である。
2023/11/03(金) 13:43:15.14ID:IVkiUA9g
テンプレ忘れてるぞ
2023/11/03(金) 15:43:05.53ID:+wuvOqHg
ゲームプログラミングに向かない時点でRustに勝ち目は無い
2023/11/03(金) 16:17:15.97ID:TISIAi2y
ゲームとかどうでもいい
2023/11/03(金) 16:35:04.29ID:hQugpIJj
プログラミング言語は とにかくユーザ数が増えて裾野が広がらないとだめよ

とはいっても、Rustはその性格上 エンジン系にはとても強いと思う
75デフォルトの名無しさん
垢版 |
2023/11/03(金) 20:01:25.17ID:oS0jLPzO
なんでゲームに向いてないの?
2023/11/03(金) 20:18:57.74ID:L6NiYGzz
ビルド時間が長いとか主要なゲームエンジンが対応してないとかかな?
2023/11/03(金) 20:23:49.80ID:m1BMAQzf
>>74
ゲームエンジンこそどうでもいい
どうせ他人の成果物使うだけやし
つまりRustはゲームプログラミングに向いてない
2023/11/03(金) 20:27:09.44ID:DDLGlAPd
>>75
オブジェクト指向じゃないから大規模開発に向いてない
2023/11/03(金) 20:27:51.26ID:DDLGlAPd
ゲームはプログラムの積み上げ方式
Rustなんか使い物にならん
2023/11/03(金) 20:48:01.15ID:L6NiYGzz
え?rustってオブジェクト指向じゃないの?
2023/11/03(金) 20:54:38.72ID:hQugpIJj
>>77
エンジンを作る側の話やで
2023/11/03(金) 21:23:41.57ID:YDoJin8V
>>78
むしろRustは大規模開発にも適するように設計された言語
今どきの普通にマルチパラダイムで当然オブジェクト指向もサポート
83デフォルトの名無しさん
垢版 |
2023/11/03(金) 22:56:37.98ID:oS0jLPzO
これすごいわ
https://www.youtube.com/watch?v=62ZcxDGawd4
Rust もびっくり
84デフォルトの名無しさん
垢版 |
2023/11/03(金) 22:58:02.02ID:oS0jLPzO
>>75
>>79
グローバル変数が超絶面倒臭いからじゃね
2023/11/03(金) 23:50:14.81ID:DpBIrO9u
オブジェクト指向を理解してない無能が多すぎる
2023/11/03(金) 23:54:28.74ID:caMFRrqc
オブジェクト指向なんてもはや有害じゃねという
話も出てるようだけど
87デフォルトの名無しさん
垢版 |
2023/11/04(土) 00:10:04.03ID:vTgEadDD
既存のオブジェクト指向言語の置き換えを狙ってるなら
既存のオブジェクト指向言語の機能は備えんとなぁ
設計からやり直す必要が生じてまんどくさってなる
スクラッチから新たに書くのなら支障ないだろうけども
それではいつまで経ってもマイナー言語だよ
この先生きのこれん
2023/11/04(土) 00:22:53.36ID:p6vbmy4R
みんな反発しても結局オブジェクト指向に帰ってくる
みんなC++に帰ってくる
2023/11/04(土) 00:23:19.27ID:EeyeeoXm
最近のプログラミング言語は基本的にオブジェクト指向だがクラス継承だけは亡くなったらしい

最近のプログラミング言語
【クラス継承がない】Elixir、Go、Julia、Nim、Rust、Zig
【クラス継承がある】Kotlin(=Javaの後継)、Swift(=Objective-Cの後継)
つまり過去のしがらみでクラス継承を含めざるを得なかったKotlinとSwiftを除いて
全ての言語でクラス継承は亡くなった
90デフォルトの名無しさん
垢版 |
2023/11/04(土) 00:27:29.67ID:vTgEadDD
おかげでみんなマイナー言語のままじゃんw
91デフォルトの名無しさん
垢版 |
2023/11/04(土) 00:28:23.25ID:vTgEadDD
人間は保守的なんだから
互換性を軽視したらユーザは絶対にぶんどれん
2023/11/04(土) 02:16:54.87ID:eaDg3ztu
>>89
GUI開発用言語とそうでない言語にきれいに分かれてんね
2023/11/04(土) 03:14:34.51ID:6Rm06W4Y
GUIはクラス継承要らないだろ
有害なクラス継承しかないとクラス継承を使って巨大なピラミッドを作ってしまい
その反省も各新言語が揃って意図的にクラス継承を廃止した要因
2023/11/04(土) 03:24:41.20ID:W1fOq5zR
継承無くした結果、馬鹿なことをやらされる
https://qiita.com/muumu/items/a0d111d129d20240d182
2023/11/04(土) 05:01:54.27ID:qNKpZaTJ
それはクラスの継承というよくない古い考え方しかできない人向けの方法だな
様々に方向性も異なる方針の新プログラミング諸言語がクラスの継承だけは導入しない同じ結論に至った重みは大きい
2023/11/04(土) 05:58:52.07ID:QaQpRr0T
IUnk教わい、なくなるといわれるとちょっとさみしい (なくなるとは言われてない
97デフォルトの名無しさん
垢版 |
2023/11/04(土) 06:13:35.65ID:9ClykILV
継承がない言語には大抵はmix-inという優れた代替が用意されてる
継承もmix-inもないRustは無能
2023/11/04(土) 07:37:08.58ID:tOjhAD6C
そうゆうのがない、切り捨ててるから、Linuxカーネルに来てよろしいって言われたのかもね しらんけど

やっぱり必要となりゃ、そのうち解禁(追加)になるでしょ
2023/11/04(土) 07:50:02.45ID:W1fOq5zR
>>95
極端だな
そんな考えじゃC++から移行なんて益々困難だし
こんなスレ立てて対立煽りするレベルにも達してないじゃないか
>この記事ではC++やJavaで継承を使っていた人がRustで同様の実装をしたいときにどうすればよいのかを説明します。
この課題については君はどうしたらいいと思ってる?
2023/11/04(土) 08:26:29.68ID:tOjhAD6C
第1スレはわからんけど、このスレの>>1は俺
2023/11/04(土) 09:10:11.30ID:LI9X3aVk
>>89
Javaの開発者も継承だけは間違いだったと言ってるみたいだね
2023/11/04(土) 09:32:38.86ID:0JVEbPjc
64 デフォルトの名無しさん 2023/09/26(火) 09:36
以前Javaのユーザグループミーティングに出席した際、James Gosling(Javaの生みの親)がメインの講演者として招かれていました。
すばらしいQ&Aセッションの途中に、こんな質問が出ました。
「もう一度最初からJavaを作り直すとしたら、どこを変更したいですか?」
答えは「クラスを除外するでしょうね」というものでした。
笑いが静まった後、彼が説明したのは、本当の問題はクラス自体ではなく実装継承(extendsの関係)なのだということでした。
インターフェースによる継承(implementsの関係)のほうが望ましいのです。できる限り実装継承は避けたほうがよいでしょう。
2023/11/04(土) 09:32:49.65ID:6irn+b/+
やっぱりコミットするならシープラだなとおもいました
2023/11/04(土) 09:56:14.27ID:/2/myesZ
その論法に乗っかってやると過去の
言語のパラダイム変化はどうやって起きたのか
謎になるな
2023/11/04(土) 09:59:34.34ID:eaDg3ztu
>>93
>GUIはクラス継承要らないだろ
要るか要らないかという話はしてないよ

1) Elixir、Go、Julia、Nim、Rust、Zig
2) Kotlin、Swift

1)の言語でGUI作れなくはないけど実際に作る開発者がかなり少ない
逆に2)の言語は大半の開発者がGUIを作ってる
それには理由があるということ
もっと言えばクラス継承的な機能の有無はトレードオフだからそれを理解しましょうねという話
2023/11/04(土) 10:34:34.64ID:2TRtrAOp
多くの高機能webサイトはGUIアプリと言って良いと思うが
ts jsのクラス機能はあるけど使わないな
2023/11/04(土) 10:49:05.41ID:XpaBBm0T
やっぱりRustが最強だなっておもいました
2023/11/04(土) 11:16:32.88ID:qG8ydW8y
最強はRust世代

俺のおかんはC++
109デフォルトの名無しさん
垢版 |
2023/11/04(土) 12:01:10.23ID:vTgEadDD
>>89
思惑の違いが見事に結果に表れている分類だね
興味深い
2023/11/04(土) 12:09:00.72ID:vTgEadDD
>>104
その「言語のパラダイム変化」って具体的にはどれを指している?
Rustがユーザを獲得する際の参考になるかもしれんね
111デフォルトの名無しさん
垢版 |
2023/11/04(土) 12:27:39.60ID:KPpuxUox
オブジェクト(classじゃなくてstructで良い)があって
正しい型指定で正しく関数が呼ばれてれば
クラス継承なんて要らないんだよな
別に禁止というほど厳しくやらなくても自然とそうなる
112デフォルトの名無しさん
垢版 |
2023/11/04(土) 12:29:16.51ID:KPpuxUox
C++ の template なんてあれオブジェクト指向じゃねーし
2023/11/04(土) 12:35:18.44ID:eFHrirh7
>>105
KotlinとSwiftは最初からGUIアプリをターゲットにしてるしそれ以外の分野では全然使われてないような
2023/11/04(土) 16:44:29.40ID:qG8ydW8y
いまさら人に聞けない
悪い継承ってのがわからなくなった

継承おぼえたてて(一人プロジェクトが)めちゃくちゃになった経験ならあるけど、そうじゃなくてこう
115デフォルトの名無しさん
垢版 |
2023/11/04(土) 17:10:03.05ID:S8hti0fw
クラス継承は必要
オブジェクト指向を理解できないのはただのザコ
2023/11/04(土) 18:03:19.84ID:rn/KP434
>>115
最近のプログラミング言語たちが揃いも揃ってクラス継承を不要と判断しちゃいましたぁ
【クラス継承がない言語】Elixir、Go、Julia、Nim、Rust、Zig
2023/11/04(土) 18:26:15.51ID:EmvA1J0P
言語開発者が設計した基底クラス以外の継承はいらないんじゃないかなぁ
2023/11/04(土) 18:26:28.96ID:p6vbmy4R
rust以外上がり目なさそうな言語たちで草
119デフォルトの名無しさん
垢版 |
2023/11/04(土) 18:42:09.44ID:vTgEadDD
Rustも同じく普及戦略を誤った言語だよ
2023/11/04(土) 19:41:01.77ID:hPdVOFaj
Pythonスーパーセットのmojoにこのまま成長してほしいけどシープラRustの競合にはならないか
2023/11/04(土) 19:51:27.75ID:Is+FXxYG
mojoはAI関連の高速化を狙ったものだろうから限定的な利用になりそう
122デフォルトの名無しさん
垢版 |
2023/11/04(土) 21:29:47.46ID:9ClykILV
結局ユーザーが欲しかったのは「ポインタのないC++」であって所有権やtraitみたいな使いづらい独自機能じゃなかったんだよなあ
2023/11/04(土) 22:19:37.19ID:+CP/CRpL
>>122
所有権はC++にもある
traitはC++の抽象クラスからデータ(メンバー)を分離独立させてより良い設計ができるようになっている
使いづらくなっていない
2023/11/05(日) 10:25:09.84ID:ol9bMVcc
>>117
doubleがfloatを継承していないのはなぜ?
f64がf32を継承していないのはなぜ?
2023/11/05(日) 11:09:33.12ID:JT3Ktc4T
それって継承するようなもんかね
126デフォルトの名無しさん
垢版 |
2023/11/05(日) 11:48:56.89ID:8w5QKIdz
精度の違いであって継承関係無いな。
むしろ継承したらダメなやつ。
共通のインターフェースを用意するのが普通。
2023/11/05(日) 12:19:51.94ID:pw4Q0c9f
パフォーマンスを度外視するなら
浮動小数点数型をfloatとdoubleの両方とも継承するのが自然かなぁ
128デフォルトの名無しさん
垢版 |
2023/11/05(日) 17:32:34.60ID:vp0BWznn
>>127
その浮動小数点型ってどんなもの?
インターフェースじゃないんだよね?
129デフォルトの名無しさん
垢版 |
2023/11/05(日) 19:27:50.24ID:aeGT2yJ/
>>116
自分に都合の良い言語のみ列挙する
まさにザコ
自分の考えが無い
2023/11/05(日) 19:50:12.60ID:o9vKIGF+
>>129
同じくらいたくさん反例を挙げようよ
2023/11/06(月) 04:14:47.70ID:m6bVjB7O
>>130
そんなことよりこのクソスレ立てたのもお前?
https://mevius.5ch.net/test/read.cgi/tech/1693054853/
2023/11/06(月) 08:09:26.10ID:Cot/SbpY
募集してんのか、大胆だな!
133デフォルトの名無しさん
垢版 |
2023/11/06(月) 10:12:15.79ID:48qtdwXc
Rustとの相性で言えば
Rust+Pythonはかなり良い
Rust+Cが最強
Rust+C++は最悪

Nimとの相性で言えば
Nim+Pythonはとても良い
Nim+Cが最強
Nim+C++も最強

Nimの勝ち
2023/11/06(月) 10:16:59.00ID:UjpY0LiG
>>129
自分はなにも例を挙げられないの?
それでよく人を批判する気になれたね
135デフォルトの名無しさん
垢版 |
2023/11/06(月) 14:46:38.23ID:DT4BUOTR
テンプレートパターンやるにしても今は継承よりもクロージャで渡す方がわかりやすいって話やね。
まあどっちにしろ低レイヤー言語だとオブジェクトの解放タイミングとか気にしてめんどくさくはなるが。
2023/11/06(月) 14:50:37.11ID:mJLQiI1M
Nimちゃんに行くわ
RUSTとかクソゲーみたい
2023/11/06(月) 15:23:25.15ID:X0T3Y72w
C++/Rustと比べて何もかも劣るNimは選択肢に上がることがない
138デフォルトの名無しさん
垢版 |
2023/11/06(月) 18:05:43.27ID:BlmWAswu
>>134
そもそも流行りの話自体何の根拠にもなってないんでこの話自体無意味
無意味な話は時間の無駄
2023/11/06(月) 18:18:33.08ID:mZ9CqDyY
C++は仕様などがugly
Rustはbeauty
2023/11/06(月) 18:45:27.89ID:Yw0Fs1sT
>>138
お前もかなりのザコだぞ
2023/11/06(月) 19:58:38.94ID:2NClhQZD
>>137
文法はNimの圧勝。
2023/11/06(月) 21:52:22.89ID:xwaCKIbt
Nimの唯一のメリットがPythonに似た文法と言われているが
このスレの住人はそれをメリットと感じない
143デフォルトの名無しさん
垢版 |
2023/11/06(月) 22:00:03.84ID:juqSJt+O
何でお前が住人を代表してるの?w
2023/11/06(月) 22:14:50.32ID:BFZIHaDs
複オジ代表チーっすw
2023/11/06(月) 23:09:22.63ID:m6bVjB7O
まあ複おじ隔離スレなんだから代表は複おじでいいんじゃない?
2023/11/06(月) 23:55:02.14ID:X0T3Y72w
>>141
インデントではなく波括弧でブロックを表すのが好まれている多数派
2023/11/07(火) 07:52:40.08ID:Z7KocuHY
>>146
c世代はそうだけど、pythonユーザーの方が多い現在はインデントブロックの方が主流。じゃなきゃYAMLとか流行らん。
LISPも丸括弧使ってるけどインデントブロック風の整形しているし、波括弧ブロックが多数派とは思えん。
2023/11/07(火) 09:16:54.55ID:YntbMeAj
詭弁 - Wikipedia
https://ja.wikipedia.org/wiki/%E8%A9%AD%E5%BC%81
2023/11/07(火) 09:19:09.61ID:YNljO5VY
>>147
どさくさに紛れてYAMLを流行り扱いすんなやww
150デフォルトの名無しさん
垢版 |
2023/11/07(火) 09:23:10.10ID:pJrSerDn
Pythonみたいなインデントずれたら明後日の動きする様な言語は欠損言語だろ
2023/11/07(火) 09:32:16.68ID:IkuZHVo7
「Linux」メンテナーの燃え尽き症候群問題--業務内容の変化と支援の必要性
https://japan.zdnet.com/article/35210969/

Corbet氏は「Rust」言語がLinux開発で採用されたことについて歓迎しているものの、これによってメンテナーにさらなる負担がかかるようにもなるとした。同氏は、「カーネルメンテナーを務める以上、Rust言語で記述されたコードのマージ依頼も受け取ることになるため、同言語に対する極めて深い知識が必要となる(中略)既に多忙を極め、自らの仕事量に圧倒されているメンテナーに対して、この新言語の学習を求めるのは酷というものだ。このため、この点は今後、問題となりそうだ」と述べた。
2023/11/07(火) 09:58:24.32ID:KQXk8Lyc
>>147
インデントに整形以上の意味を持たせた言語の方が好まれてるかどうかの話をしてるのに
他の言語でもインデントで整形してることを根拠にしても意味ないだろ
2023/11/07(火) 10:27:17.78ID:sAtxR3nB
インデントより会話の論点を揃えないとな
2023/11/07(火) 10:45:48.18ID:S2z7fl4T
whitespace significantな言語はプログラミングの素人にとっては多少読みやすいというメリットはある
しかしそれ以外はデメリットだらけなので素人を釣りたい場合を除いて採用するメリットがない
155デフォルトの名無しさん
垢版 |
2023/11/07(火) 10:53:19.67ID:sYaGJjSb
リモートワーク制度が削減・廃止されたら「転職や別案件を探す」が4割--
「Offers」登録者調査

ITエンジニア/デザイナーの副業・転職サービス「Offers」を提供するoverflowは、
同社が運営する「Offersデジタル人材総研」にて「リモートワーク実態調査2023」
を公表した。
これによると、リモートワークになり、5人に1人が引っ越したと回答した。そのうち、
現職でリモートワーク制度が削減・廃止された場合、「転職や別案件を探す」という
回答が44.0%にものぼった。一方「会社と交渉する」という回答は40.0%、
「引っ越さず受け入れる」が12.0%となった。
さらにリモートワークを希望している理由として「通勤時間が無駄だと感じている」が
87.7%でトップとなった。このほか「個人の時間ができる」(62.3%)、「副業を続け
やすいから」(39.6%)、「子育てができる」(35.8%)と続いた。
2023/11/07(火) 16:44:22.56ID:K3Q4DPSx
> Pythonみたいなインデントずれたら明後日の動きする様な言語は欠損言語だろ
ほんとこれ
> インデントより会話の論点を揃えないとな
ほんとこれ
157デフォルトの名無しさん
垢版 |
2023/11/07(火) 16:48:16.87ID:r4VgdGvO
>>150
ずれたら思ってない動作になる場合があるのは確かだが
ずれることがめったに起こらない
2023/11/07(火) 17:52:17.78ID:yNm6SVJF
正直食わず嫌いなんだが、あのインデント式、慣れない悪寒しかしない
yaml書かされるけど、おっかなびっくりだわ
2023/11/07(火) 18:32:13.35ID:WwhMyV/o
ifとかforがネストしてるときに論理構成変えたときに
ぐちゃぐちゃになったりしないの?
2023/11/07(火) 19:03:13.54ID:nOWHHYht
コピペした時困るのはあるけど
そんなネスト深いところにコピペする時点でコードが終わってるのだろう
161デフォルトの名無しさん
垢版 |
2023/11/07(火) 19:24:21.76ID:RqjiUzBc
あっちのファイルはスペースで、こっちのファイルはタブでそれぞれインデントしてるとかw
更に同じファイル内でスペースとタブが混在したインデントしてるとかw
2023/11/07(火) 21:26:08.28ID:cNgR9CBR
シープラの文法が醜いってとこまで合意できてるってことでいいかな
2023/11/07(火) 22:35:55.75ID:irgQLNGX
>>162
ダメなのはNim
2023/11/07(火) 23:28:55.99ID:hgNhDI9g
長いだけあって、いくらでも悪く書ける
2023/11/07(火) 23:29:26.17ID:zgo9bT4J
>>151
>メンテナーに報酬を支払おうというところはほとんど「ない」のだ
メンテナーほぼ金貰ってないのかw
壮絶な時間の無駄だな
linuxなんて潰れちまえ
2023/11/07(火) 23:40:27.67ID:laLhHNQt
>>162
インデント構文はその醜さを完全に理解した親切な人が書くとわりとマシに読めるって話なら同意できる
2023/11/08(水) 07:17:12.54ID:W3To02R9
>>163
Nimの文法が駄目ならRustは産業廃棄物だな。
2023/11/08(水) 09:28:37.50ID:G1poaB6X
>>167
最初からそう言ってますよね
2023/11/08(水) 10:02:49.03ID:RamzJ36x
>>165
Linuxなんて無料だから普及したってだけだし
無名の大学生が作った有料カーネルなんか誰が使うかよ
2023/11/08(水) 10:07:20.75ID:QixgdFmt
Rustが最も美しいけどC++に比べたらPythonの方がまし
2023/11/08(水) 10:21:07.20ID:rqy+WU7a
cppは汚らしい
2023/11/08(水) 10:34:17.23ID:K2ksJD7C
あれがいいんだぞ

でも、template<>のごちゃっとしてるのは苦手
2023/11/08(水) 10:49:02.95ID:MFNjLgBF
NimはPython由来の文法が多い中でprocヘッダーの区切りをわざわざ=記号にしたのは何でなの?
2023/11/08(水) 11:13:52.74ID:U7ghqgyy
痘痕もエクボっていうしずっと使ってると美しく見えるのかもしれん
始祖のハゲ散らかしもイケオジに見えるのかもしれん
175デフォルトの名無しさん
垢版 |
2023/11/08(水) 11:26:24.47ID:088wzVve
>>173
macro
2023/11/08(水) 12:07:42.23ID:fBbSHd4U
>>175
関係ないやろ
2023/11/08(水) 13:10:09.47ID:l0v/WxBk
>>169
BSD
2023/11/08(水) 14:09:53.13ID:qh/Yreq5
Nimは継承あるじゃん
だれか突っ込めよ
複オジ嘘つき放題じゃねーか
2023/11/08(水) 14:45:54.44ID:7EPaeHp0
Nim使ってる時点でセンスがないからな
2023/11/08(水) 15:29:55.01ID:9/Sq9IWJ
Nimはクラスがないため当然クラス継承もない
2023/11/08(水) 15:41:40.86ID:hsKTrqcL
このスレの半分は複オジのウソで出来ています。
用法・用量を守って正しくご使用下さい。
2023/11/08(水) 15:50:23.42ID:J3/ZiO6G
複おじってニートでしょ?
なんか我々と対等に喋れること自体がとんでもない体験なんだし
もっと感謝して欲しいね
183デフォルトの名無しさん
垢版 |
2023/11/08(水) 17:01:15.09ID:wMkAKLer
C++er的にC23ってどうなの?
2023/11/08(水) 17:32:19.27ID:K2ksJD7C
#embed はあると安心 ないとやっぱり一手間かかる
clangではできてたっぽいけど(VC派
2023/11/08(水) 17:35:31.79ID:orrrVPZ2
>>180
www
2023/11/08(水) 18:12:04.23ID:J3/ZiO6G
>>180
クラス継承だけが継承ではないのだけどね
2023/11/08(水) 19:11:51.53ID:BxyJgb4P
有害とされているのはクラスの継承
それ以外の継承はあってもいい
188デフォルトの名無しさん
垢版 |
2023/11/08(水) 19:13:26.39ID:mR96+8QE
>>182
とニートが申しております
2023/11/08(水) 20:13:44.98ID:ow8V8oTj
有害なのは多重継承では?
単一継承はいいでしょ
2023/11/08(水) 20:15:54.45ID:dNhK+uJb
綺麗に書けるならという条件がつく
本来、綺麗に階層化するのが目的だったのが、どうしてもごちゃついてしまう
基本にして難 それが継承

って感じでいい?
2023/11/08(水) 20:28:47.14ID:dEbgw7JQ
>>189
大抵は駄目。
継承は「インターフェイスの共有」という外部との契約と、「実装の共有」という内部との契約をごっちゃにしているから、すぐに設計がごちゃごちゃになる。

内部と外部は明確に分離したほうが手間がかかるが問題になりにくい。
2023/11/08(水) 20:35:51.69ID:57OVemIO
クラス継承では複数の機能を継承したくなった時に多重継承が起きてしまう
多重継承を避けるには使うすべての機能を巨大なツリー関係に押し込める本末転倒な事態になる
2023/11/08(水) 20:37:37.21ID:5gc/7Ny5
>継承は「インターフェイスの共有」という外部との契約と、「実装の共有」という内部との契約をごっちゃにしている
Nimの継承にも同じことが当てはまるけど
Nimにはクラスはないから有害じゃないという主張でいいのかな?
2023/11/08(水) 20:53:57.66ID:7EPaeHp0
>>189
そのレベル浅い知識ならおそらく「SOLID原則」を知らないでしょ
勉強しな?
メンテや機能追加を繰り返してるとどうしても内部構造が腐敗していくものよ
2023/11/08(水) 21:01:44.80ID:dEbgw7JQ
>>193
理想は継承なしの共通インターフェイス。継承自体いらん。

原理的には同じメソッドを持つのならどんなインスタンスでも同じインターフェイスで扱えるから、継承を使って扱えるインターフェイスを制限するのは「早すぎる最適化」としかいえん。
196デフォルトの名無しさん
垢版 |
2023/11/08(水) 21:07:15.90ID:5ONqWRVX
多重継承って本当に悪か?
多重継承を使う前に周りに悪って教え込まれたので
これまで本格的に使ったことはないのだが
みんなは酷い目にあったことあるかい?
敢えて「多重継承=悪」思考停止論を提起したい
2023/11/08(水) 21:20:08.15ID:orrrVPZ2
有用なものを何も生み出せない
目的と手段を履き違えた無能たちの知識バトルロワイヤル
198デフォルトの名無しさん
垢版 |
2023/11/08(水) 21:23:09.85ID:wwLvTPFi
現在動作してる過去のシステムを捨てるわけにいかない状況で、新しい共通システムを書くには継承がいいと思うけど
どうなんでしょう?素人考えなんですけど。
2023/11/08(水) 21:23:13.22ID:WEquhdeD
オブジェクト指向のメリットってホントにメリットなんだろうか?
200デフォルトの名無しさん
垢版 |
2023/11/08(水) 21:35:45.96ID:JLAEJM24
>>199
モジュール分割の方法を広げるっていうメリットはある。
カーネルドライバー部分はオブジェクト指向した方がいいって、否定派のlinusも認めてる。
2023/11/08(水) 21:56:55.44ID:cf3mLuef
オブジェクト指向 ⊃ クラスの使用 ⊃ クラス継承の使用

オブジェクト指向自体は問題ない
クラスの使用も継承を用いなければ問題ないが
クラスと他との違いはクラス継承にあるように本質がその継承機能にあるため
クラス自体を無くしたプログラミング言語が最近は多数派となった
202デフォルトの名無しさん
垢版 |
2023/11/08(水) 22:24:24.52ID:5ONqWRVX
>>201
全部マイナー言語じゃん
支持されてないんだよ
2023/11/08(水) 22:32:30.66ID:5gc/7Ny5
>>195
全く答えになってない
Nimの継承は君が主張している有害な継承に該当するのか否か?
2023/11/08(水) 22:52:12.05ID:W3To02R9
>>203
「継承自体いらん」と書いているだろ。

shared_ptr<function<T>>のTがインターフェイスになったのがあれば継承自体いらん。
2023/11/08(水) 23:04:09.93ID:08jT+y3p
>継承は「インターフェイスの共有」という外部との契約と、「実装の共有」という内部との契約をごっちゃにしている
もう一つ付け加えると↑これはデフォルト実装のあるTraitやインターフェースにも同じことが当てはまる
でもインターフェースのデフォルト実装を有害と言う人は少ない
なぜだろうね?
206デフォルトの名無しさん
垢版 |
2023/11/08(水) 23:45:38.02ID:wMkAKLer
特殊事情持ち出して一般論を語るな。
例外的なのが無いとでも思ってるのか
2023/11/08(水) 23:46:51.04ID:dNhK+uJb
最初はきれいなんだよ、最初は
2023/11/08(水) 23:59:18.59ID:57OVemIO
>>205
Rustのtraitはデータ(メンバー)とは切り離された設計になっているから
デフォルト実装自身がデータ(メンバー)にアクセスできない点で違うんじゃないか
209デフォルトの名無しさん
垢版 |
2023/11/09(木) 11:54:56.82ID:Fo7n9qIp
>>196
iostream観たら判るし
210デフォルトの名無しさん
垢版 |
2023/11/09(木) 12:57:22.06ID:vs5NVBb2
>>194
SOLIDは名前しか知らないがライブラリのクラスを拡張するときは継承あると便利だけどな
コンポジションだとゲッターかプロパティでライブラリクラスのオブジェクト取得しないといけないし面倒じゃない?
2023/11/09(木) 15:49:49.48ID:Nh0igmG8
>>210
その継承やらインターフェースの設計をうまくやるためのパターンがSOLIDだよ
これを知らずに継承使ってるやつは大抵ゴミコードを量産してる
2023/11/09(木) 16:57:59.50ID:vs5NVBb2
>>211
ゴミコードは沢山書いてきたが継承使う時はほどほどにしてるからな
あまりゴミ化はしたことないな
SOLIDは概念が難しかったがこれって継承の複雑さが出ちゃってるね
継承はもっとシンプルに使わないと
2023/11/09(木) 17:02:28.18ID:Nh0igmG8
>>212
継承がなければSOLIDなんてほぼ考えなくて良いからね
「インターフェース分離の原則」あたりさえ気にしていれば問題ないし
モダンな言語ならインターフェースは言語のコアとして搭載されてる
継承を無くすることでSOLID原則みたいな面倒なことを考えなくても良いし
コードもシンプルになるしメリットしかない
だから最近の言語では継承がない
これがモダンな言語では継承が存在しない理由
2023/11/09(木) 17:17:08.18ID:wF5VsxRz
>継承がなければSOLIDなんてほぼ考えなくて良いからね
おいおいw
揃いも揃って何なんだここは
2023/11/09(木) 17:41:32.22ID:Nh0igmG8
>>214

ほぼ継承に関する問題を解決するための原則だぞこれは
2023/11/09(木) 17:53:14.45ID:apZquDee
Lだけだろ
2023/11/09(木) 18:02:47.11ID:Nh0igmG8
S 継承がなければ単一にしかなりようがない
O 継承がなければ勝手に追加も削除も容易
L 継承がなければ置換もクソもない
I 継承がなければインターフェースなんていくらでも分離できる
D 言わずもがな

継承があるからこの原則は生きる
つまり継承の悪い部分を避けるための
オブジェクト指向の原則

その知識は何のためにあるのか?
きちんと自分の頭で考えよう
それが知恵というものだ
2023/11/09(木) 18:06:49.12ID:Nh0igmG8
オブジェクト指向の全ての悪は継承にあり
DIなんかもこの悪を退治するための刃だ
継承こそがソフトウェアをゴミ化し
変更をしにくくする悪魔👿なのだ
この事実を誰も指摘してないことは驚愕に値する
オブジェクト指向はオワコンとかいう人に限って何が悪なのか明示的に指摘できていない
2023/11/09(木) 18:07:38.95ID:Nh0igmG8
俺ははっきりと言う
継承こそが全ての間違いの始まりだと
2023/11/09(木) 18:09:54.14ID:Nh0igmG8
はるか昔「オブ脳」という概念があった
全てをオブジェクト指向で考えようというものだ
まずベースクラスを考えて〜
いやちょい待ち
その発想がまず間違っている
なんでベースクラスを最初から考えられると思った?
そんなことは神でもできない
そのようなオブ脳🧠こそゴミエンジニアへの入り口
幸いモダンな言語は継承を排除した
英断だと思う
2023/11/09(木) 18:13:43.54ID:Nh0igmG8
モダンな言語に置いては
インターフェース(トレイトとか制約とかプロトコルとか言語によって名前は違うが本質は同じ)
ありきで考える
言語のコアもインターフェース前提で設計されている
誰もベースクラスガーとか考えない
まずインターフェース考えよ、となる
そしてそのインターフェースを満たすための構造を考える
こうすることでデータがシンプルになり
頭を悩ますことが減る
これは業務ロジックでも同じ
インターフェースから考えよ
2023/11/09(木) 18:24:54.65ID:46vHv3J3
solidが面倒ってのもよくわからんな
2023/11/09(木) 18:28:01.90ID:GxZAPNre
このスレの半分は複オジのウソで出来ています。
用法・用量を守って正しくご使用下さい。
2023/11/09(木) 18:41:12.35ID:hICX9By2
「それは、継承から始まった。」っていう世代の資産がまだまだあるからね

自分用には、継承を、きれいに書けるようになりたい
C++から逃げるな
2023/11/09(木) 19:19:30.86ID:Jqv+rt1P
継承を綺麗に書けないバカの断末魔ww
2023/11/09(木) 19:22:43.00ID:Nh0igmG8
断末魔で結構
継承カッケーと思ってるエンジニアにどどいてくれ
2023/11/09(木) 19:23:51.89ID:Nh0igmG8
ソフトウェア業界における設計失敗2選
1.ヌルポ
2.継承
2023/11/09(木) 19:28:25.39ID:hICX9By2
ぬるぽは原始より居ただろ
飼い慣らせない人間が悪い(俺を含む
2023/11/09(木) 19:45:53.51ID:Nh0igmG8
ヌルポをなくしてOption型をデフォルトにすべきだった
コンパイラによるチェックを必須にすべきだったのよ
本当にこれだけのことで全てが変わった
2023/11/09(木) 20:06:24.95ID:T10okj+l
>>229
10年後に今の言語がどうけなされてるか言ってみ?
2023/11/09(木) 20:26:38.28ID:GhU74Yg7
result型とoption型
rustだけがこの2つをデフォルトに採用した
生き残るのはrustだけ
2023/11/09(木) 20:29:05.07ID:8vjWDFJE
>>229
Object型じゃ型情報少なすぎるだろ。
全てのクラスにNullObjectを付けてnullptrを禁止すればマシになる。

あとインターフェイスはもっと制約を減らすべき。
c++テンプレートだと、テンプレート引数に指定するクラスはテンプレートについて何も知らなくていいけど、インターフェイスもそのレベルでクラス・インスタンスから切り離されているべきだ。
2023/11/09(木) 20:57:20.45ID:PEX7rJUj
> Object型じゃ型情報少なすぎるだろ。
> 全てのクラスにNullObjectを付けてnullptrを禁止すればマシになる

Object型ではなくOption型
全ての各型にNullObjectを付ける必要はなく
任意のT型に対してOption<T>型を用いればよい
Option<T>型の値はSome(Tの値)のNone二択
T型自体は決してNull値やNone値をとなってはいけなくここが肝要
2023/11/09(木) 21:05:40.49ID:GhU74Yg7
ただジェネリクスやテンプレートがないCに追加するのは容易ではない
それほど罪深い仕様
235デフォルトの名無しさん
垢版 |
2023/11/09(木) 22:19:33.09ID:/jR/7UWQ
C++はまだ改良頑張ってるよ。
Cなんて、C11ぶり10年以上も改良してないとか酷すぎる。
2023/11/09(木) 22:33:55.61ID:U2tOOexp
C23ってどうなったんだっけか
もう少し先?
2023/11/09(木) 23:32:03.13ID:alU/Ei+B
SOLIDすら理解してないやつがRust推してるのか
呆れを通り越して悲しみを感じる
2023/11/09(木) 23:45:28.17ID:FlvKmVTx
SOLID理解してない人はクラス継承派だからアンチRust側
239デフォルトの名無しさん
垢版 |
2023/11/09(木) 23:51:27.12ID:/jR/7UWQ
>>236
新機能は決まって来年ISOから発行
2023/11/10(金) 00:37:21.40ID:YpxZ8uto
SOLIDもだが30年前から言われてるfavor composition over inheritanceの理由を理解してないのも呆れる
Rustの推し活する前にまずは基礎を学ぼうぜ
じゃないとどの言語使おうがゴミ量産するだけだぞ
2023/11/10(金) 02:22:01.34ID:bGIK0BM5
継承より合成とそうすべき理由を理解していないのはRustを叩いてる側だな
理解できないがためにいつまでもクラス継承に固執している
2023/11/10(金) 05:15:36.99ID:bzX4P4Us
俺はRustも継承も嫌いじゃないんだが
SOLIDは難しいから苦手だけど
2023/11/10(金) 09:27:08.62ID:YqCm/hRG
>>235
だからゴチャゴチャしてるんだ
2023/11/10(金) 09:40:56.20ID:aa+qv15K
ついつい、機能を全部くらい使って書こうとしちゃうんだよね
複数世代のパラダイムが入ってるから、まぜるな危険
2023/11/10(金) 10:45:22.93ID:TCW8Ak5o
C++はスマホやPCと同じだよ
昭和ジジイはすぐ「これが持つすべての機能をマスターしてすべて使いこなそう!」とか無意味な事を考え
そして挫折して「パソコンなんて憶えても意味はないっ!人間の尊厳はもっとシンプルなものにあるのだ!
パソコンをつかわずに人間らしい美しい生き方をしよう!」とかいいだす
スマホもPCも自分に必要な機能だけ憶えて使えばいいだけ
2023/11/10(金) 12:12:06.75ID:aa+qv15K
s/パソコン/スマホ/g
247デフォルトの名無しさん
垢版 |
2023/11/10(金) 13:40:46.42ID:E5/tDr6w
s/ジジイ/池沼/g
2023/11/10(金) 15:25:54.34ID:nVu+/fuO
かわいそうだな
継承が上手く書けないくらい頭おかしいと
249デフォルトの名無しさん
垢版 |
2023/11/10(金) 16:20:15.04ID:FL9N1XVu
c++はどっちかというとフロントボンネット開けっ放しでエンジン丸出しにしたテスラって感じだけどな
2023/11/10(金) 16:50:58.76ID:3Hc35zyY
【基礎解説】 メモリ利用を効率化! Modern C++のキモ「ムーブセマンティクス」
https://codezine.jp/article/detail/18574
251デフォルトの名無しさん
垢版 |
2023/11/10(金) 16:51:19.99ID:tLf5vZ8S
>>249
うまい例えのつもりなのか?
2023/11/10(金) 16:55:26.35ID:SY+Dup8/
テスラ車にエンジンは付いてないけどな
2023/11/10(金) 20:11:27.55ID:NL+wF9v3
エンジン無しでどうやって走るのかと
254デフォルトの名無しさん
垢版 |
2023/11/10(金) 20:21:08.16ID:VDRR6isO
モーター
255デフォルトの名無しさん
垢版 |
2023/11/10(金) 20:21:28.96ID:eRO+Ebqf
ガソリンエンジンか、エレクトリックエンジンかの違いだね
2023/11/10(金) 20:33:46.45ID:POaaExM9
NTにもJetエンジン付いてるね 2色ある
2023/11/10(金) 23:56:02.81ID:XAiSTtL/
>>248
継承を使わないほうが様々な問題を起こさず上手く書けるというのが本筋
例えばクラスと継承を広めたJavaの生みの親であるJames Goslingも>>102でJavaを作り直せるとしたら継承を除外したいと言っている
これはプログラミング言語界では共通認識であるためモダンな各言語ではクラスとその継承が除外されている
2023/11/11(土) 00:01:12.93ID:woXaVSWq
発言のコンテキストを理解しようとしないからアホな結論に達するんだよなあ
259デフォルトの名無しさん
垢版 |
2023/11/11(土) 00:03:12.63ID:uDCEJA+a
どうでもいいくだらない話題で延びるのは
上の方に消したいレスがあるとき
2023/11/11(土) 00:09:22.37ID:DbOeM/y4
消したいのはNimとSOLIDだろうな
2023/11/11(土) 00:53:13.03ID:Qqt+MGf6
>>258
伝言ゲームで多くの人を介した後の情報にしか接しようとしない人はコンテキストとかわかんないんだよ
2023/11/11(土) 00:54:21.99ID:CRU56Rbd
アスペルガーはそういうのわからないよ
2023/11/11(土) 01:19:19.80ID:PsmtBz7W
Go/Rust/Elixir の3大言語は継承ない。
でも継承のある、Ruby の米国年収は、3大言語を超えた!

Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7

多くの言語 : 6.5〜7

PHP : 5
Dart : 4.4

Ruby on Rails, AWS Solution Architect は13万ドルとか!

YouTube で有名な雑食系エンジニア・KENTA は、
初心者のキャリアパスは、Rails → Go だけと言ってる

文系のアホには全職種の中で唯一、Railsがチート職業!
2023/11/11(土) 07:03:04.53ID:6YPjiDGp
>>257
Rustはclassの機能をstruct,impl,traitにばらしているからな。

いっそのことimplも無くしてnimみたいなメソッド構文にしてほしいわ。
2023/11/11(土) 09:24:43.23ID:sUAuCE0K
>>264
他の型(=他のclass)と継承関係を持つ型がclass
RustやGoなどにclassの機能はない
266デフォルトの名無しさん
垢版 |
2023/11/11(土) 09:40:11.96ID:fuGMacjx
Rubyはないわ
ΚΕИТΑもないわ
267デフォルトの名無しさん
垢版 |
2023/11/11(土) 09:53:08.61ID:qMAq6GeL
継承を問題だと考えるならそう考える人が使わなきゃ良いだけで
言語仕様からなくす必要はなかったんだよ
他の機能との間に衝突が生じるというのなら無いのも分かるけど
ユーザの選択肢として継承はあるべきだった(発想が原理主義的なんだよね)
間口を狭めた結果ユーザー数は一向に増えない
ユーザー数が少なければユーザー数を増えないという負のスパイラルを抜け出せない
継承はあるものの手本を示すために標準ライブラリ(ってあるのかな?w)で
継承を使わないという方針を取るべきだったと思う
2023/11/11(土) 09:59:27.11ID:hCMtMwE+
>>263
Ruby使ってるサイトってまだあるの?
269あぼーん
垢版 |
NGNG
あぼーん
2023/11/11(土) 12:33:28.67ID:8FSI241M
>>269
サンキュー試してみる
2023/11/11(土) 17:06:47.94ID:rVvrsmp3
>>265
その解釈で言うなら>>180は間違いで、Nimにはクラス継承はあるってことでいいのか?

クラスにしろオブジェクトにしろトレイトにしろ、言語によって定義は微妙に違うのだから
特定の言語にだけ当てはまる特性を一般的なものとして語られると、議論に混乱がもたらされる
意図的にやっているのならば、それは藁人形論法と呼ばれる
2023/11/11(土) 17:17:53.08ID:rVvrsmp3
というか、型ごとにクラスであるか否かが決まるのか?
C++のclass C: public D {};はクラスだが、class C {};はクラスではないということになるのか?

動的型付け言語なら「値がクラスであるための条件」を定義することで何がクラスであるか定義する言語もあるが
(にしたって継承に依存しないだろうが)
静的型付け言語も含めた一般的な定義としては使えなさそうだ
2023/11/11(土) 17:56:27.75ID:8uzQmIun
カプセル化などはクラス以外にも存在しクラスの固有機能ではない
クラスをクラスたらしめている要素は継承
Javaの生みの親が>>102で「Javaを作り直すとしたらクラスを除外したい」と発言した意図も、
その後に付加説明しているように「クラスを除外」とは「継承を除外」の意味としている
継承を使わないならクラスである必要はない
それがクラスごと除外した各モダン言語の意図だろう
2023/11/11(土) 18:18:11.36ID:rtkZqGR9
>>269
友達にも教えてあげる
2023/11/11(土) 18:19:47.08ID:Mzt4UIrv
実装継承は菱形継承の問題もある
2023/11/11(土) 18:28:45.74ID:mn5CSVOj
菱形は無理になくてもいい
…といいつつ、あとになって菱形になっちゃいましたもありうるんだろうしな
まあ積極的には使わん 人智を超えるw
277デフォルトの名無しさん
垢版 |
2023/11/11(土) 19:45:32.60ID:2HJkyP1v
>>272
javascriptのprototypeに近いものをclassと思ってるんじゃないかな
2023/11/11(土) 20:07:27.33ID:Ig0qHM6i
JavaScriptもC++と同じく実装継承だからアウトだろ
2023/11/12(日) 00:15:34.52ID:EWqnRvOH
>>268
Githubとかはまだ使ってるみたいだけど明らかに減ってきてる感あるね
280デフォルトの名無しさん
垢版 |
2023/11/12(日) 00:36:55.65ID:E93HrjVI
>>267
ユーザー数と継承機能の有無は関係無いぞ
2023/11/12(日) 01:09:33.43ID:l8rhUXJt
>>280
>>89の通り大有りだ
2023/11/12(日) 01:59:57.74ID:daW7Mc+n
エンジニアなら作ったもので勝負しろ
283デフォルトの名無しさん
垢版 |
2023/11/12(日) 02:41:28.74ID:E93HrjVI
>>281
元になった言語があるかどうかじゃん。継承関係ねーじゃん。
284デフォルトの名無しさん
垢版 |
2023/11/12(日) 04:42:06.75ID:yMP0yjCE
>>281
全部ドマイナー
2023/11/12(日) 08:54:04.31ID:TrDrLjQN
モダン言語=関数型ベースにボクの考えた似非オブジェクト指向追加するのが流行ってるだけって感じで終わってる
2023/11/12(日) 09:00:27.54ID:EWqnRvOH
とは言っても俺らより遥かに頭いい人が考えた結果だからな
287デフォルトの名無しさん
垢版 |
2023/11/12(日) 09:53:11.34ID:l8rhUXJt
>>283
ユーザ数が少ないとユーザは増えないんだよ
おまいらはどマイナー言語が趣味だろうけども世間は違う
ユーザ数を増やすには既存の言語のユーザを分捕るのが手っ取り早い
継承関係がないってことは他言語のユーザが学習したり
他言語のライブラリを移植する際にハードルとなる
期せずして書かれた>>89は上は全部どマイナー言語
下の言語はC++もそうだけどユーザー数が上より遥かに多い
普及戦略には既存言語との互換性が最大の影響を与えるということを示している
俺様の理想のみを追求した原理主義では誰もついてこない
288デフォルトの名無しさん
垢版 |
2023/11/12(日) 09:57:24.71ID:l8rhUXJt
そういやRustで書かれたOSが実用化される話を読んだよ
軌道に乗ればRustを使う現場が増えるかもね
https://www.gizmodo.jp/2023/11/vivo-blueos.html
2023/11/12(日) 10:10:01.41ID:nDYms+cf
ロゴがVAIOっぽくて草ァ
290デフォルトの名無しさん
垢版 |
2023/11/12(日) 10:24:30.80ID:l8rhUXJt
本家は英語のページがない
https://blueos.vivo.com/
291デフォルトの名無しさん
垢版 |
2023/11/12(日) 11:24:34.62ID:yMP0yjCE
古い?
オブジェクト指向経験者のためのRust
https://qiita.com/nacika_ins/items/cf3782bd371da79def74
2023/11/12(日) 11:25:51.39ID:yMP0yjCE
どうでもいいけど
ドマイナーってCmのことだね
2023/11/12(日) 11:31:15.41ID:yMP0yjCE
>>288-290
Rust 推してんの中國人なんか?
そういえば github の Rust も中國語多い気がするな
Rust に関わるのもう辞めようかな
2023/11/12(日) 11:32:56.85ID:CMeM7fMz
情熱的な曲ってCmベース多いよ
ドマイナーはドマイナーじゃない(豆

# そのギャグどっかで使おうっと
2023/11/12(日) 11:34:44.94ID:CMeM7fMz
母数でかいし、まだまだ金回りいいしね cnをなめちゃだめだw
296デフォルトの名無しさん
垢版 |
2023/11/12(日) 11:39:24.18ID:l8rhUXJt
>>293
コンピュータに関しては中国はもうかなりの分野で日本を凌駕してる
日本人にはRustで書かれたOSを実用化することは
残念ながら金輪際できないだろうね
プライドを捨てる必要がありそうだ
297デフォルトの名無しさん
垢版 |
2023/11/12(日) 11:56:22.44ID:TjUPxwN+
>>257
偉い人の名前どうでもいいから具体的な話をしなさいよ
まあ無理だろうけどw
298デフォルトの名無しさん
垢版 |
2023/11/12(日) 12:50:23.87ID:gR0aPFqO
Rustが浸透する可能性としてAIライブラリの充実がカギのような気がする。
ライブラリが充実すればマイコンへのAI実装が加速するかもしれないんじゃないかな?
299デフォルトの名無しさん
垢版 |
2023/11/12(日) 13:00:10.14ID:E93HrjVI
>>287
javaにはinterfaceがあるしkotlinにもある。
objective-cにはprotocolがあるしswiftにもある。
うん、継承関係ねーな。
300デフォルトの名無しさん
垢版 |
2023/11/12(日) 13:24:47.44ID:yMP0yjCE
どうみても結果論で
Java に class も継承も無くて interface だけだったら
普及も糞も無かったはず
今の Rust より地位低かっただろう
301デフォルトの名無しさん
垢版 |
2023/11/12(日) 13:42:28.02ID:l8rhUXJt
JavaはC++と文法を似せたことが初期でのユーザ獲得に効いたんだよ
ある程度ユーザ数を獲得したら
ユーザ数の多さがユーザ数の増加につながる
正のスパイラルが始まった
Rustはこの先生きのこれるかな?
2023/11/12(日) 15:04:17.66ID:2kP6dQwH
GoogleのC++スタイルガイドでも継承より合成が適切とあり
特に実装の多重継承は強く非推奨とある
C++には継承があるから積極的に使おうなんて話はない
2023/11/12(日) 15:10:39.48ID:BtB8NmKb
インターフェースの多重実装は?
俺的にはアリだが
2023/11/12(日) 15:12:06.22ID:FXO/G2ox
アリというかそれは普通だろ
2023/11/12(日) 17:22:10.37ID:fcqBe9ye
たとえアンチでも、それは過去資産という位置づけでは
306デフォルトの名無しさん
垢版 |
2023/11/12(日) 19:58:58.70ID:UMFi1GHl
>>302
なぜ非推奨と言ってるの?
それはどうでもよくてGoogleと言いたい人なの?
2023/11/12(日) 20:22:32.82ID:EWqnRvOH
合成とか言うのか昔(2000年代前半頃)C++勉強してた頃には合成とかいう言葉なかった気がする
2023/11/12(日) 20:32:20.30ID:EyVQy8uj
compositionでしょ?
2023/11/12(日) 20:54:38.02ID:oa0+ZaPS
composition over inheritanceの文脈で
compositionを合成と訳すのば明らかに誤訳
2023/11/12(日) 21:10:07.68ID:uw3vvLb2
チンポジション推奨はわかるがひたすらデリゲード書く羽目になるのはだるい
文法的にサポートすべき
2023/11/12(日) 22:58:36.87ID:OO+koJ2d
>>307
継承が濫用されまくった反省から…っていう認識でいいのかな

継承とくらべてコンポジはフットプリントのコストがかかるけど(個人の感想です)、
そのくらいいいから、もっとわかりやすく書かないとって気運は確かに感じた
2023/11/12(日) 23:24:53.52ID:R2fa8NnH
James Goslingがクラスを無くすという話で警鐘を鳴らしたかったのはimplementation inheritanceのマイナス面
クラスがなくてもGoやRustにもimplementation inheritanceは存在していてそのマイナス面も全部ではないが継承してる
大事なのはプラス面とマイナス面の両面を把握した上で適宜使い分けるということ
2023/11/12(日) 23:29:45.60ID:p1tJuVOt
ちなみにRustは単純なクラス継承相当はないからコードの再利用がやりにくいという弱みがある
言語開発者もそれはかなり昔から認識してて機能追加をあれこれ検討してるが実現には至ってないためマクロを使ってコードを複製することが多い
2023/11/12(日) 23:33:34.84ID:kGZwhVgb
そのためのクレートでは(エアプ
2023/11/13(月) 00:43:02.47ID:AJp6/mRY
オブシコの綻び
継承無くしてオブシコ厨の大好きだった動物犬猫ニンゲンはどう表現するんですか
2023/11/13(月) 01:10:29.96ID:uWfytJAu
みんな違ってみんないい

ってか、おまえらが自分らと同じクラスなど、不遜にもほどがあるニャ
2023/11/13(月) 02:50:04.87ID:SmGbt3Rc
トレイトって仕組みわりと便利だけどな
PHPでもこの仕組み取り入れられててわりと重宝する
2023/11/13(月) 07:32:53.84ID:tgErF0Wq
基本はアダプタパターンで、本来はインターフェイスに代入するときに自動で適合してくれるのがいいのよ。

継承はクラスの親子関係でやらなきゃいけないから依存が強すぎるし、合成も実装とインターフェイスが切り離せないから密結合しすぎる。
2023/11/13(月) 08:45:58.99ID:nbPiM1Pw
リファクタリングするときに
Rustの「親切設計」が思考の邪魔をしてくる

どうにかならんか?
2023/11/13(月) 08:47:34.93ID:nbPiM1Pw
>>298
小池AIなら要らないぞ
2023/11/13(月) 08:49:35.17ID:nbPiM1Pw
>>310
>ひたすらデリゲーション

RustのTraitもこれなんだな
2023/11/13(月) 09:10:04.39ID:y0V48+mZ
>>318
それがcomだな
2023/11/13(月) 11:10:08.61ID:mdWiRvuj
>>319
どんなコード?
2023/11/13(月) 11:24:38.37ID:Ex26ICxs
>>322
継承無しのcomで、インターフェイスはコンパイル時に検証する感じがいい。
2023/11/13(月) 18:01:25.01ID:QMjdC+SV
新たなゲームエンジン「Arete Engine」発表
https://automaton-media.com/articles/newsjp/20231113-271841/

Rustベースとのこと
対応言語として、C++, C#ほか
2023/11/13(月) 19:27:32.88ID:eizg6Llc
なんか良さげじゃないか
これブレークしたらRust大発展場、ワンチャンありそう
327デフォルトの名無しさん
垢版 |
2023/11/13(月) 22:14:58.07ID:vy9Jjh7g
6.x以降サポートされてLinuxカーネルコンパイルできるんだね。知らんかった。
Cから置き換わるか?
まだ、メジャーバージョンアップはありそうな気がするが
2023/11/13(月) 22:30:02.31ID:VKpgHGcI
>>325
Unityの1000倍高速な部分を売りにして
Unityと違ってライセンス料金も低く広く無料カバーされ
Unityからの置き換えを狙ってるな
329デフォルトの名無しさん
垢版 |
2023/11/14(火) 00:08:42.55ID:elb2YwUG
>>327
今まで動いてたものを置き換わることは無いんじゃね。
新規ドライバとかは少しずつ対応されるかもね。
2023/11/14(火) 07:56:37.32ID:NHwXNMzQ
>>327
ドライバだけに使われることあっても置き換わることはありえない
2023/11/14(火) 08:35:51.95ID:DoXgoJ+r
置き換えになる前に、Cが強化される方に期待

やっぱり、クリティカル用のCってあったほうがいい
2023/11/14(火) 10:15:35.52ID:XadOWBX2
Cは進化を前提としたABIではないから
シンタックスシュガー的な強化しかできない
モダンな機能を求めるならCにトランスパイルする言語を使うことになる
333デフォルトの名無しさん
垢版 |
2023/11/14(火) 12:09:27.81ID:SRCspH78
fn main(){
println!("{}", 111111111*111111111);
println!("{}", 111111111u64*111111111u64);
}
1653732529
12345678987654321
警告もコンパイルエラーも出ないんだが
Rustってあほなんか?
2023/11/14(火) 13:48:38.27ID:CBni7tLT
C++の唯一の得意分野だったゲームまでRustに置き換わりそう
2023/11/14(火) 15:16:56.57ID:XhCdgplR
>>333
書いてるやつがアホなだけだろw
336デフォルトの名無しさん
垢版 |
2023/11/14(火) 16:14:21.75ID:SRCspH78
あほが間違ったのを指摘できるのがRustのメリットじゃなかったんか
2023/11/14(火) 16:25:51.54ID:B1tltd4R
程度による
2023/11/14(火) 16:28:06.37ID:Z/oEWqNB
>>333
そのままやってみたらエラー出た

 error: this arithmetic operation will overflow
  --> src/main.rs:2:18
  |
 2 | println!("{}", 111111111*111111111);
  | ^^^^^^^^^^^^^^^^^^^ attempt to compute `111111111_i32 * 111111111_i32`, which would overflow
  |
  = note: `#[deny(arithmetic_overflow)]` on by default

型を全く指定しないとi32型とみなされるようだ
エラーも丁寧に出るから初心者にもやさしいな
339デフォルトの名無しさん
垢版 |
2023/11/14(火) 18:34:48.03ID:hryaTN3D
>>330
言い切るのはいいが、その根拠を示さないとな。
2023/11/14(火) 18:48:47.69ID:do91JJab
ドライバ開発用の環境しかないから
知らんのか
341デフォルトの名無しさん
垢版 |
2023/11/14(火) 19:23:59.78ID:hryaTN3D
現状はそうだけど
それでは、未来永劫置き換わらないと言えないのでは?
sudoとか置き換わってるよ
342デフォルトの名無しさん
垢版 |
2023/11/14(火) 20:26:23.93ID:QUrDO32K
>>338
paiza.io があほだな
https://paiza.io/projects/EOdRe5MWBWrUr4Wtxd_Hiw
2023/11/14(火) 21:16:27.35ID:K+bD5cJ/
オーバーフローチェックがどういう時に働くか把握してないならThe Bookからやり直しましょう
344デフォルトの名無しさん
垢版 |
2023/11/14(火) 21:54:16.75ID:sG8x0H9f
>>341
置き換わってねーよw
345デフォルトの名無しさん
垢版 |
2023/11/14(火) 22:10:44.82ID:elb2YwUG
>>331
Cの機能強化はあきらめろ。
委員会の顔はベンダーのほうをみていてCを良くしようなんて思ってないから。
2023/11/14(火) 22:30:39.73ID:e1z7sXs7
>>341
未来永劫とか言い出すのはガキ
今から置き換えるメリットがない
せいぜいcの黒魔術マクロを排除できるぐらいだろ

カーネルサイズ大きくなりました
ちょっと遅くなりました
気持ちメモリ安全になった気がします
どうせこういう結果になる
347デフォルトの名無しさん
垢版 |
2023/11/14(火) 23:19:38.77ID:hryaTN3D
もちついて。
きき方が悪かったんだけどさ、LinuxカーネルをRust置き換えがありえないってのはなぜ?
これが聞きたかっただけですよ。
現状からの置き換えコストがかかるからという理由は置いといて、すでになにかあるの?
ケンカしたいんじゃないぞ

>>344 sudoは置き換わってないね
2023/11/14(火) 23:52:26.09ID:5RSSAN+/
LinuxのカーネルのソースコードをすべてRustに置き換えたときそれはLinuxと呼べるのだろうか
(テセウスのパラドックス)
2023/11/15(水) 00:44:03.25ID:aoVQj80M
Rustの道具立てが揃ってきたら
スケジューラとかネットワークスタックなど
コアな部分をRustで書き直そうぜとか
言い出す人は確実にでると思うけど
POSIX互換(Linux互換)カーネルを
Rustでゼロから書いた方が早いとかなるのかどうか
350デフォルトの名無しさん
垢版 |
2023/11/15(水) 00:55:26.57ID:ywV5GNL0
残念ながらレビューできる人がいない
351デフォルトの名無しさん
垢版 |
2023/11/15(水) 01:32:50.34ID:ywV5GNL0
>>347
>>>344 sudoは置き換わってないね
どのディストリビューションの何が置き換わった?
2023/11/15(水) 02:15:41.37ID:1U/J6vOE
口から出任せばっかりのRust宣教師
それに付き合う暇人
2023/11/15(水) 05:50:02.33ID:y8SxX7I2
カーネルをコンパイルできるか、ってのは、ひとつのベンチマークになるらしい(どっかで見た
C2Rustみたいな翻案ツールができたら、Linuxで試されるようには思う
354デフォルトの名無しさん
垢版 |
2023/11/15(水) 08:24:44.15ID:yd8/VhXj
Linusの気持ちは?
2023/11/15(水) 08:28:35.87ID:L9zXFwKt
「その頃」のLinusはカス嫌いだったんだろうから、アウトプットがよければどうでもいい、だろ
C++は百花繚乱感があって、後から考えたらあれは嫌われるわけだ
2023/11/15(水) 09:41:39.61ID:pZco8j8P
Linuxはもう枯れたと言える技術分野であって
エッジな人々が集まるところではないからな
エンタープライズ分野でたとえれば汎用機システムのメンテナンスしてるようなもの
357デフォルトの名無しさん
垢版 |
2023/11/15(水) 10:46:32.75ID:PvDO1mrU
>>351
wiki見るとAndroidは置き換わってるように書いてあるね。
アマゾンのAWSのLinux?とか

カーネルは6.6.1でfind -name '*.rs' で引っかけるとmallocとかCのライブラリ関係かな?ほかいろいろ
LLTM=1スイッチで置き換わるようだが。
すぐに全体が置き換わるわけではないだろうけど、コアで脆弱性なところから始まってる感じに思えるね。
358デフォルトの名無しさん
垢版 |
2023/11/15(水) 11:16:22.78ID:ywV5GNL0
最新の安定版カーネルは11月8日にリリースされたV. 6.6.1
$ curl 'https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.1.tar.xz' -o - | tar xJf -
$ find linux-6.6.1 -name *.rs | xargs cat | wc -l
19033
$ find linux-6.6.1 -name *.c -o -name *.h | xargs cat | wc -l
32601643

19033 / (19033 + 32601643) = 0.05834643034374886
Rustのソースは僅か0.058%
359デフォルトの名無しさん
垢版 |
2023/11/15(水) 11:18:06.72ID:ywV5GNL0
Rustがlinuxに取り込まれたのが昨年12月でV. 6.1
$ curl 'https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.1.tar.xz' -o - | tar xJf -
$ find linux-6.1 -name *.rs | xargs cat | wc -l
10359
$ find linux-6.1 -name *.c -o -name *.h | xargs cat | wc -l
31476383
この11ヶ月にCで書かれたのは32601643 - 31476383 = 1125260ステップ
その間にRustで書かれたソースは19033 - 10359 = 8674ステップ

増分を比較すると
8674 / 1125260 = 0.007708440715923431
Rustで書こうって人はCの0.8%未満ってことだ
C開発者が100人いたらRust開発者は1人もいないくらい

Linuxカーネルのプロジェクトで
Rustに存在感は全くない
少なくとも最初の11ヶ月間の事実
360デフォルトの名無しさん
垢版 |
2023/11/15(水) 11:20:10.48ID:ywV5GNL0
>>357
>すぐに全体が置き換わるわけではないだろうけど、コアで脆弱性なところから始まってる感じに思えるね。
全くそうは思えないのだが?
2023/11/15(水) 11:25:52.06ID:7t1hSBTd
このスレの半分は複オジのウソで出来ています。
用法・用量を守って正しくご使用下さい。
362デフォルトの名無しさん
垢版 |
2023/11/15(水) 11:35:20.23ID:PvDO1mrU
>>360
そういわれると、たしかにコードの置き換えとしては進んでない感じするな
まだ実験検討段階って感じか
2023/11/15(水) 12:21:37.48ID:no7PoE7H
>>356
世間知らず
クラウドインフラの技術が集結してる
2023/11/15(水) 12:27:36.50ID:teqcURmf
>>347
「コスト」が最大の理由だろ。
コードをRustに置き換えるだけでも膨大な手間と時間がかかる。

そもそもLinusとかのメンテナがRustを使いこなすのに何年費やすかね。そんな時間があったら現環境で機能強化するわな。
2023/11/15(水) 13:00:57.66ID:no7PoE7H
clangでのビルドにも慎重なのにrustで置き換えなんか進むわけない
そもそも書き換える行為に生産性がないのだから
せいぜい新しく書くところで部分的に使っていきましょうとなる
だからドライバでとなる
366デフォルトの名無しさん
垢版 |
2023/11/15(水) 13:19:00.88ID:ywV5GNL0
Rustの本家本元のfirefoxのソースコードでも
Debianの115.4.0esr-1~deb12u1を調べると以下の通りだよ
Rust(*.rs) 15%
JS(*.js) 35%
C++/C(*.cpp *.cxx *.c *.h) 50%
LinuxでRustがCを置き換えるなんてことは
>>341の言葉を借りて「未来永劫」ないとないと言い切ってやろう
2023/11/15(水) 14:07:32.56ID:g71OGRWz
>>366
単に物量の問題だろ
何百万行あると思ってるんだよ
368デフォルトの名無しさん
垢版 |
2023/11/15(水) 14:11:39.36ID:ywV5GNL0
>>367
ざっと2千500万行だね
2023/11/15(水) 14:24:01.47ID:kSRDfKJq
30年の積み重ねを置き換えるのに30年…
とまでは行かなくても5年で大部分書き換え
とかはならんだろう
2023/11/15(水) 14:51:21.03ID:6FugGo49
元々Cで造られたプロジェクトを一部だけRustに置き換えなんて面倒なだけでメリット無い
どうせRustでやるんだったら全部描き治しの方が良いに決まってる
Rustで置き換えと言うよりRustで新たにLinux互換プロジェクトが出来上がるだけ
2023/11/15(水) 14:56:46.34ID:/tSVEj7/
>>368
ひぇっ
372デフォルトの名無しさん
垢版 |
2023/11/15(水) 15:12:05.87ID:PvDO1mrU
Andoroidは置き換え比較的進んでるよ、事実だしこれは否定しようがない。

>>356が言うようにLinuxはメンテナーが少なくなってきてるという記事を読んだことがある。
Cを本当に使える人が減ってきてるんだってさ。AIとかに流出してるのかもね。
Linuxは長い実績で堅牢なんだろうけどまだ脆弱性を含んでいるのは間違いないし。
メンテナーのレベルが落ちると長年で培った堅牢性がゆらいでいくんじゃない?
時間かけてじわじわいくよ。
2023/11/15(水) 16:57:42.00ID:HubpN1/i
>>372
カーネルに新機能追加する人は給料貰ってフルタイムで
やってる人がいるけどコードレビューする人は
ボランティアベースで辛いという話だぞ
2023/11/15(水) 18:15:25.04ID:/tSVEj7/
>>372
富士通の社員がやってるんじゃないの?
2023/11/15(水) 18:31:31.15ID:c9l3XMad
GoogleがAndroid OSのRust化を進めている
2023/11/15(水) 19:02:01.02ID:V2KbO/sW
都合の悪い話されるとすぐそうやって話題変える
377デフォルトの名無しさん
垢版 |
2023/11/15(水) 21:13:40.04ID:ywV5GNL0
>>372,375
プログラマなんだから話は定量的にどうぞ
378デフォルトの名無しさん
垢版 |
2023/11/15(水) 21:36:10.57ID:2QF9cM/v
トランスレータ作ればいいのにね
2023/11/15(水) 21:48:13.78ID:FmmLZXFq
Linux Kernelコードの70%はドライバー
こいつらは基本的にデバイス屋さんが書いてる
2023/11/15(水) 23:20:59.98ID:9Wll1i1V
>>372
>Cを本当に使える人が減ってきてるんだってさ。

×Cを本当に使える人が減ってきてる
○Linuxをメンテしたい人が減ってきてる
大事な所を履き違えんなよ
2023/11/15(水) 23:25:45.67ID:/tSVEj7/
Linusは自分がいなくなっても継続できるようにしてると言ってたけどホントかいな
2023/11/16(木) 02:20:43.10ID:YE0GrThs
ああいうワンマン強引タイプの周辺はだいたい
イエスマン(しかも心中はそのうち取って代ってやると思ってる野心家)ばっかりになってて
本人は継続できるようなつもりになってるけどいざ倒れると急におかしな方向いったり弱体化したりしがち
2023/11/16(木) 07:32:35.40ID:nbKqUUuT
>>381
もう本人コード書いてないし
2023/11/16(木) 09:47:18.38ID:wNLmB51s
カーネルの話にAndroidを出してくる奴
385デフォルトの名無しさん
垢版 |
2023/11/16(木) 10:24:39.57ID:csSKyxVc
>>383
リーナス氏はカーネルを書いただけの人で、Linuxはgnuの周辺が無ければ成立しないんだよなぁ
2023/11/16(木) 10:36:18.81ID:c22vQqL3
ニュース記事を斜め読みしただけで
プログラム書いてなさそう人が参入してるな
2023/11/16(木) 10:58:48.69ID:oAo4ftxR
複おじのことやん
2023/11/16(木) 11:04:24.85ID:JqwSNCs1
>>384
GoogleがAndroid用にforkしたLinuxカーネルへ加えた変更がアップストリームにも適用されることが多々あるから別におかしい話じゃないぞ

Androidと関係なくてもGoogle自体がLinuxカーネルを進化させてるメジャープレイヤーでもある
2023/11/16(木) 11:05:25.04ID:wNLmB51s
rustサポートって何してるのか気になってコミットログ読んでみたけどこんなもんか
2023/11/16(木) 11:15:44.45ID:cWrKpE+4
>>385
なおさら駄目じゃね?
GNUツールのRust移行とか不可能だろ。
391デフォルトの名無しさん
垢版 |
2023/11/16(木) 11:20:28.08ID:QXdh7keC
>>376
ほんそれ

>>382
すばらしい洞察
2023/11/16(木) 11:23:05.99ID:5W7eUxhr
既存の枯れた部分を移行するメリットは低くそこに興味を持っているのはおまえらだけ
全く新たに作られていってるシステムなどに使われていく言語が世間での焦点
2023/11/16(木) 11:36:03.27ID:oAo4ftxR
>>392
なるほどはっきりしたな
RustはC/C++の置き換えには適さない

以上!!!!本スレは終了!!!!
2023/11/16(木) 11:40:52.68ID:5W7eUxhr
既存の枯れた安定してるものを他言語で置き換えなんてムダなことをするバカはいない
>>5のような新たなシステムがどの言語で書かれているかが全て
2023/11/16(木) 11:44:41.17ID:c22vQqL3
>>388
AndroidのRust適用はミドルウェアとか
実行ファイルの話
396デフォルトの名無しさん
垢版 |
2023/11/16(木) 11:52:51.95ID:nxuWB9A/
>>394
新規のシステムもRustよりC++/Cの方が多いでしょうよ
Rustはユーザ数が少な過ぎる
2023/11/16(木) 11:59:45.29ID:oAo4ftxR
>CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、

>>394「C言語製の枯れて安定してるnginxをわざわざRustで置き換えるCloudflareはムダなことをするバカ」
2023/11/16(木) 12:24:14.05ID:AwpJQf7l
>>397
Pingoraの話じゃないの?
2023/11/16(木) 12:31:03.07ID:1vSd70Wx
>>397
記事読めてる?
nginxでは機能が不十分で様々な検討をして新たに作ることになったとある
そしてRust製のPingoraを開発して以下の性能を出したと記事に書かれている

>Pingoraはすでに同社のCDNに採用され、毎日1兆回以上のリクエストを処理し、性能向上や数多くの新機能の提供を実現しつつ、従来と比較してCPUとメモリリソースの消費はいずれも3分の1程度に収まっているとのこと。
2023/11/16(木) 12:42:36.36ID:c22vQqL3
>>397
nginxでは性能の限界があってRustで新規に
作ったと記事の読み飛ばしたところに
書きてなかった?
401デフォルトの名無しさん
垢版 |
2023/11/16(木) 12:47:30.32ID:QXdh7keC
APIがRustになってないとRust採用する意味が無い
2023/11/16(木) 12:53:18.79ID:1vSd70Wx
>>401
今回の話の場合APIに相当するものはHTTPだと思いますが
APIがRustになっていないと、とは何?
2023/11/16(木) 12:53:44.43ID:oAo4ftxR
nginxの代わりに使えるものを「新しく」作ったのだからPingoraはnginxの「置き換え」ではないと言いたいのか??
じゃあ>>392の言う「移行」>>394の言う「置き換え」って厳密には何のことを指すんだ??
2023/11/16(木) 13:04:58.32ID:1vSd70Wx
たとえ後発のより良い新言語(ex. Rust)であっても
システムそのままで新言語への置き換えはコスト的に意味がなく
新たなシステムへ置き換える時に新言語の採用は大いに意味があるという実例だろう
405デフォルトの名無しさん
垢版 |
2023/11/16(木) 13:27:53.62ID:6XhGio1W
403 は言葉使いからして感情でしか物事をみれない
2023/11/16(木) 13:37:39.61ID:GrubNHks
>>383
一応メールの中でコードを書いてるって言ってたけどね
2023/11/16(木) 13:40:47.78ID:GrubNHks
>>397
そりゃCloudflareレベルの規模ならメリットはあるだろう
メリットがあるなら書き直すし
メリットがないなら書き直さない
それだけ
2023/11/16(木) 14:28:52.70ID:U5aa+aRa
>>394
置き換えがしたいという意志があるとは誰も言ってない
そもそも修正と新規作成をどうしても区別したいという意志がない

ただ、ミクロな意志と無関係なマクロな現象として
置き換えが自然発生するかも知れないという謎の空気はある
2023/11/16(木) 15:09:24.13ID:IFD1cI+g
early adoptersやearly majorityになるのは
Linuxのperipheralとしてビジネスをしている企業ではなく
Linuxをperipheralとしたビジネスをしている企業

前者の大半はゲームのルールを他者に支配されている立場であり裁量の余地が小さいためマインドセットが保守的
純粋なコストベネフィット以外に低いリスク選好度からくる心理的抵抗が強いためearly adoptersやearly majorityにはなりにくい
複オジがいつも事例であげてるAndroid、Cloudflare、AWSなどが全て後者なのは偶然ではなく構造上の特性から生じる必然
新しい技術というのはゲームのルールを自らコントロールできるこちら側の企業によって牽引される
2023/11/16(木) 15:14:00.47ID:IFD1cI+g
つまり何が言いたかったかというと
Linux KernelにおけるRustの採用率というのは
技術採用ライフサイクルの観点で見た場合
late majorityやluggardsのRust採用率の目安だということ
411デフォルトの名無しさん
垢版 |
2023/11/16(木) 15:14:30.69ID:QXdh7keC
adaptor だと思ってたけど adopter なんか
2023/11/16(木) 15:24:27.23ID:JRjQuxlT
>>410
× luggards
○ laggards
2023/11/16(木) 15:29:19.80ID:FRf+5dUd
early adopter とは
https://dictionary.goo.ne.jp/word/en/early+adopter/
アーリーアダプター,(新製品の)初期受容者

adopter とは
https://dictionary.goo.ne.jp/word/en/adopter/
1 採用[採択]者
2 養い親,里親
2023/11/16(木) 16:41:51.84ID:cWrKpE+4
>>403
コードの移行、コードの置き換え。

>397は>370の例だろ。
2023/11/16(木) 17:06:23.69ID:DQsCMcKm
それぞれのケースで大きく異なるから区別が必要

(1) 新規に作るもの
CloudflareやAWSの例やゲームの新フレームワークやLinuxの新たなデバドラ等すべてこれ
これらは100% Rustが有利

(2) 既存のソフトの言語のみの置き換え
(2)-a. スクリプト言語などからの言語の置き換え
CPUやメモリの使用リソース削減が目的ならばRust化は有利

(2)-b. C/C++からの言語の置き換え
セキュリティやメモリ管理の不安定で困ってる時にRust化が有利

一般的に可能なら(2)の単なる言語間の移植よりも
設計を見直して(1)の新規作成とした方が好ましい

>>399でCloudflareがCPUメモリリソース消費1/3にできた例も
単なるC→Rustへの(2)移植ではなく
新たな設計での(1)新規作成だからであろう
2023/11/16(木) 17:13:48.99ID:GrubNHks
C/C++から書き直すにしても設計をそのまま使えないことが多いから
かなり大変なんだよな
とくに参照やポインタだらけで全部ヒープアロケーションしまくってる場合とか
C++でもその辺りポインタを多用せずスマポやスタック割り当てをうまく使って書いてあるソフトは移植しやすい
2023/11/16(木) 17:41:46.11ID:cVeFFprT
どの言語からでもいいけどRustに移行するのにプログラム設計もそのまま引き継いだ自動コンバージョン的な移行を想定するほうがおかしいやろ
そんなんありえんよ
2023/11/16(木) 17:41:52.36ID:nV/QBQ73
C/C++にRust世代の知見が流入してくることに賭けて、待ってる勢はあるはず 自分はそう
それもあるけど、いまあるRustから前線で知見を得ようという勢もあるはず
2023/11/16(木) 17:47:05.98ID:nV/QBQ73
>>417
C/C++もclangがいったん咀嚼してLLVMにしてる
Rustにトランスパイルするのは非現実的とまではいえないはず
うまくいけば、Linuxは一夜にしてpure Rustになる
Rust派の誰かがやるんじゃないかと思ってる
2023/11/16(木) 17:51:33.13ID:xS+g93Tz
>>417

いつもの藁人形論法

AWSが最初からRustで構築されたとでも思ってんのかね
2023/11/16(木) 17:55:14.82ID:GrubNHks
全てスタック変数で割り当てる
コピー時に適切なムーブをする
ヒープが必要なところはスマポを使う

これをちゃんとやればC++をrustに置き換えることは可能
しかしこれをやってるC++プロジェクトはない
2023/11/16(木) 17:56:48.64ID:GrubNHks
>>420
そいつの意見を真面目に考えてて草
2023/11/16(木) 18:05:24.97ID:nV/QBQ73
ま、雑談だから
ストローマンは愚痴

一頃のC++はなんでもかんでもヒープに置きすぎだったよね
まあ、お膝元のスタックがそんなでかくない石・スレッドも少なくないけど
2023/11/16(木) 18:12:37.43ID:C/58Cd2m
>>419
わざわざLLVM IRまで降りて戻ってこなくてもc2rustとか最低限のトランスパイラはいくつかあるぞ
出力結果は作業の開始地点として使うものでそのままプロダクションに使うものじゃない
2023/11/16(木) 18:27:30.00ID:nV/QBQ73
c2rustの出力をあんまり手直しばっかりしなくていいように、
入力のCにアノテーションを加えていこう、みたいな動きは必ず出ると思うんだよね
良くも悪くもCはマクロ世界だから、当面関わってない人には影響ゼロなようにも書けるはず

そのアノテーションが、そのまま、safe C の礎になればいいんだよ
2023/11/16(木) 18:28:02.28ID:jjq/yUIi
ああ、ストローマンは自動コンバージョンに反応したのか
“的な”の意味が通じなかったんだな
427デフォルトの名無しさん
垢版 |
2023/11/16(木) 18:39:53.99ID:RH2XyDS1
>>397
記事を読めてないバカを晒すスレはここですか?
2023/11/16(木) 18:40:10.28ID:U5aa+aRa
LinuxはスクリプトとCの二刀流だ
PythonとCの関係はRustとCの関係にも使える

その知見が流入してこない原因はスクリプト不要論だろう
2023/11/16(木) 20:51:00.53ID:AwpJQf7l
>>423
だがスマートポインタはスタックに置いて参照渡ししたい。
2023/11/16(木) 23:13:12.09ID:BwM227bO
>>425
Cの安全性を高める目的ならトランスパイラではなく静的コード解析ツール用にアノテーションするほうが遥かに簡単
C++と同じようにCにもそういう動きが出てくる可能性はあると思う

ただ安全性を高めようとすればするほど既存のコードとはかけ離れていくからMISRAのように標準化され半強制的なものにならない限り広く受け入れられる気がしない

イメージ的には↓こういうやつ
浸透するとしても10年以上先だろうね
https://www.youtube.com/watch?v=Pk2RAl8kG1o
431デフォルトの名無しさん
垢版 |
2023/11/16(木) 23:35:15.35ID:nxuWB9A/
そこで奥さんChat-GPTですよ!
432デフォルトの名無しさん
垢版 |
2023/11/16(木) 23:43:26.30ID:4If2hIRf
>>430
Cの標準では今後も無い。
委員会がやる気ない。
2023/11/17(金) 00:28:52.66ID:XzLpc9VL
Cは他のお笑い言語とは違って俺が最初に手に取ったK&R第二版から変える必要無かったからな
2023/11/17(金) 00:34:46.03ID:UIKq6eA7
>>433
さすがにK&Rからは変わってる
(ギャグだったならスマン)
2023/11/17(金) 00:41:31.13ID:ofj+MCpV
C++もlifetime annotationどうするか決まってないんだな
一番めんどくさくてコードも汚くなる部分だからannotation周りの評価はlifetime+borrow checkerの出来次第だと思ってる
https://discourse.llvm.org/t/rfc-lifetime-annotations-for-c/61377
2023/11/17(金) 01:27:31.74ID:lIdOKj8F
やる気が暴走したPerlとかC++とかを過大評価するのは暑苦しい
やる気以外のルールはないのか
2023/11/17(金) 05:30:59.53ID:30xMjeDv
あー、Perlも好きだわーw
ドザなので、シェルスクリプト代わりに、中途半端な処理は全部お願いしてる
2023/11/17(金) 10:14:27.25ID:vs9w0Abf
>>436
無能な働き者がやる気を出すとね……
2023/11/17(金) 21:12:15.87ID:+5SAg77h
NGINXモジュールがRustで書けるようになった
https://www.infoq.com/jp/news/2023/11/nginx-modules-rust/
440デフォルトの名無しさん
垢版 |
2023/11/17(金) 22:09:06.15ID:HoPy7y+y
>>421
>コピー時に適切なムーブをする
これが恣意的すぎて自動的に対応できんわな。
2023/11/17(金) 23:36:50.31ID:FMmcnveO
>>436
その2言語は増築工事でダメになった
2023/11/17(金) 23:58:55.97ID:8WHR7HZ4
継承でダメになった、と言った?
ほぼそれに近い?
2023/11/18(土) 11:21:22.60ID:ZyDTP43o
立場によってはそう
継承に親でも殺されたんかって人なら、そう言うだろう

でもそれ、自分の推しの言語に継承かなにかが後出し採用されたら、ブーメランだぞw
2023/11/18(土) 11:36:22.09ID:XY0Izw3X
クラス継承(実装継承)は悪でプログラミング言語界が一致してるから後から継承の採用はないだろうな
過去のしがらみで継承を採用したSwiftやKotlinですら継承を使わずに済む機構などを採り入れている
445デフォルトの名無しさん
垢版 |
2023/11/18(土) 11:44:56.68ID:GRi2RJZB
その結果>>89が示す通りマイナー言語に留まっているじゃん?
ユーザ数を増やすことを優先しないと
数多あるマイナー言語の一つとして忘れ去られる
446デフォルトの名無しさん
垢版 |
2023/11/18(土) 11:52:32.21ID:GRi2RJZB
言語のユーザ数の増加要因として最大なのはユーザー数だよ
447デフォルトの名無しさん
垢版 |
2023/11/18(土) 11:58:51.53ID:63IqxYSZ
>>446
頭沸いてんのかおまえ、進次郎かよw
2023/11/18(土) 12:08:09.00ID:Q9aHTM00
それがわからんようでは、いっしょに旨い酒は呑めんなあw

わかれよーわかりきってんだろ再帰だろ
449デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:11:13.74ID:GRi2RJZB
>>447
微分積分はまだなのかな?
450デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:11:30.53ID:63IqxYSZ
ユーザー数の多いアプリやOSの開発言語が言語利用者数に影響してるんだろうがいw
2023/11/18(土) 12:22:30.52ID:moXb3tPD
方法が違うだけでRustやGoにも実装継承が採用されてる
SwiftやKotlinは過去のしがらみで実装継承を採用してるわけではない
目的に対して有益だから採用してるだけ

実装継承の乱用するやつも悪だと決めつけるやつも中身を理解してないという意味では同類だから
どの言語を使っていようがどちらも採用してはいけない
452デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:22:47.39ID:GRi2RJZB
>>450
dN/dt = cN
右辺は一次関数とは限らんだろうけども
新たに学ぶ言語を選択するときには
人は多くの人が使っている言語を選択する傾向にある
453デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:27:30.14ID:63IqxYSZ
>>452
そんなん仕事で開発する人には通用しないよw
開発対象がどのハードのどのOSで動かすかによって決まるからな
454デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:29:23.25ID:63IqxYSZ
しかし、パラメータの意味も説明も無くいきなり数式出す奴ってなんなの?
2023/11/18(土) 12:31:03.67ID:jiGs7deg
>>451
それは理解していなさすぎる
実装継承とはある型(クラス)に対して定義したメソッドが別の型(クラス)に対して引き継がれることを指す
Rustに実装継承はない
2023/11/18(土) 12:35:26.40ID:Q9aHTM00
継承はダメおじさん「継承はダメ」
IUnk教徒俺「うんこ->Release();」
457デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:38:02.55ID:GRi2RJZB
>>453
「仕事で開発する人」ってのは仕事の多さに左右される
新規の言語はまずユーザー数を増やさないと
この先生きのこれない
458デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:38:26.91ID:63IqxYSZ
多段継承は何だかなぁだけど
単純な基礎クラスに応用クラス乗せるくらいは許して欲しいなぁ
459デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:39:14.68ID:GRi2RJZB
>>454
Nってのは数
tは時間
cは定数
どれもよく使うから端折ったけども?
460デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:40:04.55ID:63IqxYSZ
>>457
だからユーザー数なんて増えないんだよw
その言語でしか開発出来ないスマホとかでも作らないとなw
461デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:41:04.57ID:63IqxYSZ
>>459
dは何よ?
2023/11/18(土) 12:42:08.12ID:Q9aHTM00
ダァン! ってやつだ

俺が考えた
463デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:45:04.02ID:GRi2RJZB
>>461
>>449
2023/11/18(土) 12:49:36.30ID:zRkY2vB2
ネットワーク外部性 - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E5%A4%96%E9%83%A8%E6%80%A7
465デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:49:49.32ID:63IqxYSZ
>>463
ならば進次郎にも分かる説明でないとダメだろ
466デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:54:44.31ID:GRi2RJZB
>>465
>>446に分かりやすく書いておる
467デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:55:17.22ID:63IqxYSZ
>>466
だからそれは否定されたろ
468デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:56:30.92ID:GRi2RJZB
>>467
誰に?
2023/11/18(土) 12:56:35.04ID:zRkY2vB2
仕事で使う技術選定の最大要因ってなんだかんだで利用者数の多さ(≒資料の多さ)になりがち
470デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:57:39.99ID:63IqxYSZ
>>468
俺にw
471デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:59:42.63ID:GRi2RJZB
>>470
そりゃお前が読めてないだけだよ
>>452の最後の1行も平易に同じことを書いているので読んでね
2023/11/18(土) 13:00:29.94ID:9pS/cQYo
>>461
ワロタ
473デフォルトの名無しさん
垢版 |
2023/11/18(土) 13:03:35.26ID:63IqxYSZ
C++の資料なんか腐るほどあるが
今やC#かCしか生き残って無いだろw
474デフォルトの名無しさん
垢版 |
2023/11/18(土) 13:05:11.55ID:63IqxYSZ
Rustなんて使わなきや開発出来ないアプリなんか無いし
使う事は未来永劫無いだろうね
2023/11/18(土) 13:06:24.64ID:9pS/cQYo
書けない人がいくら叫んでも無駄
2023/11/18(土) 13:09:08.70ID:9pS/cQYo
Rust書けないからって嫉妬してるのはわかるけどそこまで逆恨みすることはないじゃん?
2023/11/18(土) 13:09:45.32ID:9pS/cQYo
それともここで煽られたから「Rustを書いてる人」が嫌いなのかな?
478デフォルトの名無しさん
垢版 |
2023/11/18(土) 13:42:18.00ID:GRi2RJZB
>>473
Debian bookwormのfirefox-esrのソースのうちcとc++を比較すると
ヘッダは区別がつかないので除外して
$ apt source firefox-esr
$ find firefox-esr-115.4.0esr -name *.cpp -o -name *.cxx | xargs cat | wc -l
4766467
$ find firefox-esr-115.4.0esr -name *.c | xargs cat | wc -l
3598263
4766467 / 3598263 = 1.3... C++がCの1.3倍程度
C++はヘッダのみで実装してしまうことも多々あるから1.3倍では済まないだろう
C++の方が多いのだよ
Rustは>>366に書いた通り全体の15%程度(総本山なのに)
479デフォルトの名無しさん
垢版 |
2023/11/18(土) 14:46:30.05ID:BPYzRrhj
それ過去に開発された言語が混ざってるよね?
480デフォルトの名無しさん
垢版 |
2023/11/18(土) 15:41:41.81ID:aHGnQ9F/
もうすでに15%もあるといった考え方は?現状の%を並べても5年どうなるかわからないんだし。
その調べかたからわかるのことは限定的だな。
その割合が年々減っていってるのならRustはだめだろうし。
2023/11/18(土) 16:00:47.99ID:Q+v8Z7oO
言語の変更は多くの場合システム改新などコードを書き換えるタイミングで行なわれる
また言語の変更をするか否かに関係なくモノリシックなシステムはシステム改新に不利でその点ではマイクロサービスなど多数で構成されるシステムが有利
OSカーネルやWebブラウザも同様でモノリシックに作られている場合は言語の変更に最も適していない
そのような最も適していない極端な特殊例を持ち出して数え上げることは無意味で無駄な行為
482デフォルトの名無しさん
垢版 |
2023/11/18(土) 17:15:55.14ID:rXJKESWN
一眼観て微分方程式だと判らないレベルの人は黙っていて欲しい
2023/11/18(土) 19:58:38.30ID:HxfHsjDi
それはわかったけど、英語そんな読めない俺、なんも言えず

教えてもらったRustの再評価? 論文、積ん読になってるんだよねえ
面白そうだったから忘れたことはないけど
484デフォルトの名無しさん
垢版 |
2023/11/18(土) 21:45:39.76ID:0cWoHYmK
>>444
一致してない
継承理解できずにアホな使い方する一部の人が勝手に騒いでるだけ
採り入れないとおまえみたいなのが無根拠に騒ぐからとりあえず採り入れてるだけ
2023/11/18(土) 22:49:22.88ID:zlAHanIg
モダンなプログラミング言語のうち、
過去のしがらみのある2つの言語を除いて、
すべての言語が継承をクラスごと排除して採用していないもんな
486デフォルトの名無しさん
垢版 |
2023/11/18(土) 22:53:24.96ID:GRi2RJZB
>>485
おかげで全てマイナー言語のままじゃん?
2023/11/18(土) 23:39:14.05ID:Wj/Y5gpw
切捨ては極端すぎる。まるで都合の悪いことは無かったことにする左翼の思想
継承はあった方が便利なんだよ
元々オブシコは継承機能が売りだったのに手のひら返してやっぱ合成でいいって、それC言語でもできることだし…
先祖返り…デグレード…設計ミスってことぉ?
2023/11/18(土) 23:51:56.62ID:WzRKAbU/
2010年以降にできた言語で広く使われてるのは
Kotlin, Swift, Dart, TypeScriptらのクラス継承のある言語
2023/11/19(日) 00:04:07.84ID:QnG3yXze
型のgeneralization/specializationはどの言語でも必須と言っていい機能でspecializeされた型でgeneralな型の実装を再利用できるというのは物凄く直感的でわかりやすく便利な機能だから完全に無くせば利便性を損なうだけ

Rustでも形を変えて実装継承が存在するのはそのため
2023/11/19(日) 04:16:47.88ID:RVJYDbf6
>>489
実装継承は問題点が多すぎるからRustでは採用されていない
実装継承とはある型で定義されたメソッド実装がその型を継承する別の型にそのまま継承されること
Rustは実装継承をちゃんと排除している
2023/11/19(日) 10:00:16.37ID:tWthAkiw
>>490
>実装継承とはある型で定義されたメソッド実装がその型を継承する別の型にそのまま継承されること
さすが進次郎
トートロジーが得意だな
2023/11/19(日) 10:14:54.62ID:xroD2KWj
継承が必須という人は>191 >195 >204に反論してくれんかね?

shared_ptr<function<T>>で、Tをコンセプトに拡張したものがイメージかね。コンセプトに合致する「インスタンス」なら何でも変数に代入できるようにできれば、わざわざ継承で「インスタンス」の代入可能性を確保する必要は無い。
493デフォルトの名無しさん
垢版 |
2023/11/19(日) 10:29:52.82ID:nljhlBVQ
>>492
継承で定義のコードを書く手間が減るだけでメリットになっている
デメリットうんぬんは使い方知らないだけ
使う場所間違えてる
以上
論破
2023/11/19(日) 11:09:12.91ID:xroD2KWj
>>493
ずいぶん貧弱な論破だなぁ。

>継承で定義のコードを書く手間が減る
そのために「事前にクラス継承関係をクラスに追加する」という余計な重たい依存関係を埋め込む必要があり、後々のインターフェイス設計に多大なコストが発生する。
依存関係低減のためにAdaptorを使うことになるなら、最初からインターフェイスにAdaptorみたいな機能があった方が良い。

>デメリットうんぬんは使い方知らないだけ使う場所間違えてる

あなたの感想ですか?
2023/11/19(日) 11:18:00.14ID:a8wUH91D
>>492
複オジはデメリットを真に理解してないから
どれレスでも的外れな内容になっている

>shared_ptr<function<T>>で、Tをコンセプトに拡張したものがイメージかね。コンセプトに合致する「インスタンス」なら何でも変数に代入できるようにできれば、わざわざ継承で「インスタンス」の代入可能性を確保する必要は無い。
継承の前にポリモーフィズムから勉強した方がよさそうだね
メリットとデメリットを理解してないというのは同じようだけど
2023/11/19(日) 11:25:06.19ID:xroD2KWj
>>495
おいおい、まともな反論できなくなったらレッテル張りかよ。

>ポリモーフィズム
だからポリモーフィズムにサブタイピングは依存関係重すぎると言っているんだよ。
std::funcionを理解できていますか?
2023/11/19(日) 11:34:23.07ID:h6lf9AUt
記述量が多くなる=悪は誰にでも判るだろう
RADが流行ったのも理解できるだろう
プログラマはいつも何を重視しているのか、それは時間だ
Rustでコンパイル通す時間よりC++でやった方が早かろう
C++でGUIアプリ作るよりC#でやった方が早かろう
さてRustでGUIアプリ作るには、一体どれだけ時間が掛かるのか
話は終わりだ
498デフォルトの名無しさん
垢版 |
2023/11/19(日) 11:39:08.94ID:JXkS/kRe
>>492
必須とは考えてないから反論はしない

ユーザが選択できれば良いんだよ
言語としては装備していて
害悪があると考えるならそう考えるユーザが使わなければ良い
他言語のライブラリを移植する際に
使った方が再設計の手間が掛からないというなら使えば良い
マイナー言語のまま終わるぞ
2023/11/19(日) 11:58:31.45ID:o0KxE9xi
数年でRustみたいな思想はAIが肩代わりしてくれると思うよ
今からRustで数年苦労するよりは
他の事しつつ待ってた方がもしかして有意義なんじゃないかな笑
500デフォルトの名無しさん
垢版 |
2023/11/19(日) 12:13:25.84ID:nljhlBVQ
>>494
その指摘のような状況で使わなければいいだけ
全てのケースでその指摘が当てはまるわけではない
不適切な使用をしてる例を自分自身で示しているが、それに気づいていない
言うに事欠いて私の感想?
何回論破されるのあなた?
501デフォルトの名無しさん
垢版 |
2023/11/19(日) 12:32:27.75ID:/G2k3fWt
>>497
別にRust推す訳じゃないが
その理屈はRustで簡単にGUIが描けるツールが出たら解消してしまうがな
2023/11/19(日) 12:35:10.88ID:Tj6ZCNuo
pythonのpysimpleguiでサクッと作って時間の掛かる処理だけpyo3でコールするか
2023/11/19(日) 13:27:48.93ID:h6lf9AUt
>>501
Rustが世に出て13年みたいだが解消する見込みなし
時間の浪費は罪に等しいと考える現実的なプログラマであれば他の手段を見つけてるだろう
何もかも遅すぎるのろまに構う価値はない
2023/11/19(日) 13:57:40.85ID:Oy1huhHi
>>497
C#でGUIとか今時書かんて
505デフォルトの名無しさん
垢版 |
2023/11/19(日) 14:01:24.71ID:nljhlBVQ
>>504
今時はguiには何使うもの?
2023/11/19(日) 14:07:51.59ID:Oy1huhHi
>>505
electronかtauriをガワにして中身はHTML+TypeScript
今のGUIアプリは大抵これ

ちなみに新しいteamsではガワはネイティブ実装で
中身はWebView2というコンポーネントを使っているらしい
作り方はHTML+TypeScriptなのは変わらない
WebView2はまだ簡単には使えないがおそらくこいつが主流になるはず

MS好きならちゃんとキャッチアップくらいしとこうぜ?
2023/11/19(日) 14:10:24.62ID:Oy1huhHi
当たり前だが別にそれにしろとは言わん
シンプルな業務系の画面なら何でも良いし作りやすい方が良い
RustのGUIは今のところ有力なものはないのは事実
2023/11/19(日) 14:21:03.03ID:BvvFFAMC
「マウス」のイベントハンドラを継承するメリットが誰にでもわかる
という前提が怪しいんだよ
マウスだぞマウス
2023/11/19(日) 14:38:54.75ID:iOyghJL5
え?! RustってGUIライブラリがないの??
510デフォルトの名無しさん
垢版 |
2023/11/19(日) 14:57:36.66ID:/G2k3fWt
Tauriは糞
2023/11/19(日) 14:57:55.82ID:y0Jh7vt2
>>509
RustのGUIも色々揃っている
GUIは用途によって多種多様な世界だからeguiのようなリフレッシュフレームベースのGUIクレートもある

そういう用途でなければRust関係なく一般的な話として今は各プログラミング言語でGUI作るのは極少数派になっている
つまりHTML/CSS/JavaScriptベースで作られるようになっていて使用言語を強いて言えばJS/TSの時代
2023/11/19(日) 15:15:35.10ID:xroD2KWj
>>500
ならせめて「当てはまるわけではない」ケースを指摘しないと反論にならん。
「不適切な使用をしてる例を自分自身で示しているが、それに気づいていない」というのに指摘しないのは反論者として誠実でない。後出しじゃんけんを狙った詐欺師にしか見えん。
2023/11/19(日) 15:17:38.47ID:BvvFFAMC
フィクションでもマウス的な小道具を無くそうとしてる
だから剣と魔法しかない
2023/11/19(日) 15:21:36.07ID:5CKxkiE7
>HTML/CSS/JavaScriptベースで作られるようになっていて使用言語を強いて言えばJS/TSの時代
そしてそれらは全て実装継承モリモリの実装に支えられている
2023/11/19(日) 15:24:12.29ID:xroD2KWj
>>500
「その指摘のような状況で使わなければいいだけ」とか後出しジャンケンにもなっていないな。情報が空っぽすぎる。
無敵ジャンケン出して勝った気になるお子様みたい。
2023/11/19(日) 16:13:36.90ID:NqOCouPw
>>514
Reactはクラス止めて関数型のやり方に変えて
かなり経つよ
2023/11/19(日) 16:43:45.43ID:HSZIalWb
あったはずだけど
2023/11/19(日) 16:45:02.12ID:HSZIalWb
あ、めっちゃ遅れレスだけど>>509に対して書いたつもりだった
2023/11/19(日) 17:14:49.95ID:H8V03qQo
>>514
Reactは本体含めて継承は使っていない
全て関数
2023/11/19(日) 17:17:51.68ID:H8V03qQo
まあ今後のGUIはWebView2になるのは間違いなさそう
特にwindowsはこれが決定版になるはず
521デフォルトの名無しさん
垢版 |
2023/11/19(日) 17:39:17.01ID:nljhlBVQ
>>512
ただ親クラスを継承して親クラスのメソッドを使うだけでしょ?
そんなことはどこにでもあるが、そのすべてがインターフェイス的に全てのメンバの実装が必須なケースになるのか?
ならない
なるケースはインターフェイスなど使えばいいだけ
2023/11/19(日) 17:55:10.88ID:o+X6buyf
メンバ変数に直接アクセスするメリットはgetやsetを実装する時間を浪費しないことだが
継承のメリットはこれに類似している
2023/11/19(日) 18:40:03.88ID:RRmaBkyu
>>516,519
意味のない指摘をありがとう
ReactはHTML/CSS/JavaScriptを支える技術じゃなく
HTML/CSS/JavaScriptを活用した技術

ちなみにReactの本体では今でも実装継承使ってる
つまらない嘘はいい加減止めようね
2023/11/19(日) 18:50:12.97ID:WxxDsdGH
>>523
支える技術とか活用した技術とか意味不明すぎる
525デフォルトの名無しさん
垢版 |
2023/11/19(日) 19:34:44.92ID:nljhlBVQ
>>524
何で知ったかしてバレないと思うん?
526デフォルトの名無しさん
垢版 |
2023/11/19(日) 20:05:00.46ID:aXcE9XXk
マイコンレベルに小さなコンパイラを搭載しなければいけないような案件だとRustは重たすぎて無理っぽいが
それ以外のデメリットは無い感じはする。今のところ
FPGAの論理合成のような長いコンパイルプロセスに未来を感じる(感想)
2023/11/19(日) 20:46:51.67ID:H8V03qQo
>>523
頭が悪すぎて嫌になるな
2023/11/19(日) 20:52:10.42ID:H8V03qQo
>>524
なんか日本語がおかしい
韓国人なんかな?
2023/11/19(日) 21:13:25.27ID:o+X6buyf
英語圏で同じこと言われる不安を煽ってるから英語が苦手になるパターン
2023/11/19(日) 22:14:28.15ID:fSaG2PoW
昔のReactはコンポーネントクラスというJavaScriptのクラスを用いた方法を用いていたけど
それでも継承は使わないでコンポジションを使うようにと公式に書かれていた
今のReactはクラスではなく関数コンポーネントを用いるようになった
2023/11/19(日) 22:31:23.82ID:2h4NT+3n
継承はクラスの再利用とクラスの切り替えが同じ継承に集約
されていたのが問題だった
2023/11/19(日) 23:15:24.31ID:WkLuwjlK
>>531
コードの再利用とサブタイピングが一緒になっていたらなぜ問題なの?
2023/11/20(月) 00:02:51.71ID:miVVMWsb
>>523
継承使ってるというのはどこのコード?
2023/11/20(月) 03:25:10.93ID:m3TC6/PX
クラスの切り替えとはキャストのことか
だがダックタイピング界隈には「キャストする」という振る舞いがない
templateなら引数を変えることが切り替えでありキャストは重要ではない
重要ではないものを重要と思ってたなら問題だ
2023/11/20(月) 03:52:37.02ID:Uh0cT6mQ
だからさ、独自用語で煙に巻いてないでTaPL読んだうえで共通語彙で話しようぜって
2023/11/20(月) 07:37:53.49ID:kv+dmWMk
>>521
親クラスを継承できないクラスはポリモーフィズムできないねぇ。

後から「読み取り専用のIFが欲しい」「書き込み専用が欲しい」となったらどうすんの?

「なるケースはインターフェイスなど使えばいいだけ」なら、途中で継承からIFに切り替える?
「早すぎる最適化」だなぁ
2023/11/20(月) 08:24:47.95ID:dEVryb2p
さすがにその例だと、「モード切替するメソッドを足す。所有権管理もさせる。旧クラスは廃止」とかだろ
2023/11/20(月) 08:49:37.76ID:Gc8IZzjG
>>537
だから「継承は重い。早すぎる最適化」なんだよ。
いつインターフェイスを確定するのは設計を煮詰めないと無理だから、設計初期に確定なんて不可能。
2023/11/20(月) 09:03:13.39ID:07sj62mg
>>499
俺もそう思う
540デフォルトの名無しさん
垢版 |
2023/11/20(月) 10:54:06.11ID:NElbrJwW
何で君達は最小のサンプルコードも書かずに俺様用語で議論してるの?
プログラマじゃないのかな?
2023/11/20(月) 11:26:53.92ID:6jnK0Jj8
今朝のGoogleニュースで米の求人報酬だかでRustが2位とか見たわ
人事的にはRustで沼る人材が欲しいらしいぞ
良かったな
542デフォルトの名無しさん
垢版 |
2023/11/20(月) 12:00:36.92ID:ZwEoOGmm
>>536
そこら辺は言語によって違うからせめて言語くらい前提として共有しないと議論にならない。

親クラスを継承できないクラス、意味不明。
そもそもサンプルコード見せれば確実なところを自然言語で議論しようとする発想が意味わからない
2023/11/20(月) 12:49:28.44ID:aVFf8Qq7
>>542
さすがに出先スマホでコード打ち込みたくないわな。
コードで言うなら>492みたいなのが欲しいというだけだし。

>親クラスを継承できないクラス、意味不明。

例えばライブラリが返すインスタンスのクラス。普通はクラスを直接弄ることはできないし、final宣言されてたら派生も無理。クラスを直接弄くれるとしても、ライブラリをメンテナンスするとか面倒臭いからやりたくない。
普通はAdoptor作るけど、それなら>492みたいなIF側で自動的にやる機能が欲しい。
544デフォルトの名無しさん
垢版 |
2023/11/20(月) 12:49:42.01ID:JpnTJcOA
githubの2023年成長率でもRustが40%増でTOPだったな。
でもまだ人気言語TOP10には食い込んでなかったけど。
2023/11/20(月) 12:53:05.42ID:PG0EBfXZ
>>541
日本だとマジで少ねえんだよな
ガッツリ使ってて将来性があるところならぜひ行きたい
546デフォルトの名無しさん
垢版 |
2023/11/20(月) 13:32:31.99ID:NElbrJwW
>>541
1位はpython?
2023/11/20(月) 13:42:54.45ID:IjnmMF1h
そりゃ1位はPHPだよ
2023/11/20(月) 13:54:03.53ID:SNQO1x/A
>>523
早くだせよコラ
適当いってんのはテメェだろクソが
549デフォルトの名無しさん
垢版 |
2023/11/20(月) 14:04:35.58ID:NElbrJwW
>>547
PHPを書けるより市場価値がないの?
2023/11/20(月) 14:38:31.00ID:dEVryb2p
Rustが出せるのは高い信頼性だが、日本で何か作っても、それ信頼できんの?ってなるから
だったりして
551デフォルトの名無しさん
垢版 |
2023/11/20(月) 14:44:00.93ID:NElbrJwW
>>550
求められている信頼性って「Rustが出せる信頼性」とは違うんだと思うよ
552デフォルトの名無しさん
垢版 |
2023/11/20(月) 15:09:31.41ID:MS7hPbOQ
日本だけに限らないかも知れないけど
ソフトウェアの利用者ってそもそも
何の言語で造ってるかなんて気にしてないし知ろうともしない
2023/11/20(月) 15:36:03.59ID:JXHwx0JF
Rustが使われる理由は高速省メモリで開発効率や保守性が良いため
554デフォルトの名無しさん
垢版 |
2023/11/20(月) 15:41:32.66ID:NElbrJwW
>>553それはRustプログラマの視点
それまでの話は発注者側からの話
2023/11/20(月) 15:49:44.16ID:JXHwx0JF
発注者側の視点でも
高速省メモリで安全性も高いのはRustとなる
556デフォルトの名無しさん
垢版 |
2023/11/20(月) 15:55:24.47ID:NElbrJwW
鶏と卵の関係になるけどプログラマが確保できなく保守性が悪い
2023/11/20(月) 16:02:14.85ID:N43MAaAU
>>555
という願望

いいものなら売れるというナイーブな考えは捨てろ
2023/11/20(月) 16:18:06.96ID:JXHwx0JF
>>556
プログラムの保守性自体はRustが高くて好ましいため
あとはプログラマーの数は単調増加する一方なので特に問題なし
559デフォルトの名無しさん
垢版 |
2023/11/20(月) 16:27:04.23ID:NElbrJwW
>>558
プログラマが確保できないってことは
発注者側からすると運用後の保守に
支障を来すリクスがあるってことだよ
2023/11/20(月) 17:04:51.35ID:aPv5cKlG
コントリビューター増加「率」はミスリードかも、レポ増加「数」は
github 2023年新規レポジトリ10KB以上

JavaScript 2.1M results
Java 767k results
Python 749k results
TypeScript 627k results
C# 338k results
C++ 244k results
C 174k results
PHP 152k results
Kotlin 147k results
Dart 109k results
Go 84.4k results
Ruby 64.3k results
Swift 59.3k results
Rust 39.4k results
Lua 22.1k results
HCL 16.4k results
561デフォルトの名無しさん
垢版 |
2023/11/20(月) 18:15:53.85ID:1QHH6HXV
クローズ開発案件が含められないから意味が無い件
2023/11/20(月) 18:32:56.66ID:Tq0YX8uR
>>557
株とかはそうだね
いいものは誰にも教えないで買い占めるはず
商品化し売られているのは悪いものしかない説
563デフォルトの名無しさん
垢版 |
2023/11/20(月) 20:50:45.51ID:NElbrJwW
>>561
ある程度は相関してるでしょ
564デフォルトの名無しさん
垢版 |
2023/11/20(月) 21:15:52.04ID:ojqzhkRS
>>562
お前がレスに使ってる端末は悪いものなんだな~。
2023/11/20(月) 21:47:51.39ID:Tq0YX8uR
>>564
自然言語で雑談ばっかりして
コーディングとコンパイルと実行をしない原因はこの端末かもしれないな
2023/11/20(月) 21:56:32.85ID:Ygoo/zhh
>>533 >>548
嘘つきオジは「知ったかぶりして”Reactは本体含めて継承は使っていない全て関数”などという真っ赤なウソをついてすみませんでした」と言うのが先だろ
567デフォルトの名無しさん
垢版 |
2023/11/20(月) 21:59:46.43ID:1QHH6HXV
>>563
全くしてないだろ
公開出来るソフトなんて業界の一部でしか無いからなぁ
2023/11/20(月) 22:02:12.48ID:SNQO1x/A
>>566
負けを認めろ
土下座したら許してやるぞ
2023/11/20(月) 23:27:57.05ID:/Ubqd6b6
>>530
Reactはクラスコンポーネント時代も
開発元のFacebookが様々なケースで継承を使うとよいケースは存在していないことを確認しているとReact公式に書いていたもんな
もちろん今はクラスコンポーネントすら捨てて関数コンポーネント
2023/11/21(火) 08:57:03.65ID:CeBFd4j1
GitHubで最も使われている言語はJavaScript、最も利用者が増加したのはRust。AIプロジェクト数はこの1年で3倍増GitHubが年次調査「Octoverse 2023」発表
https://www.publickey1.jp/blog/23/githubjavascriptrustai13githuboctoverse_2023.html

AI関連のプロジェクトを国別に見ると米国が突出していますが、日本はインドに次いで3位となっており、日本のオープンソース開発者は世界的に見て積極的にAI関連のプロジェクトに関わっていることが分かります。

プログラミング言語別にコントリビュータの増加率を見ると、1位がRust、2位がRua、3位がTypeScript、4位がHCL(HashiCorp Configration Language)、4位がTSQL、5位がPythonとなります。
2023/11/21(火) 09:29:05.70ID:WJ7yrtvk
React本体のJavaScriptコードで継承が使われてるという事実は嘘つきオジがいたので指摘しただけで重要な事ではない
JavaScriptの継承を理解してる人ならリポジトリ見れば誰でもわかる

重要なのはReactやReact Nativeが依存しているHTML/CSS/JavaScriptなどのホスト環境が提供するGUIライブラリやそれに類するものは全て実装継承モリモリで作られているということ

それはなぜなのか?
2023/11/21(火) 09:48:09.93ID:meOGGGPH
>>570
Rustはもう何年もずーっと愛され続けてずーっと増加率もすごく高いのに
誰も使ってないのが不思議w
573デフォルトの名無しさん
垢版 |
2023/11/21(火) 10:52:34.98ID:TIZNoRj+
増加<率>だからねw
574デフォルトの名無しさん
垢版 |
2023/11/21(火) 10:53:27.83ID:TIZNoRj+
つまり分子が大きいというより分母が少ない
575デフォルトの名無しさん
垢版 |
2023/11/21(火) 10:56:46.75ID:fyFN08Ef
ヒント非公開
2023/11/21(火) 11:02:46.10ID:ZX3v40di
>>571
GitHubのコードに対するリンク一行貼るくらいやってよ
2023/11/21(火) 11:06:40.20ID:ZX3v40di
>>571
gtkはCだね
2023/11/21(火) 11:07:36.25ID:HSO31doi
>>557
ほんそれ
2023/11/21(火) 11:18:07.78ID:Lmp19CDx
>>575
エビデンスを出せという言葉を使えば公開されるという認識なんじゃないか
まるで魔法みたいに
580デフォルトの名無しさん
垢版 |
2023/11/21(火) 11:27:49.20ID:j31CN6Yb
>>569
とFacebookの犬が申しております
2023/11/21(火) 12:12:04.36ID:Vub9wpCB
>>571
嘘つきはお前だよ
2023/11/21(火) 12:25:12.17ID:MyNMYruR
>>571
お前毎回遅レスなのは何なの?
回線がない生活保護施設にでも住んでるのか?
2023/11/21(火) 12:27:03.76ID:vP2RupFQ
特定のレスに妙に攻撃的な単発ちょくちょく湧いてくるのってやっぱりアイツ?
584デフォルトの名無しさん
垢版 |
2023/11/21(火) 12:50:14.72ID:j31CN6Yb
>>583
いや、あいつとは別
585デフォルトの名無しさん
垢版 |
2023/11/21(火) 12:50:16.11ID:j31CN6Yb
>>583
いや、あいつとは別
2023/11/21(火) 13:37:07.13ID:f4244eke
アイツじゃねーかw
2023/11/21(火) 13:52:02.24ID:Lmp19CDx
質問する側は基本的に無力で、答える側に生殺与奪の権を握られる
一発逆転するには攻撃力か何かで優位に立たなければ
2023/11/21(火) 18:59:23.42ID:E3kr56i/
勝ったところで、所詮クソvsクソだぞ

面白いことを書け
2023/11/21(火) 19:14:06.76ID:MyNMYruR
攻撃的なこと言われて大人しくなってるの草
2023/11/21(火) 22:22:25.20ID:3Y9OZVuh
>>577
GTKは実装継承モリモリ
Cで実装継承を実現するためのオブジェクト管理システムをGTK用に作ってある
Reactの話とは関係ないけどね
2023/11/21(火) 22:23:49.29ID:3Y9OZVuh
>>582
誰もが君のように暇なわけではないんだよ
つかそんなにレスが欲しかったのかよw
2023/11/21(火) 22:43:10.96ID:Q9pynku3
>>590
そういう返答するだろうなあと思ってたよ
言語機能になくても実装で継承使われてるんだ~
というならどんな言語使っても構わないね
はい終了
2023/11/21(火) 23:11:04.07ID:Lmp19CDx
Cはスマポ<T>を作れない
C++でもtemplateを使わない主義ならばスマポのようなものをTが実装継承するかも
2023/11/21(火) 23:15:06.85ID:x0TxAGsF
>>592
論点は実装継承は不要なのかどうか
常にコンポジションを使うべきかどうか

GTKは言語機能によらない実装継承を使っているというだけ
コンポジションで実装する事も技術的には当然可能だがその選択をしてないことに意味がある

特に言語が提供してないにもかかわらずGTKのためだけに継承機能をわざわざ作り上げるほど実装継承を欲した理由を理解するべき
2023/11/21(火) 23:35:36.54ID:LOJe+P0r
Reactが依存しているHTMLのボタン要素を例に話をするとボタン要素は次のような型階層を取ることがDOM APIの仕様で決められている

EventTarget <- Node <- Element <- HTMLElement <- HTMLButtonElement

上位の型のパブリックなメソッドやプロパティはや下位の型でも使えるようにする必要がある
これは実装継承だけでなくコンポジション+インターフェースでもRustのenumのような代数データ型を使っても実現可能なんだが知る限り全てのブラウザが実装継承を使って実装している
2023/11/21(火) 23:45:35.68ID:Q9pynku3
>>594
言語機能になくても問題はないんだから
言語の機能比較という論点からは
どうでもいい話だね
2023/11/21(火) 23:49:00.55ID:5SU8rUzf
なぜかというと
例えば仕様変更でNodeに新しいメソッドが追加されたとしても実装継承なら一箇所変更すればいいだけだから

コンポジション+インターフェースの場合はNode以下の数百個のクラスや構造体にメソッドを追加して委譲するコードを書いて回らないといけない

実装継承というのはサブタイピングとコードの再利用を同時に行うことだが、その2つを同時に行えるという点が最大のメリットであり存在理由なわけ
2023/11/22(水) 00:08:02.11ID:h68LLJ0S
>>596
問題がないわけではないんだよ
GTKの実装継承は言語機能のそれと比べてクソ面倒臭い上に言語に組み込まれた型システムではないからこその弱さがある

Rustでも実装継承をマクロで模倣することもできるがだからといってそれに何の問題ないわけではないというのと同じ

他のやり方があったとしてもより楽に安全に開発できるようになるなら言語機能としてあった方がいいってことになるよね?
2023/11/22(水) 00:19:05.87ID:i7dbnQQ2
>>1-10

乗り遅れるな!

いつまでも待ってはくれませんよ

https://note.com/nukatiktok/n/nfbb66b3b3d3e ←4000円貰えます

この機会にぜひ

https://i.imgur.com/eWEQ3eT.jpg
(毎日動画見てるだけでお金貰えるんだぞ💰)
2023/11/22(水) 00:33:52.03ID:SCjy6MJ9
>>597
それは仕様変更前のクラス数百個を捨てさせ変更後の数百個で置き換えるには都合が良い
一箇所変更するだけで古いクラス数百個が消滅する
だが古いクラスに依存していた資産が消滅するのは本当にお得なのか?
2023/11/22(水) 01:12:20.99ID:uxQX1dJD
>>590
はよReactの実装継承について参考にすべき
ファイルとかだしてくれ
2023/11/22(水) 01:26:34.89ID:uxQX1dJD
>>598
> 他のやり方があったとしてもより楽に安全に開発できるようになるなら言語機能としてあった方がいいってことになるよね?

c++に色々跳ね返ってきそうなお言葉来たな
2023/11/22(水) 16:32:36.94ID:Ky8NVDmM
「GCは嫌い。だけどC++は苦手。
 噂だとRustがそれを解決するらしいから」
ということでRust票が入っているだけ。
2023/11/22(水) 18:06:32.01ID:VuMm7++t
GoogleもMicrosoftもAmazonもCloudflareも
そんな理由でRustを採用して使っている?
605デフォルトの名無しさん
垢版 |
2023/11/22(水) 18:40:30.34ID:I05HGQ1N
結局windows11 10.0.22631.2715 (23H2)にRust製モジュール入らなかったが
606デフォルトの名無しさん
垢版 |
2023/11/22(水) 19:20:29.71ID:zUxnYc1v
MSの使ってるコンパイラは何だろう?
2023/11/22(水) 20:23:02.05ID:BBiTeKwa
>>600
>だが古いクラスに依存していた資産が消滅するのは本当にお得なのか?
消滅しないよ
2023/11/22(水) 20:29:20.42ID:ltxaInSK
>>604
信用できないアホコーダーにはバグを入れる自由なんて与えない。
コーティング規約だと防ぎきれないから抜け道の少ないRustにする。

ということだろ。
2023/11/22(水) 21:18:08.59ID:+UnlqW3r
関数名の重複を許す仕組みは信用できる
クラスは名前がかぶったらたいてい古い方が無かったことにされるのが信用できない
610デフォルトの名無しさん
垢版 |
2023/11/22(水) 21:25:34.99ID:zUxnYc1v
なにそれ?
2023/11/22(水) 21:26:35.97ID:5rDf7evN
>>603
C++苦手でRustなら大丈夫!って人種は居るのかな
さらに苦労しそうだけど
2023/11/22(水) 21:47:18.27ID:+UnlqW3r
intは信用できないのでi32やi64になったのはまあいい
実装継承の祖先の名前がずらりと並ぶのは嫌だ
2023/11/22(水) 22:42:24.09ID:+dkhSESN
>>612
それは実装継承による設計をする古い頭のままの駄目プログラマーの典型例
2023/11/22(水) 22:48:19.59ID:F4GGzYS9
>>611
いるよワイ
とにかくC++はコピーを正しく扱うのがあまりにも難しいのよ
C++の弱点はこの一点に尽きる
もちろんCとの互換性を保つためなのだが本当に難しい
そこにコピーやめたろ!って英断したRustは本当にC++使いの人が設計したんだなと感じる
この部分に手を入れかつ速度を落とさない実装もできる方法を突き詰めるとこうなる
2023/11/22(水) 22:59:48.09ID:Lo22StDU
>>614
Firefoxはservoで行き詰ったよ
2023/11/22(水) 23:05:36.01ID:F4GGzYS9
Effective C++の初版はほぼこのコピーをいかにうまくやるかを解説した本だった
あらゆる手段でコピーが発生してもオブジェクトの整合性が取れるように注意点を書きまくった
しかしその内容はあまりにも普通の人には難し過ぎた
そして一つのクラスを作るたびにこんなに気をつけて実装しないといけないのか!やってられん!となって
その結果、もう全部ヒープにとって生ポインタでいいじゃんとなってしまった
そのおかげでコピー問題は無くなったが
メモリリークや二重開放、ヌルポの山を産んだ
617デフォルトの名無しさん
垢版 |
2023/11/22(水) 23:09:46.91ID:EF2LJjbV
ポインターをメンバーに持つと言うのがコピーの問題になってるだけやん?
アドレスをコピーするのか、実体を複製して新しいポインターとして格納するのか
用途によってはどちらかが不都合だったりするからなぁ
2023/11/22(水) 23:14:04.80ID:F4GGzYS9
>>617
実態を持っても同じだよ
そのオブジェクトが内部にポインタを持ってたら同じ問題が発生
さらにそのオブジェクトが(ry

というわけで地獄のような連鎖になることがわかる
そして厄介なのは自分が作っていないクラスだった場合お手上げということ
いかにやばいか分かっていただけただろうか

だから一時期はあらゆるオブジェクトがヒープ割り当てをしていた
2023/11/22(水) 23:21:57.25ID:F4GGzYS9
スマートポインタによって状況はだいぶ改善されたとは思うが
しかしこのコピー問題というのは常に残っているのだ
そのオブジェクトを安全にコピーできるようにするという本質的な難しさは変わっていない
そしてムーブかコピーかみたいなものをライブラリ提供者が決めなければならず
それを使う側が意識することはかなり難しい
ドキュメントを読み込んで使い方を熟読するしかない
数百個のクラスがあった場合その全てのクラスの性質を暗記しないといけないのである!
しかも一個のミスで全てが崩壊する
こんなことは不可能に近い
2023/11/22(水) 23:27:21.33ID:F4GGzYS9
その結果全てのオブジェクトをヒープにとってそのポインタだけを持ち回る、という実装がほとんどとなったのである
こうすればとりあえずコピーに関する問題はなくなる
俺はその時期にC++を仕事で書いていた
全てのオブジェクトがヒープにあった
コピーに関して悩んだことがなかったので
Effective C++を読んでもこの本は何でこんな「不整合が起きないオブジェクト」の作り方の解説ばっかりやってるんだろうと思っていたぐらいだ
2023/11/22(水) 23:30:42.74ID:F4GGzYS9
ちなみにこの全てのオブジェクトをヒープに取ればいいじゃんの思想をデフォルトにした言語がJavaである
メモリの解放漏れはGCにより問題なくなったがヌルポを量産したのは言うまでもない
2023/11/22(水) 23:32:00.30ID:UBOPkQxC
ChatGPTとまでは言わんが、IDEも仕事しろ、っていう世の中ではある
2023/11/22(水) 23:37:47.47ID:Rf3A/fx6
>>615
金がなくなっただけでスポンサーついたら復活した
2023/11/23(木) 00:06:01.85ID:KrVwEhLS
>>623
稼働してるの2~3人だけど当時よりは整ったはずだから今度は完成するよね?
とりあえず年内にtableタグが実装だっけ?
2023/11/23(木) 00:11:54.90ID:mLPybMZb
Javaにはポインタしかない
ゆえにコンポジションを繰り返せばリンクリストのようになる
でも実装継承なら
という風に二つの問題は一つにつながる
2023/11/23(木) 01:52:03.12ID:FMewW6Qw
>>616
Effective C++がコピーの話ばっかりという印象はないけどな
あるのはもともとCにあるコピー問題をいかにC++で解決するかというスタンスの解説
あとコピー問題を解決するためヒープを使うってのも謎理論
それは因果関係逆でしょ
ポインタをメンバーに持つデータ構造のコピーをいかに安全に実現するかでしょ
STLコンテナによりそこに厳密な意味定義が必要となった
627デフォルトの名無しさん
垢版 |
2023/11/23(木) 07:44:46.73ID:N5SmR8A3
>>568
と負け犬が申しております
2023/11/23(木) 09:38:23.37ID:jt92Atwz
>>621
ヌルポは型無しnullpointerによる型の制約に違反する問題だろ。
スタックだろうがヒープだろうが型無しインスタンスを使う限り発生する。

c++もポインタを排除して参照のみにできれば随分違うだろうけど。
2023/11/23(木) 10:31:50.34ID:mLPybMZb
中途半端に浅いコピーは、深い方が正しい可能性を否定できない
これがコピー問題
ヒープを使えば極端に浅いコピーになる
これはバグではなく意図的にしか見えないから問題が解消する
630デフォルトの名無しさん
垢版 |
2023/11/23(木) 10:37:31.57ID:mHKDjsht
>>597
そこはRust最低だよな
2023/11/23(木) 10:57:07.78ID:KmXfNFgK
機能追加が常に善なら後発言語は機能お化けに
なる一方のはずだがそうはなってないので
〇〇言語には△△機能が無いからゴミという
論法はあまり意味がない
2023/11/23(木) 12:06:15.18ID:gaANDpVB
>>627
だからお前は何でそんな遅レスなんだよw
遅レスおじさん登場〜👴
2023/11/23(木) 12:33:56.71ID:cJqQ5Mzl
>>631
C++のよろしくない点で一番言われるのは、長い歴史といろんなパラダイムを取り込みまくったことで
まさに機能お化けになっちゃったことだからな
2023/11/23(木) 13:07:39.51ID:mHKDjsht
C++のtemplateは失敗
2023/11/23(木) 13:35:39.34ID:tND7y2dZ
>>631
>機能追加が常に善なら
誰もそんなことは言ってないから
それこそ意味のない論法
2023/11/23(木) 13:53:47.80ID:KmXfNFgK
>>635
誰かがそういう主張しているという文章じゃ
ないんだが
頭悪いな
2023/11/23(木) 14:01:33.34ID:P5PvPGf5
実装継承不要とか言ってたやつら負けるの早すぎだろ
拍子抜けもいいところ
2023/11/23(木) 15:08:18.27ID:m+MQWJu5
いや。参考になったから、それはそれでいいぞ(IUnk派
2023/11/23(木) 16:01:38.36ID:M3SMKrV5
Reactの継承を使っているコードを出せない時点で負け犬はどっちか明確
強い言葉使ってやるからかかってこい
2023/11/23(木) 16:37:00.29ID:/KrkujPK
「Reactは本体含めて継承は一切使っておらず、全て関数だと言い張る人がいるのですが本当でしょうか?」と
自分の主張ではないフリしてStack Overflowあたりで聞いてみ?
めっちゃ馬鹿にされるだろうけどすぐに欲しがってる答えをもらえるぞw
2023/11/23(木) 16:38:05.49ID:t7xzkVTj
ビビってレスもできんかw
情けないクズ
2023/11/23(木) 16:43:11.88ID:9Fa6B1S9
プロトタイプ継承もわかってないのに事あるごとにReact連呼してたのかと思うと滑稽を通り越してちょっと可哀想
2023/11/23(木) 16:52:07.60ID:t7xzkVTj
はよそのコードを出せよ
それも出せないくせに偉そうに御託をごちゃごちゃ言う
偉そうに自分語りするくせに的外れ
虫唾が走る
2023/11/23(木) 17:57:28.21ID:qpiJFg02
継承はプログラミングスタイルとして決定が多いため
モダンな各プログラミング言語で継承が不採用となっただけでなく
Reactでも継承を使わずに済むように進化してきたのよ
2023/11/23(木) 18:04:46.83ID:t7xzkVTj
おーいまた遅レスかー?
快活クラブから出ちゃったのー?
2023/11/23(木) 18:52:56.05ID:t7xzkVTj
>>644
多分そういう意味すらわかってないと思うよ
プロトタイプ継承がどうとかそんな話とカンケーないのにな
とっととReactのリポジトリクローンしてgrepすりゃわかるのに
何でその程度のことができないのか
2023/11/23(木) 19:34:58.02ID:5s3/w8/I
src/foo/bar.jsの124行目見てどう思うプギャー
とやればいいだけなのになぜかやらない
2023/11/23(木) 21:12:25.76ID:FMewW6Qw
>>629
それは理解がおかしい
浅い深いのコピーの分類ではうまくいかなかったのが歴史
それが所有権の概念とムーブセマンティクスの導入で整理されたのが今の状態
浅いと言っていたのがムーブで深いのがコピー
ヒープがどうのこうのってのは間接的なこと
そもそもヒープが単一って前提もc++にはない
2023/11/23(木) 21:20:40.39ID:FMewW6Qw
>>634
まぁ判断は難しいね
下手に表現力が高かったがために、一見言語組み込みでやるべきものの多くがユーザー側で実現されてきた
様々なテクニックが発見され発展速度向上には寄与しただろうが一方で深い考察のなく導入された結果仕様の複雑さを招いた
個人的にはエラーメッセージ見ても何が悪いのかすぐに理解できない代物になったのは許せないね
2023/11/23(木) 21:32:54.70ID:12+j04nO
C++のテンプレートはCのマクロ文化を止めたかったんでしょ
メタプロガチ勢が頑張りすぎてカオスになったけど功績は大きいと思う
2023/11/23(木) 21:58:33.69ID:hsLNP7GU
ディープコピーを知らずに盛大に恥を晒した某オジがコピーについて語るとか世も末だなw
2023/11/23(木) 22:09:33.63ID:t7xzkVTj
テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
例のコピー可能オブジェクトの話とも絡んできて「無理」となる
この辺Rustはよくできてる
イテレータが可変参照なのか共有参照なのか、実体なのかによってきちんと分けられている
C++で困った部分を完全に解決してくれてる
Rust素晴らしい
653デフォルトの名無しさん
垢版 |
2023/11/23(木) 22:28:06.68ID:0De2U7us
>>652
>テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
>まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
STLで何か問題でも?
2023/11/23(木) 23:13:27.00ID:FMewW6Qw
そりゃSTLで満足してる間はそれでいいだろ
アロケーターを指定したことないだろ?
2023/11/23(木) 23:28:00.45ID:M3SMKrV5
むかしはSTLがない環境も多かったからね
windows環境ではクソ遅かったせいか
完全にないものと扱う奴さえいた
656デフォルトの名無しさん
垢版 |
2023/11/23(木) 23:30:28.39ID:0De2U7us
>>654,655
じゃ今のSTLは問題ないで良いのかな?
2023/11/23(木) 23:37:07.63ID:u/H26W0M
>>652
そこに加えてRustはスタック領域も扱えるからさらにヒープ使用を減らせるところ
2023/11/23(木) 23:37:56.70ID:09UkZirn
問題ないと問われればあるだろうね
ただよく訓練されたC++使いは気に入らないと文句を垂れても仕方ない事もよく理解してるから
その環境で可能な別の手段を用いるだけだよ
659デフォルトの名無しさん
垢版 |
2023/11/23(木) 23:39:53.17ID:0De2U7us
>>658
曖昧なことしか書かんのだな
問題あるならどのような問題かを短いサンプルコードで具体化してよ
2023/11/23(木) 23:48:05.78ID:09UkZirn
どのような問題かなんて別の手段で解決した後に覚えてるわけないじゃん
何でも欲しがりさんには判らないか
661デフォルトの名無しさん
垢版 |
2023/11/23(木) 23:58:49.29ID:0De2U7us
>>660
示せないなら問題あるなんて言ってはいかんだろうよ?
2023/11/24(金) 00:21:55.00ID:oZLKiYTi
C++はSTLを一応擁しているけど、各プロジェクトで、もうちょっと軽量で自分とこ向きのコンテナ持ってるとこが多い
異論は認める
2023/11/24(金) 00:29:35.14ID:qKRvRsRu
>>662
でその自作コンテナを矛盾なく書くのがめちゃくちゃ難しいとな?
今のSTLは問題ないで良い?
2023/11/24(金) 00:31:58.77ID:oZLKiYTi
俺はSTLが重厚すぎて自分の手に負えないと思ってるので、なんとも。
STLにもバリエーションがあるのは承知していて、あんまり幅広く試せてないってのも。
ただし、依存(include)してるプロジェクトは当然あるし、試作には便利なので、ないのは困る。
2023/11/24(金) 07:39:29.33ID:eRQLkcC1
>>652
要素の型が実体とポインタ両方に対してうまく動くようにする

それはポインタを部分特殊化しろ、ということでは?
2023/11/24(金) 08:38:00.98ID:4SGglGUV
>>663
同意を求めるなよw
お前の用途ではSTLで十分ってだけ
そうじゃない場合もある
STLで足りるならboostもEASTLも存在してない
667デフォルトの名無しさん
垢版 |
2023/11/24(金) 11:26:41.73ID:qKRvRsRu
>>666
>>652
>テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
>まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
これがいったい何のことを言っているのか分からんので
STLで問題を指摘させれば共通の題材として議論できるからSLT取り上げた
2023/11/24(金) 11:31:35.71ID:UKwUTpr8
継承を使いこなせない者同士仲良くしろよなw
2023/11/24(金) 14:20:00.82ID:v63PRHPl
嫌儲にまでスレ立てることないだろw
2023/11/24(金) 14:23:40.25ID:9RAaBgN9
全然伸びてなくて草
こんな過疎スレで敗走したからって嫌儲民おらに力を分けてくれーーってやろうとしたけど
そこでも無視されてる
情けない奴だ
だからゴミクズなんだよ
2023/11/24(金) 14:29:03.78ID:rK2EDUzF
Why I think C++ is still a desirable coding platform compared to Rust
https://lucisqr.substack.com/p/why-i-think-c-is-still-a-very-attractive
2023/11/24(金) 14:36:54.58ID:eHJQmp62
>>671
そもそも前半の話いる?w
的外れ過ぎて意味のない指摘だよ
2023/11/24(金) 16:11:19.50ID:UVQLfV0S
>>671
これは酷いw
2023/11/24(金) 16:25:00.95ID:tvJVQF3W
いくらめんどくさくても安全のお守りがほしいんすわ
C++製システムがクラッシュしてうなだれたあの日の鬱憤が安全を求めるんすわ
675デフォルトの名無しさん
垢版 |
2023/11/24(金) 16:34:40.23ID:6OrpRj0R
>>671
何故この手のやからって、
自分は今まで大丈夫だったから他の人(今度の新卒社員とか)も大丈夫に違いないと思えるんだろうか。
いつも一人で仕事してるのかな。
2023/11/24(金) 16:45:30.90ID:Oe/LAESW
>>671
その人はRustを知らなすぎるな
C++はインラインアセンブリがある云々もRustにもあるし
算術ラッピング演算の件もRustはラッピングの有無両方が用意されてるのを知らずに書いていたり
2023/11/24(金) 16:52:45.75ID:KbRqc6TK
フルボッコで草
2023/11/24(金) 16:55:26.04ID:rK2EDUzF
めっちゃ感想来てるw

俺は読まずに貼った、おもしろそうだったから
[Roast Me] って付いてたので、異論は認める系の日記かなって思ってた
仕事終わったら俺も読む 気にしないから感想はご自由に
679デフォルトの名無しさん
垢版 |
2023/11/24(金) 19:51:30.59ID:FR/8T+5m
>>674
わかる。他人の書いたC++ライブラリがめっちゃメモリリークする時とかそう思うわ
2023/11/24(金) 19:53:16.58ID:Pf2BWo+V
元記事に英語でコメント付けに行くことはしい内弁慶たちであった
2023/11/24(金) 20:53:52.01ID:HwIqF0Eo
>>652
要約: バカには無理
2023/11/24(金) 22:58:47.93ID:cJ52o0CU
使うなと言ってもバカはクラス継承をどうしても使いたがって質を下げるため
モダンなプログラミング言語は一斉にクラスごと言語から排除した
2023/11/24(金) 23:09:27.03ID:UpLQZeUm
そうそうバカはclassやextendを無くせば実装継承が無くなったと勘違いするからバカに気づかれないようにカモフラージュして実装してバカが無節操に使わないようにしてるんだよなぁ
684デフォルトの名無しさん
垢版 |
2023/11/24(金) 23:40:23.66ID:qKRvRsRu
そうしてマイナー言語マニアの思い出の一つとして
長く記憶に留まる言語となるであろう
2023/11/25(土) 00:57:31.51ID:xDUppX6s
>>683
実装継承の定義教えてくれ
686デフォルトの名無しさん
垢版 |
2023/11/25(土) 09:02:19.65ID:rKTwm3uz
>他人の書いたC++ライブラリがめっちゃメモリリークする

某OSのAPIのことですね判ります
2023/11/25(土) 09:47:04.81ID:9BsUE7B+
>>685
サブタイピング時に
上位の型が持つ実装コードの一部が
下位の型と共有されること
2023/11/25(土) 21:29:31.59ID:1Ohowu9E
嘘オジと複オジは撃沈されたようだな
2023/11/26(日) 15:19:59.23ID:06WEnIxy
OSにバグがあって後処理をしてもOSがリソースを掴みっぱなしになるといった経験はないだろうか。
そういった場合そのリソースを使う箇所だけ子プロセスとして隔離し、使い終わったらそのプロセスを終了する事でリソースを完全に開放させることが可能だ。
このプロセスの隔離はかなり万能な解決方法で、納期が短くて怪しいと思っても修正が困難なケースにも応用可能だ。
まあ要するにリークを疑われる場合一旦別プロセスにすれば必ず開放されるからリークは必ずしも怖くないよって話。
2023/11/26(日) 15:30:13.25ID:qv9H5y0z
と、御社の現お取引先ホームページにありますね。
弊社はRust採用実績十分、リークは原則としてありません
2023/11/26(日) 16:02:44.80ID:GTIMQwMH
>>687
いい定義だな
2023/11/26(日) 16:21:23.35ID:8OjiBh4l
Rustはモダンな言語の一つなので
その定義でもRustは実装継承を持たずきちんと排除している
693デフォルトの名無しさん
垢版 |
2023/11/26(日) 18:06:50.18ID:6qvbnksS
結局、c++が最狂ってことでいいな?
694デフォルトの名無しさん
垢版 |
2023/11/26(日) 18:08:00.70ID:Dq1p+inG
>>618
c++が最凶最悪
2023/11/26(日) 18:37:35.88ID:4YJKEDWv
>>689
OSのバグならアプリのプロセスを落としたところでリソースが解放されるとは限らない
プロセス落とすのはどちらかと言うとアプリのバグに対処するため
696デフォルトの名無しさん
垢版 |
2023/11/26(日) 18:49:55.09ID:o8qwwCxG
>一旦別プロセスにすれば必ず開放される

doubt
2023/11/26(日) 19:14:33.38ID:6NRjjzPt
すくなくともWindowsは長期間起動し続けると空きメモリが減っていく
OSが意図的に開放せずにキャッシュしてるのかリークなのかは分からないが
2023/11/26(日) 19:39:37.59ID:AfiVlC9p
>>689
それ本当にOSのバグ?w
2023/11/26(日) 19:41:06.05ID:Lbe7PiAw
>>689
子プロレス切り離しが大仕事だろ
そこで別のバグが大量に入り込む
全然簡単な話じゃない
お前言うだけでやったことないだろ
2023/11/26(日) 19:44:09.20ID:EBR4w0d/
>>689
きっしょ
2023/11/26(日) 22:37:51.44ID:06WEnIxy
俺が遭遇したのは2件で、どちらもOSの不具合という結論だよ
MSのナレッジに残ってるかもしれないがどっちもプロセスを終了するしか解決策が示されなかった
>>699
こういう理不尽に遭遇して回避策が示されたなら大仕事でもやらざるを得ないと思うけどね
別に難しいって程でもないし
2023/11/26(日) 22:48:32.77ID:06WEnIxy
そういや別件でOSが設定しているタイムアウト値を待てない場合も別プロセスにして回避した事がある
この板って年寄りばかりだろうしWindowsのプログラミング長年やってれば何度かそういう事に遭遇するんじゃないの
2023/11/26(日) 23:01:37.86ID:iMOX0Yuj
あのね、年寄りが真面目に答えてやるとOSの観点から言うと
windowsとLinuxじゃプロセスの考え方が結構違ってて
Linuxの場合、バックグラウンドプロセスっていうのは普通に使われまくってるの
いわゆるプロセスのクローンだから扱いが楽
シェルから作れるし

一方windowsではexeなんでクソ重い上に扱いが面倒
データ共有やプロセス間通信も一苦労だ
だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う
windowsにおいてスレッドの方が軽い

一方Linuxではスレッドもプロセスも本質的に同じ
(カーネルの構造体thread_structはプロセス生成の時も使う)

よってプログラミングモデルがだいぶ違うため
どうすべきか?はかなり違う

以上がwindowsでもLinuxでも並行処理を書いてきた俺の感想
2023/11/26(日) 23:12:09.99ID:dlQxZ4PC
Windowsはプロセスもスレッドも、互換性チェックみたいのが重厚らしく超高コスト
さらに、セキュリティソフトが走ってるのが当たり前の世界なので、ファイルハンドルも高コスト
なんでもWSL2でやったほうが軽い? らしい

てことで、コルーチンはいいぞw
2023/11/26(日) 23:30:18.11ID:EFSUb3PR
Rustの東京を使えばデフォルトでCPUのコアスレッド数をフル活用してコルーチンを何万も同時に動かせますものね
2023/11/27(月) 00:37:45.36ID:ggQuSpTQ
Elixir は、10万もの小プロセスを起動できる

Go の並行処理も、mattn の本に書いてあるけど、
C で、100スレッドを起動したら、
CPU 使用率が高く、12秒も掛かったが、

Goで100 goroutine を起動したら、
6スレッドしか起動せず、9秒で済んだ

Goの方が、CPUコアを効率的に使える
707706
垢版 |
2023/11/27(月) 00:48:36.74ID:ggQuSpTQ
とにかく、スレッドを起動したらダメ!

CPU コアや時間の大半が、起動処理に使われるから
2023/11/27(月) 00:59:58.17ID:zZXu+dmb
とはいえコルーチンって使い所が難しいのよ
流行りそうで流行らないのがその理由
結局「本当の並列性が必要ないようなすぐ終わる処理を大量にする」ユースケースにしか使えないから

こういう処理ってあまりないことに気がつく
まず真の並列性が必要となる数値計算では使えない
処理の中でブロックするとダメなのでその判断も難しい

よって普通の言語では使うのが難しい
2023/11/27(月) 01:36:12.87ID:O2rw1r7K
>>706
使いたければc/c++にはむっかしからコルーチンにファイバーがあるから
native言語なんだからosの資源使う上で不利になるはずない
2023/11/27(月) 01:38:37.07ID:AHLzaHDv
>>706
>Goの方が、CPUコアを効率的に使える

そう主張したかったら根拠を示さないとね
例えば逆の根拠として
Go各のgoroutineは別々の各々のスタック領域を必要とするけど
Rustはスタックレスなコルーチンだから必要とせずその分だけ効率的だね
2023/11/27(月) 01:45:48.38ID:zZXu+dmb
>>707
普通はスレッドプール使うやろ
2023/11/27(月) 06:31:05.54ID:klBkI3Ol
おれの作成したソフトは起動時に64個のスレッドを立ち上げているが常にサクサクだ
713デフォルトの名無しさん
垢版 |
2023/11/27(月) 07:50:36.80ID:h6EdzCL7
>>712
言語は何?
2023/11/27(月) 07:54:36.67ID:klBkI3Ol
cppは光速
715デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:19:45.20ID:7/k6/GSg
>>701
それどころかプロセスを完全に終了させても解放されないリソースが残ることがある
OSを再起動してやっと治る
こんなもんOSのバグとしか言いようがない
716デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:21:22.84ID:7/k6/GSg
>>702
あるね
>>699 こそやったこと無い香具師だと感じる
717デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:24:14.02ID:7/k6/GSg
>>703
Windowsにforkがあれば良かったと思うことは何度かある
718デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:26:12.71ID:7/k6/GSg
ああでも
>>703
>一方windowsではexeなんでクソ重い上に扱いが面倒
>データ共有やプロセス間通信も一苦労だ
>だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う

ここは完全に間違ってるよ
719デフォルトの名無しさん
垢版 |
2023/11/27(月) 09:30:39.99ID:7/k6/GSg
>>706
>C で、100スレッドを起動したら、
>CPU 使用率が高く、12秒も掛かったが、
>
>Goで100 goroutine を起動したら、
>6スレッドしか起動せず、9秒で済んだ

可笑しな理屈だな
スレッド数で比較するならgoでも100スレッド使って比較するか
Cの方でスレッド数増やさないCで描いたコルーチンで比較するべきだろ
2023/11/27(月) 10:19:10.91ID:bfNyVWtl
プロセスを分けて独立したメモリ空間の単位で障害を切り離して耐障害性を高めるのは昔からよく使われる方法だけどこれはスレッドやコルーチンでは代用できない

並行性を高める目的ならコルーチン+スレッドプールが最も効率が良い
C++やRustはまだまだ使いにくいけどGoやC#やSwiftのように使いやすいAPIが用意されれば誰もが当たり前のように使うようになる
2023/11/27(月) 13:17:02.15ID:y1vsdTcE
>>717
ある程度時間がかかる処理を並行で動かすという面でこれほど楽で使いやすいものはないしね
windowsへの移植性を上げるためにはforkを捨てなきゃならんのはかなり厳しい
2023/11/27(月) 13:22:19.90ID:y1vsdTcE
windowsくんェ
https://draftcode.github.io/2011/12/29/145918.html
2023/11/27(月) 13:27:11.60ID:UqO8a829
fork移植されてると思うけどそういう話ではなく?
2023/11/27(月) 13:40:29.77ID:y1vsdTcE
>>723
pythonじゃ使えないぞ
2023/11/27(月) 14:04:14.09ID:l+s92lQ4
遅くともcygwinとかで、なんちゃってforkは実装されてるけど、コレジャナイ感は付きまとうんだよな(個人の感想です
2023/11/27(月) 14:10:54.29ID:O2rw1r7K
execなしのforkなんて時代錯誤もいいところ
いまだに使ってるやついんのか?
さっさと引退するのが世のために
2023/11/27(月) 14:17:35.21ID:zZXu+dmb
RubyもNotImplementedError
Perlはエミュレーションしてるがすでに非推奨レベル
2023/11/27(月) 14:21:41.56ID:+D1aTXqp
こんどはforkを取り囲んでフェルマータするターンか
2023/11/27(月) 15:12:24.83ID:qB4qrVrI
forkは同じページを(書き換えるまで)共有できるのが売りだと思うけどwin版は最初からコピーするのか
そんな実装でfork爆弾作れるの?
2023/11/27(月) 15:12:35.28ID:l+s92lQ4
ま、雑談だからな おもしろければどうでもおっけー
2023/11/27(月) 15:37:56.10ID:+D1aTXqp
オジジジジジw

https://medaka.5ch.net/test/read.cgi/prog/1619943288/667
667: 仕様書無しさん 2023/11/24(金) 01:57:39.09
>>665
C++のスマポは機能が弱すぎてできないことが多すぎる
例えばヒープ領域しか指せないから
(L1キャッシュ効果と領域確保解放コスト無しで高速な)スタック領域の活用がスマポではできない
732デフォルトの名無しさん
垢版 |
2023/11/27(月) 15:50:29.33ID:UqO8a829
スタック領域をスマートポインタで指す必要はあるの?
2023/11/27(月) 15:57:04.75ID:l+s92lQ4
先々で、うっかりfreeするような書き方してしまったときにコンパイルエラーで止まってほしい
実体としては生ポだけど、チェック用の何かにラップされてる…そういうスマポ
2023/11/27(月) 17:16:07.46ID:FscsMJtl
いつものように誰かが書いてた受け売りで中身は理解してないんだろ
少し突っ込まれたら表面的なことを繰り返す壊れたレコードになる
2023/11/27(月) 17:19:29.35ID:ZLucLoet
www.microsoft.com/en-us/research/uploads/prod/2019/04/fork-hotos19.pdf
736デフォルトの名無しさん
垢版 |
2023/11/27(月) 19:00:17.85ID:UqO8a829
>>733
実装すれば良いのでは?
2023/11/27(月) 19:12:23.49ID:MloD+hDC
>>731
スタック領域は勝手に解放されますが
2023/11/27(月) 19:23:48.42ID:VTBvXWTh
Rustはヒープ領域だけでなくスタック領域にまで所有権やムーブや参照の概念を拡張したことから
C++よりスタック領域の活用で効率的になってる話ではないか
2023/11/27(月) 19:41:50.12ID:4LX/kS4x
>>738
コードで示してよ
C++の
2023/11/27(月) 19:55:41.13ID:XLFtaca7
>>738
単に「何でもスタックに積む」というだけでは?
ヒープはVec Box使わないと確保できないんじゃなかったっけ。
741デフォルトの名無しさん
垢版 |
2023/11/27(月) 19:57:13.46ID:ceTrdy2T
C++は書くのがしんどい
Rustもしんどいけど、生成AIに書かせたコードもコンパイルとテスト通ればメモリリークの心配なく使えるので気持ちは楽
2023/11/28(火) 03:07:58.34ID:iuwbNdCf
Boxってヒープのメモリどうやって管理してんの?スコープ?
743デフォルトの名無しさん
垢版 |
2023/11/28(火) 06:19:45.83ID:fb4KLmhh
>>734
ほんそれ
同じ香具師なんだろうバレバレ
2023/11/28(火) 07:21:41.08ID:p7m/jx+j
>>742
unique ptrみたいな感じじゃない?
2023/11/28(火) 07:38:03.63ID:OE19BKGq
>>736
自分なりには考えてみてるんだけどね

ベーシックな車輪くらい、削り出せなきゃいけない
ダサいので試してるってのは他言はしないけどね ここくらいだ
2023/11/28(火) 08:32:49.65ID:t7+ip2Xg
>>738
また嘘言ってる
Rustはヒープ領域だけでなくスタック領域にまで所有権やムーブや参照の概念を拡張したことから
C++よりスタック領域の活用で非効率的になってる

>>741
お前は死んだ方が良い
2023/11/28(火) 08:34:53.09ID:4GFkN+H+
スタック使うってカーネルで使えるん?
2023/11/28(火) 09:04:02.54ID:uB2ZO1/C
Rustの所有権チェックって、(コンパイル時にコストを寄せてるから)実行時はゼロコストじゃないん

へたくそに書いたら効率が下がる(たいてい実装効率が上がった犠牲)のは、C/C++も同じ
2023/11/28(火) 10:10:56.04ID:pC50QOa+
技術的選択というのは最終的には必ずトレードオフになるので
ある選択のプラス面だけしか見ない/考えない/認識できないやつは何やらせてもダメ
750デフォルトの名無しさん
垢版 |
2023/11/28(火) 12:14:38.37ID:0HFLSmnD
新人やお前らの前任の調子いいだけの奴がコンパイル通したコードで、rustとc++のどっちが安心できるかってことよ。
2023/11/28(火) 12:37:00.84ID:zgX3htu8
c++に自動変数専用参照とかあるといいんだけどなぁ。
自動変数にあるスマートポインタは参照渡ししたい。
2023/11/28(火) 14:34:16.09ID:5v5wYsOr
今更だけどNonNullクソ便利だな
753デフォルトの名無しさん
垢版 |
2023/11/28(火) 14:49:32.02ID:tbacT9e+
>>751
イマイチ分からんのだがコードで書ける?
754デフォルトの名無しさん
垢版 |
2023/11/28(火) 15:14:43.92ID:zjrE05Ar
>>632
と暇人が申しております
2023/11/28(火) 15:30:47.32ID:PhTWlmVC
>>753
void foo(shared_ptr<T>&&& p)
でshared_ptr&&&が自動変数専用参照だとすると、

void main() {
shared_ptr<T> ptr;
foo(ptr); //スタックにあると合法
shared_ptr<shared_ptr<T>> pptr;
foo(*pptr); //ヒープにあるとエラー
shared_ptr<T>&&& pp = ptr;
foo(*pptr); //次のスタックフレームに渡すのも合法
}
2023/11/28(火) 15:32:05.10ID:PhTWlmVC
>>755
あ、最後は
foo(pptr);
だわ。
2023/11/28(火) 20:15:20.15ID:QlCOA+Xa
メモリがスタックにあるかヒープにあるかはリンカのアドレスマップと連携すればわかる
つまり欲しいなら自作すればいいのでは
2023/11/28(火) 21:08:43.42ID:zgX3htu8
>>757
え?リンクでこねこにすればshared_ptrのカウンタを増減させなくて済むようになるんかね?

そういう最適化しているリンカとかあるの?
2023/11/28(火) 21:40:34.18ID:2tolr/zk
さっぱり意味が分からんのだけど
もしかしてshared_ptr&&&なる存在に参照されたshared_ptr<T>だけはスタック上にTを保持する何者かに化けろと要求している??
2023/11/28(火) 21:52:40.46ID:5v5wYsOr
何がやりたいのかさっぱりわからん
2023/11/28(火) 23:17:43.17ID:Y2Vu8rdK
クラスは必ずnewしないといけないと思いこんでいた昔のワイみたいな勘違いしてそう
2023/11/28(火) 23:30:04.45ID:p7m/jx+j
>>759
全然違う。
shared_ptr&&&なる存在には自動変数にあるshared_ptrだけしか代入できなくて、左辺値とかヒープにあるインスタンスを代入しようとするとコンパイル時にエラーになるだけだよ。

>>760
呼び出し元の方にあるスタックフレームに保存されている自動変数は、スタックフレームのLIFOを破壊しない限り存在を保証できる。そういう自動変数を呼び出し先から安全に参照したいだけだよ。
2023/11/28(火) 23:38:15.09ID:2tolr/zk
>>762
自動変数にあるshared_ptrは左辺値だが
2023/11/28(火) 23:41:06.97ID:2tolr/zk
そもそも参照に対して行えるのは代入ではなく初期化だし
2023/11/28(火) 23:43:48.38ID:QlCOA+Xa
無知ばっかりでここまで話が通じないと思わなんだ
スタックやヒープの開始アドレスがどこから始まるとか気にしたことないの?
rustの悪いとこ透けて見えたわ
2023/11/28(火) 23:55:41.04ID:xnaKz8pj
Rustならそんな複雑なことする必要もなく
Rustの方が優れている
ライフタイムさえ満たせば参照先がヒープかスタックか関係なく同一コードでその参照を安全に返す関数などを書くことができる
2023/11/29(水) 00:18:45.75ID:UMPQWy8o
言い訳ばかり達者で見苦しいスレだこと
768デフォルトの名無しさん
垢版 |
2023/11/29(水) 01:18:06.77ID:w45cg+MW
>>765
>>751
>>755 と話繋がってないけど。
スタックやヒープの始まりは >>755 のコードでも >>751 の要件でもわからんやん。
2023/11/29(水) 02:07:48.15ID:0GsI2ATG
どっかで身に覚えがある流れだなと思った
たぶん要件定義の時点でなんかおかしいよ
https://mevius.5ch.net/test/read.cgi/tech/1542002113/504-523
2023/11/29(水) 03:16:09.69ID:0jw/VZcC
いまいちメリットがわからない
ヒープのオブジェクトなら渡す前に呼び出し側でチェックすべきなのではないのか
2023/11/29(水) 03:26:29.12ID:nEUPDdEn
バカ強制矯正共生強請言語Rust
2023/11/29(水) 03:32:20.62ID:I6OxsG4L
>>757
どのOSも汎用的に判別できる方法はない
(組み込みは除く)
2023/11/29(水) 06:13:09.34ID:n75oaT1g
Rust推してる香具師はスタックとヒープの違いも判ってないのか
2023/11/29(水) 06:15:55.34ID:n75oaT1g
>>768 ←これはひどい
2023/11/29(水) 07:33:14.16ID:Oshr4ESo
関数の定義で、shared ptr の参照を安全に受け付ける仮引数の定義方法とかあるの?
効率化のためにインスタンスのコピーは無しの方向で。
776デフォルトの名無しさん
垢版 |
2023/11/29(水) 08:59:38.65ID:w45cg+MW
>>773
スタックの頭知りたかったらコマンドライン引数のアドレス取れば?ヒープの頭知りたかったら最初にsbrk(0)すれば?
2023/11/29(水) 09:22:10.12ID:cEfAMy5j
>>765
それでコンパイル時にエラーにできるのかい?
2023/11/29(水) 09:24:24.67ID:cEfAMy5j
>>775
「安全に受け付ける」の定義は?
特に何をもって「安全」と言ってるのか
779デフォルトの名無しさん
垢版 |
2023/11/29(水) 09:29:15.22ID:w45cg+MW
>>776
これだと実行時だわ、コンパイル時にはわからんわスマン。
ってか何でコンパイル時にスタックやヒープの先頭アドレス知りたいのかわからん。
リンクしないでなんてわかりようも無いし。
2023/11/29(水) 10:51:01.40ID:I6OxsG4L
rustはヒープとスタックを言語的に区別してライフタイムをトラックしてるだろ
それが欲しいならrust使えで終わり
c++では汎用的には無理
そういう要望は昔からある
2023/11/29(水) 11:14:58.09ID:wOoUvEHR
>>778
そりゃ、関数を実行している間は参照先が無効にならないことですな。
2023/11/29(水) 11:26:21.99ID:JCtBk62y
そもそもスタックに参照カウンタ必要か?
関数に対するスタックはプロセスに対するグローバル領域とライフタイムの考え方は同じ。
関数を抜けるまではスタックは有効だし、その関数以降に呼んだ関数が呼出元の関数を抜けた後も握り続ける状況は発生しえない
(別スレッドに共有したりヒープにCopy/Moveしない限りは)からshared_ptrにする必要がないと思うが。
つまり、

T x; // スタック
shared_ptr<T> x; // ヒープ

で型が異なるから、強引にCopy/Moveしなけりゃコンパイルエラーで検出できるし問題は起きない。
2023/11/29(水) 11:39:18.60ID:I6OxsG4L
>>755 はいまいちよくわからんが、ポインタを受け取る関数側でスタックかヒープを判別したいんだろ
かつてそれを解決するため手法としてregion based memory managementが開発された
rustのライフタイム管理の源流
2023/11/29(水) 11:46:11.39ID:wioHB1Dg
>>773
Rustでsafeにヒープが使われるのはBoxとVecおよびそれらが組み込まれた型のみなのでヒープかスタックか明確に区別がつく

>>780
参照になった時点でヒープかスタックかの区別なくライフタイムのみで安全に扱えるところがRustの勝因かな
スタック領域を指す参照についても関数から返してよい参照と返してはいけない参照の区別がライフタイムでなされる
2023/11/29(水) 12:57:35.03ID:/iUfnYRG
例が微妙だな。直しておくか。

void foo(shared_ptr<T>&&& p)
でshared_ptr&&&が自動変数専用参照だとすると、

shared_ptr<T> bar()

void main() {
shared_ptr<T> ptr;
foo(ptr); //自動変数だと合法
foo(bar()); //自動変数でないとエラー
}

void foo(shared_ptr<T>&&& p) {
baz(p); //次のスタックフレームに渡すのも合法
}
2023/11/29(水) 13:05:45.44ID:I6OxsG4L
>>785
shared_ptr<T>を使うから意味が不明なんだよ
Tが置かれる場所がスタックかヒープかなんだろ?
2023/11/29(水) 13:32:40.14ID:SVBOdyHv
void foo(T& p){}
void foo(shared_ptr<T>& p){static_assert}
2023/11/29(水) 13:33:08.54ID:pBsavzeJ
>>768
なんやこれ
頭がおかしくなりそう
789デフォルトの名無しさん
垢版 |
2023/11/29(水) 13:37:19.41ID:qKmTtpoR
>>773
スタックとヒープの違いが分かってなくても使えるなんて、なんて素晴らしい言語なんだ
2023/11/29(水) 13:52:43.41ID:pBsavzeJ
もういいよ
議論するレベルになってない
引っ掻き回したいだけだろ
この話題終わり
ゴミだから
2023/11/29(水) 14:48:01.22ID:wOoUvEHR
>>786
違う。
「shared ptr」の置かれている場所がスタックかヒープか。この場合だとTはヒープ。
>>785はとりあえず「shared ptrが」自動変数にある場合だけエラーにならないのを想定。
2023/11/29(水) 15:04:52.17ID:0jw/VZcC
はい終わり終わり
2023/11/29(水) 15:22:50.48ID:I6OxsG4L
>>791
shared_ptrの参照カウントの操作を省きたいならshared_ptrの参照渡すか生ポインタ渡せばいいだろ
それかrustにしろ
2023/11/29(水) 15:29:56.33ID:0GsI2ATG
「lvalueよりさらに限定された値カテゴリを作って、それだけを指せる参照を導入したい」という欲求

もしかして: ライフタイム
2023/11/29(水) 15:56:42.98ID:8C/SUjDF
ヒープを排除したいのは参照してる間にfree/deleteされるのを気にしてるからかな
Rustだとライフタイムというよりborrow checkで解決してる問題
2023/11/29(水) 16:40:54.30ID:wioHB1Dg
>>795
そこでborrow checkerが具体的にしていることがライフタイムの妥当性(やミュータビリティの妥当性など)
2023/11/29(水) 18:22:15.98ID:g4z1paMZ
>>781
ポイントしてる先がどうなってるかは関係なくてshared_ptr自体がスタック上で生きていれば「shared_ptrへの参照」は無効にならないということを「安全」だと言ってるという理解でいい?
2023/11/29(水) 20:22:08.97ID:/iUfnYRG
>795 >797
そういう話。
RustだとRc<T>の参照をbollow checkerで(たしか)安全に管理できたけど、c++はshared ptr の参照なんて気にもしないで破棄するから、せめて自動変数に置くことを強制しできればちょっとだけ安全に効率化できるのにな、ぐらいの話。
2023/11/29(水) 20:54:47.61ID:8C/SUjDF
RustのRcもC++のshared_ptrも参照でやり取りするより
Rc本体をclone(C++なら値渡しでコピー)した方が使いやすいと思う

中身じゃなく本体を参照渡しするなら参照カウンタ増えないしRc(shared_ptr)使う意味がなさそう
shared_ptrは元データが破棄されてもコピーが生き残ることに意味があるわけで
この例でshared_ptrを使われると話がややこしくなる
2023/11/29(水) 22:26:34.34ID:gjeaJk+d
>>798
なるほどそういうことならAST的なものに対してカスタムルールを定義できる静的解析ツールみたいなもので頑張ればチェックはできそう

ただポイント先が途中で変化しても安全と言えるかどうか微妙
Arc/Rcはownerが複数いる場合はポイント先が変更されないことも保証されてる
2023/11/30(木) 12:27:38.75ID:MXha9GzH
ライフタイムチェックが今のRustと同じレベルになるのは早くてもC++32以降なので過度に期待せず気長にお待ち下さい。
2023/11/30(木) 13:55:26.66ID:7CM8sx7O
>>791
その理屈だと
>>784 も頓珍漢なこと言ってる
2023/11/30(木) 13:57:58.44ID:7CM8sx7O
要するに
>>782
で話は終わってる
2023/11/30(木) 14:51:08.28ID:JOtYuMwa
的はずれなことを書いてる自覚がないとはな
複オジ(>>784)のほうが多少自覚してるだけマシかもしれんぞ
2023/11/30(木) 15:21:08.01ID:D7FKv4Y4
>>800
自作でやるならかなり大変で、自作言語作るのと工数変わらないかも。
それならRust使ったほうが楽かね。
2023/11/30(木) 16:35:34.05ID:5k4SwxyG
いや服おじは論外
2023/12/01(金) 20:56:33.56ID:2VykkaiV
>>801
サポートするとC++ではなくなってしまう
別言語を同居させたようになり混乱が増す
2023/12/02(土) 00:20:14.03ID:qhhzthLD
C++はもうテンプレートで道を一度踏み外してる外道だから今更だよ
2023/12/02(土) 21:13:09.29ID:Lt6EdYBh
Javaからプログラム始めたからC++の静的ポリモーフィズムやるconceptの制約がわかりにくすぎて使いこなせん
C++20のconceptを使いこなせてる猛者さん、果たしてスレにおるのかね
810デフォルトの名無しさん
垢版 |
2023/12/02(土) 21:29:52.21ID:ojltmATj
C++で継承をやろうとするのが間違いなんだよね😇
テンプレートはゴミ!
ゴミなんです!
2023/12/02(土) 22:01:16.75ID:PDmr7t8h
C++使ってるけど継承もテンプレートも使ってないな
812デフォルトの名無しさん
垢版 |
2023/12/03(日) 11:30:00.35ID:QTewqrs7



2023/12/03(日) 13:55:04.97ID:vkjAQods
最近新プロジェクトでC++書かなきゃいけなくてRust使いたがったが
外部システムやライブラリとの絡みで仕方なくC++を使うことになったのだけど

std::shared_ptr
std::weak_ptr
std::move
ムーブ代入演算子
ムーブコンストラクタ
enum class
constexpr(主に設定値のテーブル初期化などに使う)

新しい要素だとマジでこれだけしか使ってなかったよ
継承なしテンプレートなし
外部ライブラリとしてonetbbとminimalloc使ってるだけ
これだけでもそこそこモダンなプログラミングができる
あと足りないのはライフタイムだけかな
C++にそれがきたらRustはいらないけど果たしていつになるのか
2023/12/03(日) 14:26:32.44ID:KItL/kTG
shared_ptr使ったならテンプレートなしは言いすぎかな
自作テンプレートなしってところか
テンプレートはライブラリとか裏方向けの要素だからアプリ開発ではあまり使わないかも
815デフォルトの名無しさん
垢版 |
2023/12/03(日) 14:31:19.88ID:Xy0LqFPl
は?
816デフォルトの名無しさん
垢版 |
2023/12/03(日) 16:51:09.16ID:455UU+Ox
>>813
STLって何の略だか知ってる?
2023/12/03(日) 17:00:48.99ID:qGjodFlK
>>815
は?
2023/12/03(日) 17:02:40.23ID:POEAPkcj
自作テンプレートって意味だろ
文脈理解できないんだな
全部書かなきゃ理解できないタイプ?
2023/12/03(日) 17:43:27.43ID:wvh0Q/xj
>>818
はww
2023/12/03(日) 17:57:09.24ID:st4Oydl2
このスレはワッチョイ必要だねえ
次スレの1の本文先頭に以下を追加しといてね
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
(新スレ立ての際上記コマンドを2行書き込んでください)
821デフォルトの名無しさん
垢版 |
2023/12/03(日) 18:05:13.75ID:7+5J7jul
>>818
はww
2023/12/03(日) 19:07:22.56ID:hEqJHVGR
わかる 裏方向けっていうか、裏方モードのときだね
アプリ開発してる最中に、ややこしいクラスライブラリを内製してる…ばっかりでもない
2023/12/03(日) 19:10:50.45ID:hEqJHVGR
人殴ったりはしないけど、アホなこと書いたりはしちゃうんだよねえ(無知を晒す自爆型)
1日経ったらチャラになってくれたほうが気は楽
2023/12/03(日) 19:13:42.60ID:Y6w6S9dN
次スレ自体いらんが
2023/12/03(日) 19:55:23.02ID:hEqJHVGR
絶対必要なモノなんてない 俺すら不要物
2023/12/03(日) 20:29:50.68ID:2KUtTHRr
俺スラ?
は?
www
2023/12/03(日) 20:33:01.48ID:PuZI2f4X
>>819
効いてる効いてるw
2023/12/03(日) 21:02:12.27ID:o7sDI4zZ
じゃあベアメタルではヒープとスタックはどうなるの?
829デフォルトの名無しさん
垢版 |
2023/12/03(日) 22:33:53.82ID:K2dbitVB
まだいたのかベアメタル
2023/12/03(日) 22:41:05.20ID:hEqJHVGR
マイコンいろいろ買ってみたけど、結局デスクトップばかりいじってる俺、なんとも言えずw
2023/12/03(日) 22:55:35.48ID:idvLkFW9
RVOにより呼び出し元でスタック領域を確保できつつ
Rustのようにスタック領域に対しても自動的にライフタイム管理ができていれば
コストの高いヒープ領域利用を可能な限り減らしつつ
スタック領域を指す参照(ポインタ)を返したり他へ埋め込んだりしていても安全に使える
というシンプルな話
832デフォルトの名無しさん
垢版 |
2023/12/03(日) 23:01:41.36ID:hT/LokGW
C++もRustもベアメタルという土俵で真価を問われると思うよ
小型軽量ガジェットでAIを高速に処理出る言語に需要があると思ってる。
2023/12/03(日) 23:04:45.84ID:8f6BMxsw
ねーわw
ガジェットww
834デフォルトの名無しさん
垢版 |
2023/12/03(日) 23:06:04.65ID:JMjzgwiz
ガジェットじゃなくて組み込みデバイスと言え
2023/12/03(日) 23:16:00.90ID:KItL/kTG
Rust使ってるとヒープ領域はスタック上のどこかの変数の運命共同体って感覚になるから
ヒープだからコストが高いって言われると何か違和感がある
Box(ヒープ配置)にするかしないかでたまに迷うけど

【スタック領域】
・サイズが固定
・確保、解放のオーバーヘッドがない
・スタック上で頻繁にコピーされるからでかいと不利

【ヒープ領域】
・サイズが自由
・確保、解放のオーバーヘッドがある
・基本的に移動しないからでかいときに有利

みたいなイメージで使い分けてる
スタック/ヒープだから安全/危険とかは特にないな
836デフォルトの名無しさん
垢版 |
2023/12/03(日) 23:16:28.96ID:hT/LokGW
明日仕事がいやでストレスためてそうやなw
2023/12/03(日) 23:38:17.10ID:4Lj+S9P7
>>835
>>・スタック上で頻繁にコピーされるからでかいと不利

意図的に移動しない限りコピーはされない
ヒープと同じで基本的に移動の必要はない
唯一コピーが起きそうに見える関数返しによる初期化はRVOによりコピーされない
ヒープと同じで確保後はそこへの参照のみ扱うため移動コピーは起きない
2023/12/04(月) 00:12:41.83ID:ista3uD6
Result型とかOk(T)とErr(E)のTとEが同じ場所に置かれそうだけどRVO機能するのかな
真面目に調べたことないけどあまり当てにしてない
最適化で適用されたらラッキーくらいの感覚
2023/12/04(月) 01:36:48.81ID:DD5cHxD/
>>835
スタックは常にキャッシュにのってる
2023/12/04(月) 02:21:32.80ID:7y9dHiQE
まあRustはこのまま死ぬんだからどうでもよくね?
841デフォルトの名無しさん
垢版 |
2023/12/04(月) 03:52:22.51ID:ukOfFF9P
>>840
おまえのレスよりは重要だろ?
2023/12/04(月) 04:29:02.89ID:IuiYb6LZ
>>840
お前自身がどうでもいい
2023/12/04(月) 05:55:52.64ID:9MFLJqwq
>>833-834
ハンドヘルドとはいえ、64bitレジスタ当然、メモリもギガバイト当然、ってそんなの組み込みっていうんかw

// てなことだと思う
2023/12/04(月) 10:07:12.79ID:vGycO/bS
>>835
NGワードかもしれんが
stackのメリットは基本的にGCのこと気にしなくて良くなる感覚
2023/12/04(月) 11:26:40.76ID:t4TeK/vS
たまにバカでかいオブジェクトをスタックに置くやつが現れるが
スタックは一度伸びたらするスレッド死ぬまで開放されないからメモリ無駄遣いになる
組み込みやコンソールゲーム作ってるとこだとスタックに置けるオブジェクトのサイズの制限決めてるとこあると思うけどチェックがムズいよな
昔仕事でライブラリ開発したときは最大スタック消費量が仕様で決まってた
バグフィクスでもその上限超えてはならない
2023/12/04(月) 12:05:08.64ID:EKSqu5ND
>>813
そりゃ、テンプレートとかは基本ライブラリアン向けの機能で、コーダーから複雑性を隠蔽ながら高度な機能を使わせるためのものだからな。

コーダーが自作テンプレートを使わなくてはならない状況になったら、何か設計が間違っていないか注意する必要がある。
まぁc++だとそういう状況もあるから辛いけど。
2023/12/04(月) 12:20:54.27ID:EwsyjZMT
>>837
>意図的に移動しない限りコピーはされない
これは微妙すぎる
「意図的」も「移動」も恣意的過ぎるから後出し無敵じゃんけんにしかならない
コピーされないこともあるがコピーされる可能性を前提として最初から考えておくべき
2023/12/04(月) 12:32:02.91ID:5v4NXSIj
Rustのmonomorphization使った静的ポリモーフィズムと同じようなことしたければC++はテンプレート必須だから
ハイレベルのコードしか書かないアプリケーションプログラマーでも普通に使う必要があるでしょ
2023/12/04(月) 13:13:30.82ID:TyudsW/I
>>845
そういやスタックは一度伸びたら伸びっぱなしだったな
これ傍から見たらメモリリークにも見えるし
何でもスタックはあかんのじゃないか
2023/12/04(月) 13:29:26.93ID:+6ZMbPCa
誰からも指摘されずにどんどん明後日の方向に向かって行っているのは見てる分には面白い

どうか第2の毛の壁と化しませんように
南無阿弥陀仏
2023/12/04(月) 13:38:09.73ID:EKSqu5ND
>>849
スタックの取扱いを調整すればよろし。

コールスタックとデータスタックを分けてデータスタックをメモリブロックにするとか、大きいのはマネージドヒープに置くようにするとか。
だんだんヒープに近くなるからスタックのメリットは無くなるけど。
852デフォルトの名無しさん
垢版 |
2023/12/04(月) 19:31:46.91ID:Vux7QnQs
コードをよりコンパクトな短文にしようと追求したらテンプレートを使うようになるのはごく当たり前だよ
2023/12/04(月) 19:42:38.90ID:BRBvRtzF
>>835
モダンなC++もそれだぞ

class Hoge {
private:
std::shared_ptr<HogeInternal> hoge;
};

Hogeは常にスタックに割り当てる
実際のオブジェクトはHogeInternalで実装する
こうしておけばめちゃくちゃ安全になる
2023/12/04(月) 19:56:42.31ID:S3L8tG/0
なんで馬鹿はshared_ptr使いたがるんだろう
生ポでいいだろ
2023/12/04(月) 20:13:20.11ID:ista3uD6
3/5/0則を知らないもっと馬鹿なやつがdelete用のデストラクタだけ実装して
事故が多発したからでは
2023/12/04(月) 20:18:13.44ID:61k0lpUm
>>853
それはHogeInternalがヒープ領域に置かれてしまいスタック領域の利用ではない
さらに参照カウントのオーバーヘッドもある
857デフォルトの名無しさん
垢版 |
2023/12/04(月) 20:23:01.45ID:lyR6TlPF
C++、雰囲気で書いたらすぐに壊れるくせに文法がどんどん増えていくのついていけねえわ
どんだけの勉強コストを一つの言語に払わせる気だよ
C++に人生捧げて他のこと何も出来ない無能だけが扱える言語となりつつある
2023/12/04(月) 20:27:01.58ID:648vwdUw
3/5/0則みたいな言語の欠陥に疑問を持たなくなったらもう終わり
2023/12/04(月) 20:31:26.59ID:KZyfgQnR
>>856
いだから置くんだよ
伝わってないみたいだから説明するとHogeに直接実装しないってことを言ってる
間接参照を一段挟むのよ
こうすることでコピーしまくっても問題ないヒープに確保されたオブジェクトができる
多少オーバーヘッドは生まれるがめちゃくちゃ安全性は上がるんよ
860デフォルトの名無しさん
垢版 |
2023/12/04(月) 20:32:20.03ID:oiJ5wZfJ
そそ、難解な概念使いこなせるのはすごいけど、会社でマウントとれるだけ
世の中が求めてるのはそこじゃない。
2023/12/04(月) 20:59:36.17ID:H6ggqIOp
>>859
Rustを使えばヒープではなくスタック領域に確保してそこへの参照をオーバーヘッドなしで安全に使えるよ
その点がRustとC++の差
2023/12/04(月) 21:10:50.41ID:61k0lpUm
>>859
ヒープを使うというオーバーヘッドに加えて
参照カウントを使うというオーバーヘッドまで加わる
もちろん各々が不可欠な場合や両方が不可欠な場合もあるがその前提や吟味をせずに
まともなプログラマーがとる選択肢ではない
2023/12/04(月) 21:14:53.25ID:KZyfgQnR
>>862
嫌だから共有が必要な場合って書いてあるだろ
日本語読める?
共有じゃないならstd::unique_ptrでもいいよ
2023/12/04(月) 21:15:11.88ID:KZyfgQnR
Hogeに実装しないことでコピー時のオーバーヘッドを防ぐ
さらに個別にコピーのことを考える必要性がなくなる
HogeInternalのコピーコストだけで済むため高速
shared_ptrは安全にコピー可能
データは共有できメモリ管理も自動で行われる
ヒープにとらなきゃいけなくて共有する可能性があるオブジェクトはこのパターンで実装してください
マジで何も考えなくていいから
2023/12/04(月) 21:18:26.98ID:KZyfgQnR
>>861
C++で極力Rustっぽく書くにはどうすべきかを突き詰めたらこうなった
褒めてくれ
2023/12/04(月) 21:25:29.71ID:H6ggqIOp
>>863
Rustなら参照の共有はヒープを使わずスタックに置いてあるものに対しても安全に可能です
もちろん参照カウンタは必要ありません
ちなみにRustでC++のshared_ptrに相当するRc/Arcを必要とするのはもっと限定された状況で所有の共有が必要となる時のみです
2023/12/04(月) 21:32:42.16ID:KZyfgQnR
新たな間接参照でラップすることであたかも普通の変数を作るかのようにヒープに値を置ける
このパターンめちゃくちゃ有用なんだがなぜあらゆる本で紹介されてないんだ?
2023/12/04(月) 21:35:03.72ID:KZyfgQnR
コロンブスの卵だわ
誰もが思いつきそうで思いつかなかった
2023/12/04(月) 21:39:30.12ID:KZyfgQnR
>>866
まあその辺はさすがRust
2023/12/04(月) 21:41:03.87ID:ista3uD6
本気でRustに寄せるならunique_ptrの方がいいな
コンパイラが助けてくれないから死にそうだけど
とりあえず循環参照だけは気を付けてくれ

>>867
目的はちょっと違うけどPimplってイディオムがある
871デフォルトの名無しさん
垢版 |
2023/12/04(月) 21:54:58.33ID:85Eugi9n
継承じゃ無くて、包含して各メソッドをバトン渡しすれば良くね?
2023/12/04(月) 22:45:48.75ID:t1H4jiv7
>>867
他のやつも書いてるけどpimplな
20年前から知られている
ひたすらdelegate関数を書くのがだるい
使う側がshared_ptrで包むというルールのほうが楽
873デフォルトの名無しさん
垢版 |
2023/12/04(月) 23:15:56.57ID:o6jCQk0t
>>872
>ひたすらdelegate関数を書くのがだるい
書かねば良いのでは?
2023/12/04(月) 23:53:40.38ID:xybHpH7g
>>867
間接参照でいいならわざわざクラスでラップしなくてもshared_ptrそのものでいいように思うんだが
shared_ptr<HogeInternal>で扱うより
ラップしたHogeで扱ったほうがいいメリットって何?
875デフォルトの名無しさん
垢版 |
2023/12/05(火) 00:09:25.25ID:NEqb8LdH
mallocでメモリ確保するの気持ちイィ🥴
2023/12/05(火) 00:55:04.31ID:gtr9NjJz
>>872
20年前にこの概念が存在していたのか
当時はauto_ptrとかオレオレメモリ管理モジュールだったとは思うけど
2023/12/05(火) 00:58:42.15ID:gtr9NjJz
>>872
ライブラリとして定期したい場合はshared_ptrで常に包むルールを強制するのも難しいとかかな
2023/12/05(火) 04:45:21.81ID:55rynLOP
delegate指定子欲しいよな。
クラスor変数でまとめて指定できればなお良し。
2023/12/05(火) 05:43:53.62ID:DR8rm2oC
それってRustのDeref?
880デフォルトの名無しさん
垢版 |
2023/12/05(火) 08:01:23.94ID:HiCWBikd
std::byteを使ってみた結果
危険な計算ができるのがC/C++を使う理由という結論になった
2023/12/05(火) 08:50:09.72ID:iiJ5Z2H1
一人で何役やってるの?
2023/12/05(火) 09:49:41.30ID:Akhn3hwz
>>881
数えてみろよ
2023/12/05(火) 10:22:23.63ID:0dgzhl7w
>>877
Factoryメソッド経由でしかインスタンス化できないようにするとかして常にshared_ptrやunique_ptrで返すようにすればいいのでは?
2023/12/05(火) 10:50:40.33ID:cS2yZHjP
>>879
delegateに欲しいのはあくまでAdaptorの実装を簡単にする機能。

参照外しとかして型を変えるのはNG。
2023/12/05(火) 11:56:35.63ID:pNurA5HJ
Rustのdelegate!のようなことがC++ではまだ出来ないということか
汚いマクロ書けばできそうだけど綺麗に書くにはReflection待ちなのかな
2023/12/05(火) 13:26:22.00ID:iiJ5Z2H1
>>882
こういうキチガイ対策にワッチョイ必要かもな
2023/12/05(火) 13:34:36.87ID:gtr9NjJz
>>882
きっしょw
2023/12/05(火) 14:18:15.60ID:DR8rm2oC
>>884
スマートポインタなのだから
Derefにより自動的に参照できれば十分だろ
2023/12/05(火) 14:23:46.88ID:4UYj/sQ8
ワッチョイ立てたってところで結局また次世代言語スレと同じ流れになってRustスレに帰ってくるんだろ
2023/12/05(火) 14:24:46.44ID:4UYj/sQ8
×立てたってところで
○立てたところで
2023/12/05(火) 14:31:18.82ID:1iJo44eg
Adaptorにだけ執拗にこだわるオジもアレだか
Adaptorも知らずにDerefを勧めるオジは論外
2023/12/05(火) 14:58:30.60ID:gtr9NjJz
>>883
ユーザーに返す型では流石に気持ち悪いと思うなあ
C++難し過ぎるだろ
選択肢が多過ぎる
かといって安全でもない
もうRust使わせてくれ
2023/12/05(火) 15:21:39.57ID:MywljXTh
>>892
別の理由でfactory使うときはどのみちshard_ptrかunique_ptrにせざるを得ない
(生ポインタはありえない)
だからそこを気持ち悪いと言っても仕方ない
2023/12/05(火) 15:51:48.29ID:Nvodex4n
>>892
Rustでもそこは同じだと思うよ
ライブラリからBoxやArcが返されるものもあればそれらをラップした型が返されるものもある
シンプルなケースなら前者の方が圧倒的に使いやすい
内包する型のネストが深い場合などで便利メソッドを提供するなら後者ってイメージ
要はラップするだけの付加価値があるかどうか
895デフォルトの名無しさん
垢版 |
2023/12/05(火) 15:52:25.13ID:QJai9ytv
>>854
馬鹿は平気で二重に解放したりする
全然気にしないから馬鹿なんだけどね
2023/12/05(火) 16:00:15.02ID:8v2tQb+c
>>854
いやいやいやいやw
2023/12/05(火) 16:26:52.90ID:sq6EbAl6
リファレンスカウンタ方式のGCを基本にするんならGC言語でいいんじゃねってならない?
2023/12/05(火) 16:45:36.42ID:iiJ5Z2H1
>>889
えー
2023/12/05(火) 16:47:29.78ID:MywljXTh
ならない
リアルタイム系アプリでGCは困る
2023/12/05(火) 17:17:38.64ID:CoP1YuvK
循環参照で発生するリークを検出するか放置するか
あるいは循環参照を回避するか
それが問題だ
2023/12/05(火) 17:29:27.24ID:W0r7TCUZ
>>899
マークスウィープの話をしてないぞ
リファレンスカウンタ方式のGCすら使えないというならshared_ptrも同様に使えないということになる
2023/12/05(火) 17:59:20.81ID:ugZXhcp8
手動メモリ管理のできないGC言語は高コストをかけて循環参照を回収せざるをえない
手動メモリ管理のできるC++/Rustは循環参照を避けることができて低コスト

その話とは別にshared_ptrやRc/Arcは参照カウンタによるコストがかかる
そのため複数所有者を使わざるを得ない場合に限定して用いる
2023/12/05(火) 18:13:07.15ID:Ppu4uIXE
>>902
Weak Reference等を使って循環参照を手動で避ける方法が用意されてるかどうかは手動メモリ管理かどうかとは全く関係ないよ
2023/12/05(火) 18:43:14.63ID:gtr9NjJz
>>894
気持ち的にはラップしたいかなあ
2023/12/05(火) 19:04:48.69ID:gtr9NjJz
全銀システム障害「詳細設計書見落とし」でオーバーフローの痛恨、再発防止なるか
https://xtech.nikkei.com/atcl/nxt/column/18/00001/08680/

Rustを使えばいいじゃない
2023/12/05(火) 19:13:25.15ID:gquaqYbt
IBMだったらJavaだったのに
907デフォルトの名無しさん
垢版 |
2023/12/05(火) 19:18:25.05ID:800y2Su3
積極的にC++を使いたがる人ってC++のどこに魅力を感じているんだ
2023/12/05(火) 19:24:31.25ID:GrTJwyK/
Cとの互換性
909デフォルトの名無しさん
垢版 |
2023/12/05(火) 19:32:43.32ID:4rw/VL0P
>>897
問題はGC言語は *常に* GC機能ありなところ。
2023/12/05(火) 19:40:36.09ID:iiJ5Z2H1
>>907
オブジェクト指向w
911デフォルトの名無しさん
垢版 |
2023/12/05(火) 20:04:51.38ID:3vhS3QGH
リファレンスカウンター気にするくらい速度を求めるなら、RAIIすら嫌だとはならんのかな
mallocはプログラムの最初に一回呼ぶ以外は許されない
912デフォルトの名無しさん
垢版 |
2023/12/05(火) 20:31:30.51ID:GM9Glwep
>>907
組み込み系でオブジェクトやりたい人
あと意図的に悪意あるコードを仕込む人とか。
913デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:15:38.20ID:HiCWBikd
やりたいことが出来るのが一番の理由
アンリミテッドが魅力
2023/12/05(火) 21:36:14.43ID:9fH1d+k3
参照カウントて結構コストあったよな……と探したら解説見つけた。
yamasa.hatenablog.jp/entry/2021/01/29/012525

昔は並列処理と相性悪いと言われていたけど、今はどうかね?
2023/12/05(火) 21:36:19.50ID:ckmQfDX3
++C Unsafety Unlimited C++
2023/12/05(火) 21:43:08.45ID:tZxAn7Rl
>>909
GC言語でもunsafeで手動管理とかできるよ
Rustと同じで基本がsafeだからC++をsafeにしていくよりもずっと簡単で問題が起きにくいアプローチ
2023/12/05(火) 21:59:57.96ID:puqODfvy
>>902
>そのため複数所有者を使わざるを得ない場合に限定して用いる
複数所有者を使わざるを得ない状況かどうかを確実に見分けるのはそれなりに難しい
Rustの場合はコンパイル通らないから無駄にRc/Arcを違うことはあっても逆はないので安全
C++は逆もある
>>853が「めちゃくちゃ安全になる」と言ってる理由もその辺にあるのでは
2023/12/05(火) 22:10:46.45ID:vNAfxFS3
>>911
RAII自体はコストゼロ
RAIIで解放されるスタック上の値の型にデストラクタがある時にその実行コストがかかる
そしてヒープ領域を所有していればヒープ解放コストがかかる
何度もヒープ確保解放を繰り返すよりはなるべく最初に確保するのはもちろん正しい
スタック領域で済ませられるならさらに望ましい
2023/12/05(火) 22:57:00.41ID:iiJ5Z2H1
全部独り言だったりしてw
2023/12/06(水) 01:20:30.01ID:N0N71GtG
メモリに展開するのにオーバーフローしてもエラーを通知しないの?
https://japan.zdnet.com/article/35212258/

言語はCらしいけどどういうプログラムなんだろう
まじでmallocしてそこにmemcpyしてるだけなんじゃないか
対策はRustで書き直せ
2023/12/06(水) 01:23:15.09ID:N0N71GtG
たとえクソレガシーだったとしても書き込むアドレスの範囲が想定してるものかのチェックは入れるべきだろう
どうせオフセットも手計算だろうし
922デフォルトの名無しさん
垢版 |
2023/12/06(水) 01:40:45.31ID:MT5mgeUa
>>916
>>909
>GC言語でもunsafeで手動管理とかできるよ

どの言語?具体名あげてくれ。
2023/12/06(水) 01:58:21.86ID:+XLnMsko
[gc unsafe] [🔍]
2023/12/06(水) 09:15:07.04ID:oM0gjrfW
>>867-868
循環参照は?
925デフォルトの名無しさん
垢版 |
2023/12/06(水) 09:17:14.31ID:oM0gjrfW
>>867
>あらゆる本で紹介されてない

a)全ての本で紹介されていない
b)紹介された本がひとつもない

どっちの意味?念のため確認
2023/12/06(水) 09:18:07.12ID:oM0gjrfW
>925 補足
a)全ての本で紹介されていない (紹介されてる本は少なくとも一つ以上ある)
2023/12/06(水) 09:20:39.56ID:oM0gjrfW
>>868
思い付いている人は大勢居る

>>865
>C++で極力Rustっぽく書く

いやいや Rust 以前から Rust 無関係に C++ で普通に C++ っぽく描いた結果でしょ
きみ承認欲求強過ぎるね
2023/12/06(水) 10:53:51.94ID:CNnXy5JV
>>922
メジャーなとこで言えばC#とかSwiftとか
2023/12/06(水) 11:45:54.12ID:oM0gjrfW
>>905
やっぱりNATテーブル不良で再起動したら治るルーターじゃん
2023/12/06(水) 12:09:32.50ID:4VSkBLs6
>>929
頭大丈夫か?
2023/12/06(水) 12:31:44.18ID:3kI3ay52
型推論の是非を問いたい
書くのは楽かもしれないが読みにくくね?
型の重複記述は省きたいがまったく型がわからなくなると理解が難しくなる
読みやすさを優先すべきだと思うがどうだろう
IDEやエディタのサポートでカバーされるという考え方もあるが、カーソル合わせないとわからないしな
2023/12/06(水) 12:44:38.03ID:lEEu+DT0
>>931
ややこしい型の手書きとか効率悪化の元だから駄目。

せいぜいIDEに型のコメントを自動生成させるくらいまでだな。手動は更新されなくなってバグの温床になる。
933デフォルトの名無しさん
垢版 |
2023/12/06(水) 12:46:06.06ID:MT5mgeUa
>>931
けっこう同意。
変数初期化ではリテラルでの場合だけ型推論利用して、そうでなければ型書いちゃうことも多い。
934デフォルトの名無しさん
垢版 |
2023/12/06(水) 12:51:11.58ID:MT5mgeUa
>>932
>手動は更新されなくなってバグの温床になる。

型変わったらコンパイル通らないし、型明示がバグの温床になるってのは無い。
修正の手間が増えるってのはわかる。
2023/12/06(水) 12:54:09.75ID:B4jpx9xe
複雑な型名を知る必要がない場合も多い
例えばRustなら関数の引数型も返り型でも具体的な型名を書かずに
impl Trait名 と使う機能のトレイト名だけを指定したり
2023/12/06(水) 12:56:26.38ID:lEEu+DT0
>>934
c++はスライシングあるからエラーにならない例外もある。
レアケースだけど。
937デフォルトの名無しさん
垢版 |
2023/12/06(水) 13:09:40.96ID:6EzLMFr7
同じ情報を二重に書くのはプログラマなら普通疑問に思う
2023/12/06(水) 13:12:47.35ID:N0N71GtG
>>924
コピー時はweak_refで渡すので良いかと思うのだが
2023/12/06(水) 13:14:02.81ID:N0N71GtG
>>925
普通に考えてaじゃないの?
なんで紹介とか出てくるんだ?
2023/12/06(水) 13:17:03.16ID:3kI3ay52
>>937
ある程度の重複さによってミスを早期発見できる効果があるから一概にそうはいえないぞ
2023/12/06(水) 13:31:08.88ID:UHi6Tpqq
俺のプログラムにバグがあるのは
俺がまだ本気出してないだけだから
2023/12/06(水) 13:38:13.20ID:+XLnMsko
どれだけスレが進行しても客観的な基準が示されず
主観バトルを発生させ続け
留まるところを知らない概念

可読性
2023/12/06(水) 13:40:26.85ID:uGBP6FLN
>>938
いやそれだとshared_ptrの意味ないから
shared_ptr使う限りは本質的には解決は難しい
それは生でshared_ptr使う場合も同じ
get_weakというメソッドでweak_refでラップして返すメソッドを提供するとかだろう
2023/12/06(水) 13:44:37.37ID:uGBP6FLN
全銀のシステムこの規模で低レイヤーのメモリ操作しまくるのにC使ってるのマジで狂気としか思えないな
コードレベルのユニットテストもないのだろうし
絶対こういうこと起きるやん
945デフォルトの名無しさん
垢版 |
2023/12/06(水) 13:55:39.00ID:6EzLMFr7
>>940
保守できなくなるから必ず避けるべき
2023/12/06(水) 14:04:56.53ID:3kI3ay52
>>945
プログラミング言語自体、ある程度の冗長性があるようにデザインされている
たからこそコンパイルエラーという現象が起こる
そもそもテストを書くという行為が重複した作業なのだけどやるだろ?
仕様変更したら書き直しなのは仕方ない
2023/12/06(水) 14:06:40.52ID:ts/cnrJA
Cであることは関係なくね?
データ形式の共有に失敗すればどこでも起こりそう
記事だけだとよく分からんけどAAABBBをABABABって誤認した感じでしょ
2023/12/06(水) 14:10:35.44ID:4S+GIU/C
ABAP
2023/12/06(水) 14:11:26.67ID:6EzLMFr7
>>946
>プログラミング言語自体、ある程度の冗長性があるようにデザインされている
それは妥協の産物で悪だよ

>たからこそコンパイルエラーという現象が起こる
冗長性がない言語があったとしてコンパイルエラーは起こるし意味がある

>そもそもテストを書くという行為が重複した作業なのだけどやるだろ?
>仕様変更したら書き直しなのは仕方ない

最初に型名が正しいと確認されたら型推論に任せるべきです
2023/12/06(水) 14:17:11.63ID:N0N71GtG
>>947
どこを読んだらそうなるんだ?
2023/12/06(水) 14:41:23.05ID:oM0gjrfW
>>945
>保守できなくなるから必ず避けるべき

保守する気がなくなるから必ず避けるべき
ならわかる
2023/12/06(水) 14:44:32.97ID:uGBP6FLN
>>947
なんも分かってなくて草
あの記事だけで普通は全部理解できるぞ
2023/12/06(水) 14:52:19.97ID:3kI3ay52
>>949
> 最初に型名が正しいと確認されたら型推論に任せるべきです

その最初の確認ってどうすんのさ?
まったく字面では現れない場合があるよね
もともとはその場合の話
2023/12/06(水) 15:01:15.76ID:ts/cnrJA
>>952
記事から全部理解できたならたぶん別の記事だと思う
2023/12/06(水) 15:07:10.91ID:N0N71GtG
>>954
正確にはスライド
普通にわかる
2023/12/06(水) 15:12:14.26ID:6EzLMFr7
>>953
まぁそうだね
>>932で私の言いたいことは書かれてたや
2023/12/06(水) 15:22:00.69ID:aoO2XCof
全銀のやつは記事に書いてることはわかるがめちゃくそ疑問だらけ

なんで生成時にサイズチェックしないのか
なんで生成されたテーブルをチェックしてないのか
なんで生成されたテーブル使った試験をしてないのか

一般企業でもなかなかお目にかかれないひどい内容だがそれを金融系のしかも全銀がやっちゃうってのが信じられないわ
958デフォルトの名無しさん
垢版 |
2023/12/06(水) 15:26:41.21ID:MT5mgeUa
>>944
同感
959デフォルトの名無しさん
垢版 |
2023/12/06(水) 15:33:52.57ID:MT5mgeUa
型推論よりインテリセンスとか補完がうざい。
こっちの入力リズムに合わないとイラっと来ることある。
960デフォルトの名無しさん
垢版 |
2023/12/06(水) 16:16:19.10ID:oM0gjrfW
>>957
同感
2023/12/06(水) 16:17:28.30ID:oM0gjrfW
>>959
判る
入力enterで違う単語になってたら殺意を覚える
2023/12/06(水) 18:22:40.40ID:SQhb0To1
Pimplが説明してるある本がないか立ち読みしたのだがあった
最近出たC++ソフトウェア設計という本にモロに書いてあった
こんな本いつの間に出てたんだ?
モロに俺がドヤ顔したパターンじゃねえか...
この本内容もめちゃくちゃ良いぞ
2023/12/06(水) 18:31:32.46ID:6EzLMFr7
pimplってGoFになかったっけ?
2023/12/06(水) 18:37:31.41ID:+XLnMsko
ヘッダファイルの変更のせいで再コンパイルされるC++特有の問題に対処するのが主目的のpimplがなんでGoFにあると思ったんですか?
965デフォルトの名無しさん
垢版 |
2023/12/06(水) 18:54:10.35ID:MT5mgeUa
>>962
pimpl、10年前の本「C++のためのAPIデザイン」(2012年)にも載ってるぞ。
2023/12/06(水) 18:55:40.21ID:SQhb0To1
まあPimplの主張はコンパイルサイズを固定するとか
内部を隠蔽することが主目的っぽいね
この本ではImplにunique_ptrを使ってコピー時にmoveする実装になってる
2023/12/06(水) 19:05:32.22ID:ts/cnrJA
知ってると役に立つけどC++使う気が失せる技法のひとつだな
2023/12/06(水) 19:09:45.42ID:+XLnMsko
>>966
>unique_ptrを使ってコピー時にmoveする

恐怖!auto_ptr再発明男!
2023/12/06(水) 19:24:48.89ID:lBgUAnRO
>>965
紙本は絶版っぽい
kindleがあるから買うか悩むなあ
クソ高いし
2023/12/06(水) 19:26:54.33ID:lBgUAnRO
確かに不毛過ぎる気はする
本質的じゃない部分ですげー頭使わなきゃならんし
面白い部分でもない
素直にrust使うべきだわ
2023/12/06(水) 19:48:07.27ID:Pw3WwC1e
銀行はやったこと無いけどSIerの下請けで
お役所のシステム移行の
仕事したときにライブラリ一つに数万個のテストケースが
用意されてあらゆる仕様適合をチェックしていたので
実装でアホなことしててもテストで叩き落とせばよいという
思想なのかも
2023/12/06(水) 20:02:44.32ID:Knh+cYx8
>>964
GoFのBridgeパターン
2023/12/06(水) 20:16:14.69ID:3kI3ay52
ヘッダーに実装書きまくるのが今のクソc++だからpimplにしたところでというのはある
2023/12/06(水) 20:37:00.46ID:MnzvwPfi
実装を書かざるを得なくなってヘッダーと呼ぶのが不適切になったから.hの拡張子がなくなった
2023/12/06(水) 20:57:06.52ID:N0N71GtG
Pimplの良い説明を見つけた
この中のstd::shared_ptrの場合が今議論されている項目のようだ
http://www17.plala.or.jp/KodamaDeveloped/LetsProgramming/details_pimpl_idiom.html
2023/12/06(水) 22:01:15.11ID:rDPAp/5U
IT大手がRustへ舵を切るわけだな
2023/12/06(水) 22:38:24.64ID:UoD976YL
pimplはScott MeyersのEffective Modern C++が詳しい(Effective C++にもある程度書いてある)
shared_ptrじゃなくunique_ptrを使えと書いてる
https://en.cppreference.com/w/cpp/language/pimpl
https://herbsutter.com/gotw/_100/
2023/12/06(水) 22:38:53.88ID:UoD976YL
>>972
構造が似てるだけで全然別のもの
979デフォルトの名無しさん
垢版 |
2023/12/07(木) 00:06:56.11ID:3PWWuEZS
デザインパターンとは構造について述べたもの
pimplはBridgeパターンの一適用例
別のものではない
2023/12/07(木) 00:37:25.72ID:mM7hpDu4
>>979
>デザインパターンとは構造について述べたもの
全然違うよ
GoFにもそういう考えを明確に否定する内容が書いてある
2023/12/07(木) 00:41:10.07ID:katRzGi9
C++オブジェクト設計という本にはbridgeパターンの一種で継承や多態性が必要がない場合の単純な例としてPimplの説明があった
982デフォルトの名無しさん
垢版 |
2023/12/07(木) 00:52:49.01ID:3PWWuEZS
>>980
議論をしたければ
GoFに書いてあるそういう考えを明確に否定する内容
を述べ給え
983デフォルトの名無しさん
垢版 |
2023/12/07(木) 00:55:08.82ID:3PWWuEZS
>>981
一見して分かりそうなもんだけどね
2023/12/07(木) 01:04:03.35ID:Avn/NPEq
C++の不完全型とJavaのインターフェースが同じに見える人には同じに見えるんだろう
985デフォルトの名無しさん
垢版 |
2023/12/07(木) 02:06:38.63ID:Sudvf4UZ
>>980
そんなこと書いてねーぞ
2023/12/07(木) 09:57:06.17ID:XOE4A360
RustでGUIのアプリがつくりたいです
2023/12/07(木) 11:16:21.90ID:Gb/m/afO
egui
2023/12/07(木) 13:36:44.52ID:XOE4A360
>>987
ありがとう
これはおもしろそうでごす
2023/12/07(木) 23:09:48.18ID:wfAAUjY+
えぐい
990デフォルトの名無しさん
垢版 |
2023/12/08(金) 09:55:56.32ID:k3Bpg+TD
踏んどくか
2023/12/08(金) 09:58:29.65ID:k3Bpg+TD
結局C++とRustってどっちが良いの? 9traits
https://mevius.5ch.net/test/read.cgi/tech/1701997063/
2023/12/08(金) 10:01:41.64ID:dTkbwwL5
unsafe {
次スレいらんわボケ
}
2023/12/08(金) 10:15:03.32ID:k3Bpg+TD
・めとくか
2023/12/08(金) 10:27:55.85ID:gyEpWkla
Cで書かれたプログラムがある
Rustに移植せよ
https://uguisu.skr.jp/othello/7gyou.html
https://ideone.com/0xz2SJ
2023/12/08(金) 10:38:32.80ID:DJ4GSkDO
こんな短く書けるんだ!
2023/12/08(金) 10:39:02.81ID:k3Bpg+TD
RustはCとの相性は良いがC++との相性は最悪
2023/12/08(金) 10:39:54.69ID:k3Bpg+TD
どうしてもC++を捨てられない人は
RustよりNim使った方が救われる
2023/12/08(金) 10:40:47.47ID:k3Bpg+TD
>>994
このスレの腕自慢建ちなら一瞬で移植してくれるだろう
2023/12/08(金) 10:41:18.48ID:k3Bpg+TD
間違えた
x 建ち
o 達
2023/12/08(金) 10:41:47.84ID:k3Bpg+TD

https://mevius.5ch.net/test/read.cgi/tech/1701997063/
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 40日 20時間 56分 48秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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