結局C++とRustってどっちが良いの? 8traitsat TECH
結局C++とRustってどっちが良いの? 8traits - 暇つぶし2ch407:デフォルトの名無しさん
23/11/16 11:40:52.68 5W7eUxhr.net
既存の枯れた安定してるものを他言語で置き換えなんてムダなことをするバカはいない
>>5のような新たなシステムがどの言語で書かれているかが全て

408:デフォルトの名無しさん
23/11/16 11:44:41.17 c22vQqL3.net
>>388
AndroidのRust適用はミドルウェアとか
実行ファイルの話

409:デフォルトの名無しさん
23/11/16 11:52:51.95 nxuWB9A/.net
>>394
新規のシステムもRustよりC++/Cの方が多いでしょうよ
Rustはユーザ数が少な過ぎる

410:デフォルトの名無しさん
23/11/16 11:59:45.29 oAo4ftxR.net
>CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、
>>394「C言語製の枯れて安定してるnginxをわざわざRustで置き換えるCloudflareはムダなことをするバカ」

411:デフォルトの名無しさん
23/11/16 12:24:14.05 AwpJQf7l.net
>>397
Pingoraの話じゃないの?

412:デフォルトの名無しさん
23/11/16 12:31:03.07 1vSd70Wx.net
>>397
記事読めてる?
nginxでは機能が不十分で様々な検討をして新たに作ることになったとある
そしてRust製のPingoraを開発して以下の性能を出したと記事に書かれている
>Pingoraはすでに同社のCDNに採用され、毎日1兆回以上のリクエストを処理し、性能向上や数多くの新機能の提供を実現しつつ、従来と比較してCPUとメモリリソースの消費はいずれも3分の1程度に収まっているとのこと。

413:デフォルトの名無しさん
23/11/16 12:42:36.36 c22vQqL3.net
>>397
nginxでは性能の限界があってRustで新規に
作ったと記事の読み飛ばしたところに
書きてなかった?

414:デフォルトの名無しさん
23/11/16 12:47:30.32 QXdh7keC.net
APIがRustになってないとRust採用する意味が無い

415:デフォルトの名無しさん
23/11/16 12:53:18.79 1vSd70Wx.net
>>401
今回の話の場合APIに相当するものはHTTPだと思いますが
APIがRustになっていないと、とは何?

416:デフォルトの名無しさん
23/11/16 12:53:44.43 oAo4ftxR.net
nginxの代わりに使えるものを「新しく」作ったのだからPingoraはnginxの「置き換え」ではないと言いたいのか??
じゃあ>>392の言う「移行」>>394の言う「置き換え」って厳密には何のことを指すんだ??

417:デフォルトの名無しさん
23/11/16 13:04:58.32 1vSd70Wx.net
たとえ後発のより良い新言語(ex. Rust)であっても
システムそのままで新言語への置き換えはコスト的に意味がなく
新たなシステムへ置き換える時に新言語の採用は大いに意味があるという実例だろう

418:デフォルトの名無しさん
23/11/16 13:27:53.62 6XhGio1W.net
403 は言葉使いからして感情でしか物事をみれない

419:デフォルトの名無しさん
23/11/16 13:37:39.61 GrubNHks.net
>>383
一応メールの中でコードを書いてるって言ってたけどね

420:デフォルトの名無しさん
23/11/16 13:40:47.78 GrubNHks.net
>>397
そりゃCloudflareレベルの規模ならメリットはあるだろう
メリットがあるなら書き直すし
メリットがないなら書き直さない
それだけ

421:デフォルトの名無しさん
23/11/16 14:28:52.70 U5aa+aRa.net
>>394
置き換えがしたいという意志があるとは誰も言って�


422:ネい そもそも修正と新規作成をどうしても区別したいという意志がない ただ、ミクロな意志と無関係なマクロな現象として 置き換えが自然発生するかも知れないという謎の空気はある



423:デフォルトの名無しさん
23/11/16 15:09:24.13 IFD1cI+g.net
early adoptersやearly majorityになるのは
Linuxのperipheralとしてビジネスをしている企業ではなく
Linuxをperipheralとしたビジネスをしている企業
前者の大半はゲームのルールを他者に支配されている立場であり裁量の余地が小さいためマインドセットが保守的
純粋なコストベネフィット以外に低いリスク選好度からくる心理的抵抗が強いためearly adoptersやearly majorityにはなりにくい
複オジがいつも事例であげてるAndroid、Cloudflare、AWSなどが全て後者なのは偶然ではなく構造上の特性から生じる必然
新しい技術というのはゲームのルールを自らコントロールできるこちら側の企業によって牽引される

424:デフォルトの名無しさん
23/11/16 15:14:00.47 IFD1cI+g.net
つまり何が言いたかったかというと
Linux KernelにおけるRustの採用率というのは
技術採用ライフサイクルの観点で見た場合
late majorityやluggardsのRust採用率の目安だということ

425:デフォルトの名無しさん
23/11/16 15:14:30.69 QXdh7keC.net
adaptor だと思ってたけど adopter なんか

426:デフォルトの名無しさん
23/11/16 15:24:27.23 JRjQuxlT.net
>>410
× luggards
○ laggards

427:デフォルトの名無しさん
23/11/16 15:29:19.80 FRf+5dUd.net
early adopter とは
URLリンク(dictionary.goo.ne.jp)
アーリーアダプター,(新製品の)初期受容者
adopter とは
URLリンク(dictionary.goo.ne.jp)
1 採用[採択]者
2 養い親,里親

428:デフォルトの名無しさん
23/11/16 16:41:51.84 cWrKpE+4.net
>>403
コードの移行、コードの置き換え。

>397は>370の例だろ。

429:デフォルトの名無しさん
23/11/16 17:06:23.69 DQsCMcKm.net
それぞれのケースで大きく異なるから区別が必要

(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)新規作成だからであろう

430:デフォルトの名無しさん
23/11/16 17:13:48.99 GrubNHks.net
C/C++から書き直すにしても設計をそのまま使えないことが多いから
かなり大変なんだよな
とくに参照やポインタだらけで全部ヒープアロケーションしまくってる場合とか
C++でもその辺りポインタを多用せずスマポやスタック割り当てをうまく使って書いてあるソフトは移植しやすい

431:デフォルトの名無しさん
23/11/16 17:41:46.11 cVeFFprT.net
どの言語からでもいいけどRustに移行するのにプログラム設計もそのまま引き継いだ自動コンバージョン的な移行を想定するほうがおかしいやろ
そんなんありえんよ

432:デフォルトの名無しさん
23/11/16 17:41:52.36 nV/QBQ73.net
C/C++にRust世代の知見が流入してくることに賭けて、待ってる勢はあるはず 自分は


433:そう それもあるけど、いまあるRustから前線で知見を得ようという勢もあるはず



434:デフォルトの名無しさん
23/11/16 17:47:05.98 nV/QBQ73.net
>>417
C/C++もclangがいったん咀嚼してLLVMにしてる
Rustにトランスパイルするのは非現実的とまではいえないはず
うまくいけば、Linuxは一夜にしてpure Rustになる
Rust派の誰かがやるんじゃないかと思ってる

435:デフォルトの名無しさん
23/11/16 17:51:33.13 xS+g93Tz.net
>>417

いつもの藁人形論法
AWSが最初からRustで構築されたとでも思ってんのかね

436:デフォルトの名無しさん
23/11/16 17:55:14.82 GrubNHks.net
全てスタック変数で割り当てる
コピー時に適切なムーブをする
ヒープが必要なところはスマポを使う
これをちゃんとやればC++をrustに置き換えることは可能
しかしこれをやってるC++プロジェクトはない

437:デフォルトの名無しさん
23/11/16 17:56:48.64 GrubNHks.net
>>420
そいつの意見を真面目に考えてて草

438:デフォルトの名無しさん
23/11/16 18:05:24.97 nV/QBQ73.net
ま、雑談だから
ストローマンは愚痴
一頃のC++はなんでもかんでもヒープに置きすぎだったよね
まあ、お膝元のスタックがそんなでかくない石・スレッドも少なくないけど

439:デフォルトの名無しさん
23/11/16 18:12:37.43 C/58Cd2m.net
>>419
わざわざLLVM IRまで降りて戻ってこなくてもc2rustとか最低限のトランスパイラはいくつかあるぞ
出力結果は作業の開始地点として使うものでそのままプロダクションに使うものじゃない

440:デフォルトの名無しさん
23/11/16 18:27:30.00 nV/QBQ73.net
c2rustの出力をあんまり手直しばっかりしなくていいように、
入力のCにアノテーションを加えていこう、みたいな動きは必ず出ると思うんだよね
良くも悪くもCはマクロ世界だから、当面関わってない人には影響ゼロなようにも書けるはず
そのアノテーションが、そのまま、safe C の礎になればいいんだよ

441:デフォルトの名無しさん
23/11/16 18:28:02.28 jjq/yUIi.net
ああ、ストローマンは自動コンバージョンに反応したのか
“的な”の意味が通じなかったんだな

442:デフォルトの名無しさん
23/11/16 18:39:53.99 RH2XyDS1.net
>>397
記事を読めてないバカを晒すスレはここですか?

443:デフォルトの名無しさん
23/11/16 18:40:10.28 U5aa+aRa.net
LinuxはスクリプトとCの二刀流だ
PythonとCの関係はRustとCの関係にも使える
その知見が流入してこない原因はスクリプト不要論だろう

444:デフォルトの名無しさん
23/11/16 20:51:00.53 AwpJQf7l.net
>>423
だがスマートポインタはスタックに置いて参照渡ししたい。

445:デフォルトの名無しさん
23/11/16 23:13:12.09 BwM227bO.net
>>425
Cの安全性を高める目的ならトランスパイラではなく静的コード解析ツール用にアノテーションするほうが遥かに簡単
C++と同じようにCにもそういう動きが出てくる可能性はあると思う

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

イメージ的には↓こういうやつ
浸透するとしても10年以上先だろうね
URLリンク(www.youtube.com)

446:デフォルトの名無しさん
23/11/16 23:35:15.35 nxuWB9A/.net
そこで奥さんChat-GPTですよ!

447:デフォルトの名無しさん
23/11/16 23:43:26.30 4If2hIRf.net
>>430
Cの標準では今後も無い。
委員会がやる気ない。

448:デフォルトの名無しさん
23/11/17 00:28:52.66 XzLpc9VL.net
Cは他のお笑い言語とは違って俺が最初に手に取ったK&R第二版から変える必要無かったからな

449:デフォルトの名無しさん
23/11/17 00:34:46.03 UIKq6eA7.net
>>4


450:33 さすがにK&Rからは変わってる (ギャグだったならスマン)



451:デフォルトの名無しさん
23/11/17 00:41:31.13 ofj+MCpV.net
C++もlifetime annotationどうするか決まってないんだな
一番めんどくさくてコードも汚くなる部分だからannotation周りの評価はlifetime+borrow checkerの出来次第だと思ってる
URLリンク(discourse.llvm.org)

452:デフォルトの名無しさん
23/11/17 01:27:31.74 lIdOKj8F.net
やる気が暴走したPerlとかC++とかを過大評価するのは暑苦しい
やる気以外のルールはないのか

453:デフォルトの名無しさん
23/11/17 05:30:59.53 30xMjeDv.net
あー、Perlも好きだわーw
ドザなので、シェルスクリプト代わりに、中途半端な処理は全部お願いしてる

454:デフォルトの名無しさん
23/11/17 10:14:27.25 vs9w0Abf.net
>>436
無能な働き者がやる気を出すとね……

455:デフォルトの名無しさん
23/11/17 21:12:15.87 +5SAg77h.net
NGINXモジュールがRustで書けるようになった
URLリンク(www.infoq.com)

456:デフォルトの名無しさん
23/11/17 22:09:06.15 HoPy7y+y.net
>>421
>コピー時に適切なムーブをする
これが恣意的すぎて自動的に対応できんわな。

457:デフォルトの名無しさん
23/11/17 23:36:50.31 FMmcnveO.net
>>436
その2言語は増築工事でダメになった

458:デフォルトの名無しさん
23/11/17 23:58:55.97 8WHR7HZ4.net
継承でダメになった、と言った?
ほぼそれに近い?

459:デフォルトの名無しさん
23/11/18 11:21:22.60 ZyDTP43o.net
立場によってはそう
継承に親でも殺されたんかって人なら、そう言うだろう
でもそれ、自分の推しの言語に継承かなにかが後出し採用されたら、ブーメランだぞw

460:デフォルトの名無しさん
23/11/18 11:36:22.09 XY0Izw3X.net
クラス継承(実装継承)は悪でプログラミング言語界が一致してるから後から継承の採用はないだろうな
過去のしがらみで継承を採用したSwiftやKotlinですら継承を使わずに済む機構などを採り入れている

461:デフォルトの名無しさん
23/11/18 11:44:56.68 GRi2RJZB.net
その結果>>89が示す通りマイナー言語に留まっているじゃん?
ユーザ数を増やすことを優先しないと
数多あるマイナー言語の一つとして忘れ去られる

462:デフォルトの名無しさん
23/11/18 11:52:32.21 GRi2RJZB.net
言語のユーザ数の増加要因として最大なのはユーザー数だよ

463:デフォルトの名無しさん
23/11/18 11:58:51.53 63IqxYSZ.net
>>446
頭沸いてんのかおまえ、進次郎かよw

464:デフォルトの名無しさん
23/11/18 12:08:09.00 Q9aHTM00.net
それがわからんようでは、いっしょに旨い酒は呑めんなあw
わかれよーわかりきってんだろ再帰だろ

465:デフォルトの名無しさん
23/11/18 12:11:13.74 GRi2RJZB.net
>>447
微分積分はまだなのかな?

466:デフォルトの名無しさん
23/11/18 12:11:30.53 63IqxYSZ.net
ユーザー数の多いアプリやOSの開発言語が言語利用者数に影響してるんだろうがいw

467:デフォルトの名無しさん
23/11/18 12:22:30.52 moXb3tPD.net
方法が違うだけでRustやGoにも実装継承が採用されてる
SwiftやKotlinは過去のしがらみで実装継承を採用してるわけではない
目的に対して有益だから採用してるだけ
実装継承の乱用するやつも悪だと決めつけるやつも中身を理解してないという意味では同類だから
どの言語を使っていようがどちらも採用してはいけない

468:デフォルトの名無しさん
23/11/18 12:22:47.39 GRi2RJZB.net
>>450
dN/dt = cN
右辺は一次関数とは限らんだろうけども
新たに学ぶ言語を選択するときには


469: 人は多くの人が使っている言語を選択する傾向にある



470:デフォルトの名無しさん
23/11/18 12:27:30.14 63IqxYSZ.net
>>452
そんなん仕事で開発する人には通用しないよw
開発対象がどのハードのどのOSで動かすかによって決まるからな

471:デフォルトの名無しさん
23/11/18 12:29:23.25 63IqxYSZ.net
しかし、パラメータの意味も説明も無くいきなり数式出す奴ってなんなの?

472:デフォルトの名無しさん
23/11/18 12:31:03.67 jiGs7deg.net
>>451
それは理解していなさすぎる
実装継承とはある型(クラス)に対して定義したメソッドが別の型(クラス)に対して引き継がれることを指す
Rustに実装継承はない

473:デフォルトの名無しさん
23/11/18 12:35:26.40 Q9aHTM00.net
継承はダメおじさん「継承はダメ」
IUnk教徒俺「うんこ->Release();」

474:デフォルトの名無しさん
23/11/18 12:38:02.55 GRi2RJZB.net
>>453
「仕事で開発する人」ってのは仕事の多さに左右される
新規の言語はまずユーザー数を増やさないと
この先生きのこれない

475:デフォルトの名無しさん
23/11/18 12:38:26.91 63IqxYSZ.net
多段継承は何だかなぁだけど
単純な基礎クラスに応用クラス乗せるくらいは許して欲しいなぁ

476:デフォルトの名無しさん
23/11/18 12:39:14.68 GRi2RJZB.net
>>454
Nってのは数
tは時間
cは定数
どれもよく使うから端折ったけども?

477:デフォルトの名無しさん
23/11/18 12:40:04.55 63IqxYSZ.net
>>457
だからユーザー数なんて増えないんだよw
その言語でしか開発出来ないスマホとかでも作らないとなw

478:デフォルトの名無しさん
23/11/18 12:41:04.57 63IqxYSZ.net
>>459
dは何よ?

479:デフォルトの名無しさん
23/11/18 12:42:08.12 Q9aHTM00.net
ダァン! ってやつだ
俺が考えた

480:デフォルトの名無しさん
23/11/18 12:45:04.02 GRi2RJZB.net
>>461
>>449

481:デフォルトの名無しさん
23/11/18 12:49:36.30 zRkY2vB2.net
ネットワーク外部性 - Wikipedia
URLリンク(ja.wikipedia.org)

482:デフォルトの名無しさん
23/11/18 12:49:49.32 63IqxYSZ.net
>>463
ならば進次郎にも分かる説明でないとダメだろ

483:デフォルトの名無しさん
23/11/18 12:54:44.31 GRi2RJZB.net
>>465
>>446に分かりやすく書いておる

484:デフォルトの名無しさん
23/11/18 12:55:17.22 63IqxYSZ.net
>>466
だからそれは否定されたろ

485:デフォルトの名無しさん
23/11/18 12:56:30.92 GRi2RJZB.net
>>467
誰に?

486:デフォルトの名無しさん
23/11/18 12:56:35.04 zRkY2vB2.net
仕事で使う技術選定の最大要因ってなんだかんだで利用者数の多さ(≒資料の多さ)になりがち

487:デフォルトの名無しさん
23/11/18 12:57:39.99 63IqxYSZ.net
>>468
俺にw

488:デフォルトの名無しさん
23/11/18 12:59:42.63 GRi2RJZB.net
>>470
そりゃお前が読めてないだけだよ
>>452の最後の1行も平易に同じことを書いているので読んでね

489:デフォルトの名無しさん
23/11/18 13:00:29.94 9pS/cQYo.net
>>461
ワロタ

490:デフォルトの名無しさん
23/11/18 13:03:35.26 63IqxYSZ.net
C++の資料なんか腐るほどあるが
今やC#かCしか生き残って無いだろw

491:デフォルトの名無しさん
23/11/18 13:05:11.55 63IqxYSZ.net
Rustなんて使わなきや開発出来ないアプリなんか無いし
使う事は未来永劫無いだろうね

492:デフォルトの名無しさん
23/11/18 13:06:24.64 9pS/cQYo.net
書けない人がいくら叫んでも無駄

493:デフォルトの名無しさん
23/11/18 13:09:08.70 9pS/cQYo.net
Rust書けないからって嫉妬してるのはわかるけどそこまで逆恨みすることはないじゃん?

494:デフォルトの名無しさん
23/11/18 13:09:45.32 9pS/cQYo.net
それともここで煽られたから「Rustを書いてる人」が嫌いなのかな?

495:デフォルトの名無しさん
23/11/18 13:42:18.00 GRi2RJZB.net
>>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%程度(総本山なのに)

496:デフォルトの名無しさん
23/11/18 14:46:30.05 BPYzRrhj.net
それ過去に開発された言語が混ざってるよね?

497:デフォルトの名無しさん
23/11/18 15:41:41.81 aHGnQ9F/.net
もうすでに15%もあるといった考え方は?現状の%を並べても5年どうなるかわからないんだし。
その調べかたからわかるのことは限定的だな。
その割合が年々減っていってるのならRustはだめだろうし。

498:デフォルトの名無しさん
23/11/18 16:00:47.99 Q+v8Z7oO.net
言語の変更は多くの場合システム改新などコードを書き換えるタイミングで行なわれる
また言語の変更をするか否かに関係なくモノリシックなシステムはシステム改新に不利でその点ではマイクロサービスなど多数で構成されるシステムが有利
OSカーネルやWebブラウザも同様でモノリシックに作られている場合は言語の変更に最も適していない
そのような最も適していない極端な特殊例を持ち出して数え上げることは無意味で無駄な行為

499:デフォルトの名無しさん
23/11/18 17:15:55.14 rXJKESWN.net
一眼観て微分方程式だと判らないレベルの人は黙っていて欲しい

500:デフォルトの名無しさん
23/11/18 19:58:38.30 HxfHsjDi.net
それはわかったけど、英語そんな読めない俺、なんも言えず
教えてもらったRustの再評価? 論文、積ん読になってるんだよねえ
面白そうだったから忘れたことはないけど

501:デフォルトの名無しさん
23/11/18 21:45:39.76 0cWoHYmK.net
>>444
一致してない
継承理解できずにアホな使い方する一部の人が勝手に騒いでるだけ
採り入れないとおまえみたいなのが無根拠に騒ぐからとりあえず採り入れてるだけ

502:デフォルトの名無しさん
23/11/18 22:49:22.88 zlAHanIg.net
モダンなプログラミング言語のうち、
過去のしがらみのある2つの言語を除いて、
すべての言語が継承をクラスごと排除して採用していないもんな

503:デフォルトの名無しさん
23/11/18 22:53:24.96 GRi2RJZB.net
>>485
おかげで全てマイナー言語のままじゃん?

504:デフォルトの名無しさん
23/11/18 23:39:14.05 Wj/Y5gpw.net
切捨ては極端すぎる。まるで都合の悪いことは無かったことにする左翼の思想
継承はあった方が便利なんだよ
元々オブシコは継承機能が売りだったのに手のひら返してやっぱ合成でいいって、それC言語でもできることだし…
先祖返り…デグレード…設計ミスってことぉ?

505:デフォルトの名無しさん
23/11/18 23:51:56.62 WzRKAbU/.net
2010年以降にできた言語で広く使われてるのは
Kotlin, Swift, Dart, TypeScriptらのクラス継承のある言語

506:デフォルトの名無しさん
23/11/19 00:04:07.84 QnG3yXze.net
型のgeneralization/specializationはどの言語でも必須と言っていい機能でspecializeされた型でgeneralな型の実装を再利用できるというのは物凄く直感的でわかりやすく便利な機能だから完全に無くせば利便性を損なうだけ
Rustでも形を変えて実装継承が存在するのはそのため

507:デフォルトの名無しさん
23/11/19 04:16:47.88 RVJYDbf6.net
>>489
実装継承は問題点が多すぎるからRustでは採用されていない
実装継承とはある型で定義されたメソッド実装がその型を継承する別の型にそのまま継承されること
Rustは実装継承をちゃんと排除している

508:デフォルトの名無しさん
23/11/19 10:00:16.37 tWthAkiw.net
>>490
>実装継承とはある型で定義されたメソッド実装がその型を継承する別の型にそのまま継承されること
さすが進次郎
トートロジーが得意だな

509:デフォルトの名無しさん
23/11/19 10:14:54.62 xroD2KWj.net
継承が必須という人は>191 >195 >2


510:04に反論してくれんかね? shared_ptr<function<T>>で、Tをコンセプトに拡張したものがイメージかね。コンセプトに合致する「インスタンス」なら何でも変数に代入できるようにできれば、わざわざ継承で「インスタンス」の代入可能性を確保する必要は無い。



511:デフォルトの名無しさん
23/11/19 10:29:52.82 nljhlBVQ.net
>>492
継承で定義のコードを書く手間が減るだけでメリットになっている
デメリットうんぬんは使い方知らないだけ
使う場所間違えてる
以上
論破

512:デフォルトの名無しさん
23/11/19 11:09:12.91 xroD2KWj.net
>>493
ずいぶん貧弱な論破だなぁ。

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

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

あなたの感想ですか?

513:デフォルトの名無しさん
23/11/19 11:18:00.14 a8wUH91D.net
>>492
複オジはデメリットを真に理解してないから
どれレスでも的外れな内容になっている

>shared_ptr<function<T>>で、Tをコンセプトに拡張したものがイメージかね。コンセプトに合致する「インスタンス」なら何でも変数に代入できるようにできれば、わざわざ継承で「インスタンス」の代入可能性を確保する必要は無い。
継承の前にポリモーフィズムから勉強した方がよさそうだね
メリットとデメリットを理解してないというのは同じようだけど

514:デフォルトの名無しさん
23/11/19 11:25:06.19 xroD2KWj.net
>>495
おいおい、まともな反論できなくなったらレッテル張りかよ。

>ポリモーフィズム
だからポリモーフィズムにサブタイピングは依存関係重すぎると言っているんだよ。
std::funcionを理解できていますか?

515:デフォルトの名無しさん
23/11/19 11:34:23.07 h6lf9AUt.net
記述量が多くなる=悪は誰にでも判るだろう
RADが流行ったのも理解できるだろう
プログラマはいつも何を重視しているのか、それは時間だ
Rustでコンパイル通す時間よりC++でやった方が早かろう
C++でGUIアプリ作るよりC#でやった方が早かろう
さてRustでGUIアプリ作るには、一体どれだけ時間が掛かるのか
話は終わりだ

516:デフォルトの名無しさん
23/11/19 11:39:08.94 JXkS/kRe.net
>>492
必須とは考えてないから反論はしない
ユーザが選択できれば良いんだよ
言語としては装備していて
害悪があると考えるならそう考えるユーザが使わなければ良い
他言語のライブラリを移植する際に
使った方が再設計の手間が掛からないというなら使えば良い
マイナー言語のまま終わるぞ

517:デフォルトの名無しさん
23/11/19 11:58:31.45 o0KxE9xi.net
数年でRustみたいな思想はAIが肩代わりしてくれると思うよ
今からRustで数年苦労するよりは
他の事しつつ待ってた方がもしかして有意義なんじゃないかな笑

518:デフォルトの名無しさん
23/11/19 12:13:25.84 nljhlBVQ.net
>>494
その指摘のような状況で使わなければいいだけ
全てのケースでその指摘が当てはまるわけではない
不適切な使用をしてる例を自分自身で示しているが、それに気づいていない
言うに事欠いて私の感想?
何回論破されるのあなた?

519:デフォルトの名無しさん
23/11/19 12:32:27.75 /G2k3fWt.net
>>497
別にRust推す訳じゃないが
その理屈はRustで簡単にGUIが描けるツールが出たら解消してしまうがな

520:デフォルトの名無しさん
23/11/19 12:35:10.88 Tj6ZCNuo.net
pythonのpysimpleguiでサクッと作って時間の掛かる処理だけpyo3でコールするか

521:デフォルトの名無しさん
23/11/19 13:27:48.93 h6lf9AUt.net
>>501
Rustが世に出て13年みたいだが解消する見込みなし
時間の浪費は罪に等しいと考える現実的なプログラマであれば他の手段を見つけて


522:るだろう 何もかも遅すぎるのろまに構う価値はない



523:デフォルトの名無しさん
23/11/19 13:57:40.85 Oy1huhHi.net
>>497
C#でGUIとか今時書かんて

524:デフォルトの名無しさん
23/11/19 14:01:24.71 nljhlBVQ.net
>>504
今時はguiには何使うもの?

525:デフォルトの名無しさん
23/11/19 14:07:51.59 Oy1huhHi.net
>>505
electronかtauriをガワにして中身はHTML+TypeScript
今のGUIアプリは大抵これ
ちなみに新しいteamsではガワはネイティブ実装で
中身はWebView2というコンポーネントを使っているらしい
作り方はHTML+TypeScriptなのは変わらない
WebView2はまだ簡単には使えないがおそらくこいつが主流になるはず
MS好きならちゃんとキャッチアップくらいしとこうぜ?

526:デフォルトの名無しさん
23/11/19 14:10:24.62 Oy1huhHi.net
当たり前だが別にそれにしろとは言わん
シンプルな業務系の画面なら何でも良いし作りやすい方が良い
RustのGUIは今のところ有力なものはないのは事実

527:デフォルトの名無しさん
23/11/19 14:21:03.03 BvvFFAMC.net
「マウス」のイベントハンドラを継承するメリットが誰にでもわかる
という前提が怪しいんだよ
マウスだぞマウス

528:デフォルトの名無しさん
23/11/19 14:38:54.75 iOyghJL5.net
え?! RustってGUIライブラリがないの??

529:デフォルトの名無しさん
23/11/19 14:57:36.66 /G2k3fWt.net
Tauriは糞

530:デフォルトの名無しさん
23/11/19 14:57:55.82 y0Jh7vt2.net
>>509
RustのGUIも色々揃っている
GUIは用途によって多種多様な世界だからeguiのようなリフレッシュフレームベースのGUIクレートもある
そういう用途でなければRust関係なく一般的な話として今は各プログラミング言語でGUI作るのは極少数派になっている
つまりHTML/CSS/JavaScriptベースで作られるようになっていて使用言語を強いて言えばJS/TSの時代

531:デフォルトの名無しさん
23/11/19 15:15:35.10 xroD2KWj.net
>>500
ならせめて「当てはまるわけではない」ケースを指摘しないと反論にならん。
「不適切な使用をしてる例を自分自身で示しているが、それに気づいていない」というのに指摘しないのは反論者として誠実でない。後出しじゃんけんを狙った詐欺師にしか見えん。

532:デフォルトの名無しさん
23/11/19 15:17:38.47 BvvFFAMC.net
フィクションでもマウス的な小道具を無くそうとしてる
だから剣と魔法しかない

533:デフォルトの名無しさん
23/11/19 15:21:36.07 5CKxkiE7.net
>HTML/CSS/JavaScriptベースで作られるようになっていて使用言語を強いて言えばJS/TSの時代
そしてそれらは全て実装継承モリモリの実装に支えられている

534:デフォルトの名無しさん
23/11/19 15:24:12.29 xroD2KWj.net
>>500
「その指摘のような状況で使わなければいいだけ」とか後出しジャンケンにもなっていないな。情報が空っぽすぎる。
無敵ジャンケン出して勝った気になるお子様みたい。

535:デフォルトの名無しさん
23/11/19 16:13:36.90 NqOCouPw.net
>>514
Reactはクラス止めて関数型のやり方に変えて
かなり経つよ

536:デフォルトの名無しさん
23/11/19 16:43:45.43 HSZIalWb.net
あったはずだけど

537:デフォルトの名無しさん
23/11/19 16:45:02.12 HSZIalWb.net
あ、めっちゃ遅れレスだけど>>509に対して書いたつもりだった

538:デフォルトの名無しさん
23/11/19 17:14:49.95 H8V03qQo.net
>>514
Reactは本体含めて継承は使っていない
全て関数

539:デフォルトの名無しさん
23/11/19 17:17:51.68 H8V03qQo.net
まあ今後のGUIはWebView2になるのは間違いなさそう
特にwindowsはこれが決定版になるはず

540:デフォルトの名無しさん
23/11/19 17:39:17.01 nljhlBVQ.net
>>512
ただ親クラスを継承して親クラスのメソッドを使うだけでしょ?
そんなことはどこにでもあるが、そのすべてがインターフェイス的に全てのメンバの実装が必須なケースになるのか?
ならない
なるケースはインターフェイスなど使えばいいだけ

541:デフォルトの名無しさん
23/11/19 17:55:10.88 o+X6buyf.net
メンバ変数に直接アクセスするメリットはgetやsetを実装する時間を浪費しないことだが
継承のメリットはこれに類似している

542:デフォルトの名無しさん
23/11/19 18:40:03.88 RRmaBkyu.net
>>516,519
意味のない指摘をありがとう
ReactはHTML/CSS/JavaScriptを支える技術じゃなく
HTML/CSS/JavaScriptを活用した技術
ちなみにReactの本体では今でも実装継承使ってる
つまらない嘘はいい加減止めようね

543:デフォルトの名無しさん
23/11/19 18:50:12.97 WxxDsdGH.net
>>523
支える技術とか活用した技術とか意味不明すぎる

544:デフォルトの名無しさん
23/11/19 19:34:44.92 nljhlBVQ.net
>>524
何で知ったかしてバレないと思うん?

545:デフォルトの名無しさん
23/11/19 20:05:00.46 aXcE9XXk.net
マイコンレベルに小さなコンパイラを搭載しなければいけないような案件だとRustは重たすぎて無理っぽいが
それ以外のデメリットは無い感じはする。今のところ
FPGAの論理合成のような長いコンパイルプロセスに未来を感じる(感想)

546:デフォルトの名無しさん
23/11/19 20:46:51.67 H8V03qQo.net
>>523
頭が悪すぎて嫌になるな

547:デフォルトの名無しさん
23/11/19 20:52:10.42 H8V03qQo.net
>>524
なんか日本語がおかしい
韓国人なんかな?

548:デフォルトの名無しさん
23/11/19 21:13:25.27 o+X6buyf.net
英語圏で同じこと言われる不安を煽ってるから英語が苦手になるパターン

549:デフォルトの名無しさん
23/11/19 22:14:28.15 fSaG2PoW.net
昔のReactはコンポーネントクラスというJavaScriptのクラスを用いた方法を用いていたけど
それでも継承は使わないでコンポジションを使うようにと公式に書かれていた
今のReactはクラスではなく関数コンポーネントを用いるようになった

550:デフォルトの名無しさん
23/11/19 22:31:23.82 2h4NT+3n.net
継承はクラスの再利用とクラスの切り替えが同じ継承に集約
されていたのが問題だった

551:デフォルトの名無しさん
23/11/19 23:15:24.31 WkLuwjlK.net
>>531
コードの再利用とサブタイピングが一緒になっていたらなぜ問題なの?

552:デフォルトの名無しさん
23/11/20 00:02:51.71 miVVMWsb.net
>>523
継承使ってるというのはどこのコード?

553:デフォルトの名無しさん
23/11/20 03:25:10.93 m3TC6/PX.net
クラスの切り替えとはキャストのことか
だがダックタイピング界隈には「キャストする」という振る舞いがない
templateなら引数を変えることが切り替えでありキャストは重要ではない
重要ではないものを重要と思ってたなら問題だ

554:デフォルトの名無しさん
23/11/20 03:52:37.02 Uh0cT6mQ.net
だからさ、独自用語で煙に巻いてないでTaPL読んだうえで共通語彙で話しようぜって

555:デフォルトの名無しさん
23/11/20 07:37:53.49 kv+dmWMk.net
>>521
親クラスを継承できないクラスはポリモーフィズムできないねぇ。
後から「読み取り専用のIFが欲しい」「書き込み専用が欲しい」となったらどうすんの?
「なるケースはインターフェイスなど使えばいいだけ」なら、途中で継承からIFに切り替える?
「早すぎる最適化」だなぁ

556:デフォルトの名無しさん
23/11/20 08:24:47.95 dEVryb2p.net
さすがにその例だと、「モード切替するメソッドを足す。所有権管理もさせる。旧クラスは廃止」とかだろ

557:デフォルトの名無しさん
23/11/20 08:49:37.76 Gc8IZzjG.net
>>537
だから「継承は重い。早すぎる最適化」なんだよ。
いつインターフェイスを確定するのは設計を煮詰めないと無理だから、設計初期に確定なんて不可能。

558:デフォルトの名無しさん
23/11/20 09:03:13.39 07sj62mg.net
>>499
俺もそう思う

559:デフォルトの名無しさん
23/11/20 10:54:06.11 NElbrJwW.net
何で君達は最小のサンプルコードも書かずに俺様用語で議論してるの?
プログラマじゃないのかな?

560:デフォルトの名無しさん
23/11/20 11:26:53.92 6jnK0Jj8.net
今朝のGoogleニュースで米の求人報酬だかでRustが2位とか見たわ
人事的にはRustで沼る人材が欲しいらしいぞ
良かったな

561:デフォルトの名無しさん
23/11/20 12:00:36.92 ZwEoOGmm.net
>>536
そこら辺は言語によって違うからせめて言語くらい前提として共有しないと議論にならない。

親クラスを継承できないクラス、意味不明。
そもそもサンプルコード見せれば確実なところを自然言語で議論しようとする発想が意味わからない

562:デフォルトの名無しさん
23/11/20 12:49:28.44 aVFf8Qq7.net
>>542
さすがに出先スマホでコード打ち込みたくないわな。
コードで言うなら>492みたいなのが欲しいというだけだし。
>親クラスを継承できないクラス、意味不明。
例えばライブラリが返すインスタンスのクラス。普通はクラスを直接弄ることはできないし、final宣言されてたら派生も無理。クラスを直接弄くれるとしても、ライブラリをメンテナンスするとか面倒臭いからやりたくない。
普通はAdoptor作るけど、それなら>492みたいなIF側で自動的にやる機能が欲しい。

563:デフォルトの名無しさん
23/11/20 12:49:42.01 JpnTJcOA.net
githubの2023年成長率でもRustが40%増でTOPだったな。
でもまだ人気言語TOP10には食い込んでなかったけど。

564:デフォルトの名無しさん
23/11/20 12:53:05.42 PG0EBfXZ.net
>>541
日本だとマジで少ねえんだよな
ガッツリ使ってて将来性があるところならぜひ行きたい

565:デフォルトの名無しさん
23/11/20 13:32:31.99 NElbrJwW.net
>>541
1位はpython?

566:デフォルトの名無しさん
23/11/20 13:42:54.45 IjnmMF1h.net
そりゃ1位はPHPだよ

567:デフォルトの名無しさん
23/11/20 13:54:03.53 SNQO1x/A.net
>>523
早くだせよコラ
適当いってんのはテメェだろクソが

568:デフォルトの名無しさん
23/11/20 14:04:35.58 NElbrJwW.net
>>547
PHPを書けるより市場価値がないの?

569:デフォルトの名無しさん
23/11/20 14:38:31.00 dEVryb2p.net
Rustが出せるのは高い信頼性だが、日本で何か作っても、それ信頼できんの?ってなるから
だったりして

570:デフォルトの名無しさん
23/11/20 14:44:00.93 NElbrJwW.net
>>550
求められている信頼性って「Rustが出せる信頼性」とは違うんだと思うよ

571:デフォルトの名無しさん
23/11/20 15:09:31.41 MS7hPbOQ.net
日本だけに限らないかも知れないけど
ソフトウェアの利用者ってそもそも
何の言語で造ってるかなんて気にしてないし知ろうともしない

572:デフォルトの名無しさん
23/11/20 15:36:03.59 JXHwx0JF.net
Rustが使われる理由は高速省メモリで開発効率や保守性が良いため

573:デフォルトの名無しさん
23/11/20 15:41:32.66 NElbrJwW.net
>>553それはRustプログラマの視点
それまでの話は発注者側からの話

574:デフォルトの名無しさん
23/11/20 15:49:44.16 JXHwx0JF.net
発注者側の視点でも
高速省メモリで安全性も高いのはRustとなる

575:デフォルトの名無しさん
23/11/20 15:55:24.47 NElbrJwW.net
鶏と卵の関係になるけどプログラマが確保できなく保守性が悪い

576:デフォルトの名無しさん
23/11/20 16:02:14.85 N43MAaAU.net
>>555
という願望
いいものなら売れるというナイーブな考えは捨てろ

577:デフォルトの名無しさん
23/11/20 16:18:06.96 JXHwx0JF.net
>>556
プログラムの保守性自体はRustが高くて好ましいため
あとはプログラマーの数は単調増加する一方なので特に問題なし

578:デフォルトの名無しさん
23/11/20 16:27:04.23 NElbrJwW.net
>>558
プログラマが確保できないってことは
発注者側からすると運用後の保守に
支障を来すリクスがあるってことだよ

579:デフォルトの名無しさん
23/11/20 17:04:51.35 aPv5cKlG.net
コントリビューター増加「率」はミスリードかも、レポ増加「数」は
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

580:デフォルトの名無しさん
23/11/20 18:15:53.85 1QHH6H


581:XV.net



582:デフォルトの名無しさん
23/11/20 18:32:56.66 Tq0YX8uR.net
>>557
株とかはそうだね
いいものは誰にも教えないで買い占めるはず
商品化し売られているのは悪いものしかない説

583:デフォルトの名無しさん
23/11/20 20:50:45.51 NElbrJwW.net
>>561
ある程度は相関してるでしょ

584:デフォルトの名無しさん
23/11/20 21:15:52.04 ojqzhkRS.net
>>562
お前がレスに使ってる端末は悪いものなんだな~。

585:デフォルトの名無しさん
23/11/20 21:47:51.39 Tq0YX8uR.net
>>564
自然言語で雑談ばっかりして
コーディングとコンパイルと実行をしない原因はこの端末かもしれないな

586:デフォルトの名無しさん
23/11/20 21:56:32.85 Ygoo/zhh.net
>>533 >>548
嘘つきオジは「知ったかぶりして”Reactは本体含めて継承は使っていない全て関数”などという真っ赤なウソをついてすみませんでした」と言うのが先だろ

587:デフォルトの名無しさん
23/11/20 21:59:46.43 1QHH6HXV.net
>>563
全くしてないだろ
公開出来るソフトなんて業界の一部でしか無いからなぁ

588:デフォルトの名無しさん
23/11/20 22:02:12.48 SNQO1x/A.net
>>566
負けを認めろ
土下座したら許してやるぞ

589:デフォルトの名無しさん
23/11/20 23:27:57.05 /Ubqd6b6.net
>>530
Reactはクラスコンポーネント時代も
開発元のFacebookが様々なケースで継承を使うとよいケースは存在していないことを確認しているとReact公式に書いていたもんな
もちろん今はクラスコンポーネントすら捨てて関数コンポーネント

590:デフォルトの名無しさん
23/11/21 08:57:03.65 CeBFd4j1.net
GitHubで最も使われている言語はJavaScript、最も利用者が増加したのはRust。AIプロジェクト数はこの1年で3倍増GitHubが年次調査「Octoverse 2023」発表
URLリンク(www.publickey1.jp)

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

プログラミング言語別にコントリビュータの増加率を見ると、1位がRust、2位がRua、3位がTypeScript、4位がHCL(HashiCorp Configration Language)、4位がTSQL、5位がPythonとなります。

591:デフォルトの名無しさん
23/11/21 09:29:05.70 WJ7yrtvk.net
React本体のJavaScriptコードで継承が使われてるという事実は嘘つきオジがいたので指摘しただけで重要な事ではない
JavaScriptの継承を理解してる人ならリポジトリ見れば誰でもわかる
重要なのはReactやReact Nativeが依存しているHTML/CSS/JavaScriptなどのホスト環境が提供するGUIライブラリやそれに類するものは全て実装継承モリモリで作られているということ
それはなぜなのか?

592:デフォルトの名無しさん
23/11/21 09:48:09.93 meOGGGPH.net
>>570
Rustはもう何年もずーっと愛され続けてずーっと増加率もすごく高いのに
誰も使ってないのが不思議w

593:デフォルトの名無しさん
23/11/21 10:52:34.98 TIZNoRj+.net
増加<率>だからねw

594:デフォルトの名無しさん
23/11/21 10:53:27.83 TIZNoRj+.net
つまり分子が大きいというより分母が少ない

595:デフォルトの名無しさん
23/11/21 10:56:46.75 fyFN08Ef.net
ヒント非公開

596:デフォルトの名無しさん
23/11/21 11:02:46.10 ZX3v40di.net
>>571
GitHubのコードに対するリンク一行貼るくらいやってよ

597:デフォルトの名無しさん
23/11/21 11:06:40.20 ZX3v40di.net
>>571
gtkはCだね

598:デフォルトの名無しさん
23/11/21 11:07:36.25 HSO31doi.net
>>557
ほんそれ

599:デフォルトの名無しさん
23/11/21 11:18:07.78 Lmp19CDx.net
>>575
エビデンスを出せという言葉を使えば公開されるという認識なんじゃないか
まるで魔法みたいに

600:デフォルトの名無しさん
23/11/21 11:27:49.20 j31CN6Yb.net
>>569
とFacebookの犬が申しております

601:デフォルトの名無しさん
23/11/21 12:12:04.36 Vub9wpCB.net
>>571
嘘つきはお前だよ

602:デフォルトの名無しさん
23/11/21 12:25:12.17 MyNMYruR.net
>>571
お前毎回遅レスなのは何なの?
回線がない生活保護施設にでも住んでるのか?

603:デフォルトの名無しさん
23/11/21 12:27:03.76 vP2RupFQ.net
特定のレスに妙に攻撃的な単発ちょくちょく湧いてくるのってやっぱりアイツ?

604:デフォルトの名無しさん
23/11/21 12:50:14.72 j31CN6Yb.net
>>583
いや、あいつとは別

605:デフォルトの名無しさん
23/11/21 12:50:16.11 j31CN6Yb.net
>>583
いや、あいつとは別

606:デフォルトの名無しさん
23/11/21 13:37:07.13 f4244eke.net
アイツじゃねーかw

607:デフォルトの名無しさん
23/11/21 13:52:02.24 Lmp19CDx.net
質問する側は基本的に無力で、答える側に生殺与奪の権を握られる
一発逆転するには攻撃力か何かで優位に立たなければ

608:デフォルトの名無しさん
23/11/21 18:59:23.42 E3kr56i/.net
勝ったところで、所詮クソvsクソだぞ

面白いことを書け

609:デフォルトの名無しさん
23/11/21 19:14:06.76 MyNMYruR.net
攻撃的なこと言われて大人しくなってるの草

610:デフォルトの名無しさん
23/11/21 22:22:25.20 3Y9OZVuh.net
>>577
GTKは実装継承モリモリ
Cで実装継承を実現するためのオブジェクト管理システムをGTK用に作ってある
Reactの話とは関係ないけどね

611:デフォルトの名無しさん
23/11/21 22:23:49.29 3Y9OZVuh.net
>>582
誰もが君のように暇なわけではないんだよ
つかそんなにレスが欲しかったのかよw

612:デフォルトの名無しさん
23/11/21 22:43:10.96 Q9pynku3.net
>>590
そういう返答するだろうなあと思ってたよ
言語機能になくても実装で継承使われてるんだ~
というならどんな言語使っても構わないね
はい終了

613:デフォルトの名無しさん
23/11/21 23:11:04.07 Lmp19CDx.net
Cはスマポ<T>を作れない
C++でもtemplateを使わない主義ならばスマポのようなものをTが実装継承するかも

614:デフォルトの名無しさん
23/11/21 23:15:06.85 x0TxAGsF.net
>>592
論点は実装継承は不要なのかどうか
常にコンポジションを使うべきかどうか
GTKは言語機能によらない実装継承を使っているというだけ
コンポジションで実装する事も技術的には当然可能だがその選択をしてないことに意味がある
特に言語が提供してないにもかかわらずGTKのためだけに継承機能をわざわざ作り上げるほど実装継承を欲した理由を理解するべき

615:デフォルトの名無しさん
23/11/21 23:35:36.54 LOJe+P0r.net
Reactが依存しているHTMLのボタン要素を例に話をするとボタン要素は次のような型階層を取ることがDOM APIの仕様で決められている
EventTarget <- Node <- Element <- HTMLElement <- HTMLButtonElement
上位の型のパブリックなメソッドやプロパティはや下位の型でも使えるようにする必要がある
これは実装継承だけでなくコンポジション+インターフェースでもRustのenumのような代数データ型を使っても実現可能なんだが知る限り全てのブラウザが実装継承を使って実装している

616:デフォルトの名無しさん
23/11/21 23:45:35.68 Q9pynku3.net
>>594
言語機能になくても問題はないんだから
言語の機能比較という論点からは
どうでもいい話�


617:セね



618:デフォルトの名無しさん
23/11/21 23:49:00.55 5SU8rUzf.net
なぜかというと
例えば仕様変更でNodeに新しいメソッドが追加されたとしても実装継承なら一箇所変更すればいいだけだから
コンポジション+インターフェースの場合はNode以下の数百個のクラスや構造体にメソッドを追加して委譲するコードを書いて回らないといけない
実装継承というのはサブタイピングとコードの再利用を同時に行うことだが、その2つを同時に行えるという点が最大のメリットであり存在理由なわけ

619:デフォルトの名無しさん
23/11/22 00:08:02.11 h68LLJ0S.net
>>596
問題がないわけではないんだよ
GTKの実装継承は言語機能のそれと比べてクソ面倒臭い上に言語に組み込まれた型システムではないからこその弱さがある
Rustでも実装継承をマクロで模倣することもできるがだからといってそれに何の問題ないわけではないというのと同じ
他のやり方があったとしてもより楽に安全に開発できるようになるなら言語機能としてあった方がいいってことになるよね?

620:デフォルトの名無しさん
23/11/22 00:19:05.87 i7dbnQQ2.net
>>1-10
乗り遅れるな!
いつまでも待ってはくれませんよ
URLリンク(note.com) ←4000円貰えます
この機会にぜひ
URLリンク(i.imgur.com)
(毎日動画見てるだけでお金貰えるんだぞ💰)

621:デフォルトの名無しさん
23/11/22 00:33:52.03 SCjy6MJ9.net
>>597
それは仕様変更前のクラス数百個を捨てさせ変更後の数百個で置き換えるには都合が良い
一箇所変更するだけで古いクラス数百個が消滅する
だが古いクラスに依存していた資産が消滅するのは本当にお得なのか?

622:デフォルトの名無しさん
23/11/22 01:12:20.99 uxQX1dJD.net
>>590
はよReactの実装継承について参考にすべき
ファイルとかだしてくれ

623:デフォルトの名無しさん
23/11/22 01:26:34.89 uxQX1dJD.net
>>598
> 他のやり方があったとしてもより楽に安全に開発できるようになるなら言語機能としてあった方がいいってことになるよね?
c++に色々跳ね返ってきそうなお言葉来たな

624:デフォルトの名無しさん
23/11/22 16:32:36.94 Ky8NVDmM.net
「GCは嫌い。だけどC++は苦手。
 噂だとRustがそれを解決するらしいから」
ということでRust票が入っているだけ。

625:デフォルトの名無しさん
23/11/22 18:06:32.01 VuMm7++t.net
GoogleもMicrosoftもAmazonもCloudflareも
そんな理由でRustを採用して使っている?

626:デフォルトの名無しさん
23/11/22 18:40:30.34 I05HGQ1N.net
結局windows11 10.0.22631.2715 (23H2)にRust製モジュール入らなかったが

627:デフォルトの名無しさん
23/11/22 19:20:29.71 zUxnYc1v.net
MSの使ってるコンパイラは何だろう?

628:デフォルトの名無しさん
23/11/22 20:23:02.05 BBiTeKwa.net
>>600
>だが古いクラスに依存していた資産が消滅するのは本当にお得なのか?
消滅しないよ

629:デフォルトの名無しさん
23/11/22 20:29:20.42 ltxaInSK.net
>>604
信用できないアホコーダーにはバグを入れる自由なんて与えない。
コーティング規約だと防ぎきれないから抜け道の少ないRustにする。

ということだろ。

630:デフォルトの名無しさん
23/11/22 21:18:08.59 +UnlqW3r.net
関数名の重複を許す仕組みは信用できる
クラスは名前がかぶったらたいてい古い方が無かったことにされるのが信用できない

631:デフォルトの名無しさん
23/11/22 21:25:34.99 zUxnYc1v.net
なにそれ?

632:デフォルトの名無しさん
23/11/22 21:26:35.97 5rDf7evN.net
>>603
C++苦手でRustなら大丈夫!って人種は居るのかな
さらに苦労しそうだけど

633:デフォルトの名無しさん
23/11/22 21:47:18.27 +UnlqW3r.net
intは信用できないのでi32やi64になったのはまあいい
実装継承の祖先の名前がずらりと並ぶのは嫌だ

634:デフォルトの名無しさん
23/11/22 22


635::42:24.09 ID:+dkhSESN.net



636:デフォルトの名無しさん
23/11/22 22:48:19.59 F4GGzYS9.net
>>611
いるよワイ
とにかくC++はコピーを正しく扱うのがあまりにも難しいのよ
C++の弱点はこの一点に尽きる
もちろんCとの互換性を保つためなのだが本当に難しい
そこにコピーやめたろ!って英断したRustは本当にC++使いの人が設計したんだなと感じる
この部分に手を入れかつ速度を落とさない実装もできる方法を突き詰めるとこうなる

637:デフォルトの名無しさん
23/11/22 22:59:48.09 Lo22StDU.net
>>614
Firefoxはservoで行き詰ったよ

638:デフォルトの名無しさん
23/11/22 23:05:36.01 F4GGzYS9.net
Effective C++の初版はほぼこのコピーをいかにうまくやるかを解説した本だった
あらゆる手段でコピーが発生してもオブジェクトの整合性が取れるように注意点を書きまくった
しかしその内容はあまりにも普通の人には難し過ぎた
そして一つのクラスを作るたびにこんなに気をつけて実装しないといけないのか!やってられん!となって
その結果、もう全部ヒープにとって生ポインタでいいじゃんとなってしまった
そのおかげでコピー問題は無くなったが
メモリリークや二重開放、ヌルポの山を産んだ

639:デフォルトの名無しさん
23/11/22 23:09:46.91 EF2LJjbV.net
ポインターをメンバーに持つと言うのがコピーの問題になってるだけやん?
アドレスをコピーするのか、実体を複製して新しいポインターとして格納するのか
用途によってはどちらかが不都合だったりするからなぁ

640:デフォルトの名無しさん
23/11/22 23:14:04.80 F4GGzYS9.net
>>617
実態を持っても同じだよ
そのオブジェクトが内部にポインタを持ってたら同じ問題が発生
さらにそのオブジェクトが(ry

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

だから一時期はあらゆるオブジェクトがヒープ割り当てをしていた

641:デフォルトの名無しさん
23/11/22 23:21:57.25 F4GGzYS9.net
スマートポインタによって状況はだいぶ改善されたとは思うが
しかしこのコピー問題というのは常に残っているのだ
そのオブジェクトを安全にコピーできるようにするという本質的な難しさは変わっていない
そしてムーブかコピーかみたいなものをライブラリ提供者が決めなければならず
それを使う側が意識することはかなり難しい
ドキュメントを読み込んで使い方を熟読するしかない
数百個のクラスがあった場合その全てのクラスの性質を暗記しないといけないのである!
しかも一個のミスで全てが崩壊する
こんなことは不可能に近い

642:デフォルトの名無しさん
23/11/22 23:27:21.33 F4GGzYS9.net
その結果全てのオブジェクトをヒープにとってそのポインタだけを持ち回る、という実装がほとんどとなったのである
こうすればとりあえずコピーに関する問題はなくなる
俺はその時期にC++を仕事で書いていた
全てのオブジェクトがヒープにあった
コピーに関して悩んだことがなかったので
Effective C++を読んでもこの本は何でこんな「不整合が起きないオブジェクト」の作り方の解説ばっかりやってるんだろうと思っていたぐらいだ

643:デフォルトの名無しさん
23/11/22 23:30:42.74 F4GGzYS9.net
ちなみにこの全てのオブジェクトをヒープに取ればいいじゃんの思想をデフォルトにした言語がJavaである
メモリの解放漏れはGCにより問題なくなったがヌルポを量産したのは言うまでもない

644:デフォルトの名無しさん
23/11/22 23:32:00.30 UBOPkQxC.net
ChatGPTとまでは言わんが、IDEも仕事しろ、っていう世の中ではある

645:デフォルトの名無しさん
23/11/22 23:37:47


646:.47 ID:Rf3A/fx6.net



647:デフォルトの名無しさん
23/11/23 00:06:01.85 KrVwEhLS.net
>>623
稼働してるの2~3人だけど当時よりは整ったはずだから今度は完成するよね?
とりあえず年内にtableタグが実装だっけ?

648:デフォルトの名無しさん
23/11/23 00:11:54.90 mLPybMZb.net
Javaにはポインタしかない
ゆえにコンポジションを繰り返せばリンクリストのようになる
でも実装継承なら
という風に二つの問題は一つにつながる

649:デフォルトの名無しさん
23/11/23 01:52:03.12 FMewW6Qw.net
>>616
Effective C++がコピーの話ばっかりという印象はないけどな
あるのはもともとCにあるコピー問題をいかにC++で解決するかというスタンスの解説
あとコピー問題を解決するためヒープを使うってのも謎理論
それは因果関係逆でしょ
ポインタをメンバーに持つデータ構造のコピーをいかに安全に実現するかでしょ
STLコンテナによりそこに厳密な意味定義が必要となった

650:デフォルトの名無しさん
23/11/23 07:44:46.73 N5SmR8A3.net
>>568
と負け犬が申しております

651:デフォルトの名無しさん
23/11/23 09:38:23.37 jt92Atwz.net
>>621
ヌルポは型無しnullpointerによる型の制約に違反する問題だろ。
スタックだろうがヒープだろうが型無しインスタンスを使う限り発生する。
c++もポインタを排除して参照のみにできれば随分違うだろうけど。

652:デフォルトの名無しさん
23/11/23 10:31:50.34 mLPybMZb.net
中途半端に浅いコピーは、深い方が正しい可能性を否定できない
これがコピー問題
ヒープを使えば極端に浅いコピーになる
これはバグではなく意図的にしか見えないから問題が解消する

653:デフォルトの名無しさん
23/11/23 10:37:31.57 mHKDjsht.net
>>597
そこはRust最低だよな

654:デフォルトの名無しさん
23/11/23 10:57:07.78 KmXfNFgK.net
機能追加が常に善なら後発言語は機能お化けに
なる一方のはずだがそうはなってないので
〇〇言語には△△機能が無いからゴミという
論法はあまり意味がない

655:デフォルトの名無しさん
23/11/23 12:06:15.18 gaANDpVB.net
>>627
だからお前は何でそんな遅レスなんだよw
遅レスおじさん登場~👴

656:デフォルトの名無しさん
23/11/23 12:33:56.71 cJqQ5Mzl.net
>>631
C++のよろしくない点で一番言われるのは、長い歴史といろんなパラダイムを取り込みまくったことで
まさに機能お化けになっちゃったことだからな

657:デフォルトの名無しさん
23/11/23 13:07:39.51 mHKDjsht.net
C++のtemplateは失敗

658:デフォルトの名無しさん
23/11/23 13:35:39.34 tND7y2dZ.net
>>631
>機能追加が常に善なら
誰もそんなことは言ってないから
それこそ意味のない論法

659:デフォルトの名無しさん
23/11/23 13:53:47.80 KmXfNFgK.net
>>635
誰かがそういう主張しているという文章じゃ
ないんだが
頭悪いな

660:デフォルトの名無しさん
23/11/23 14:01:33.34 P5PvPGf5.net
実装継承不要とか言ってたやつら負けるの早すぎだろ
拍子抜けもいいところ

661:デフォルトの名無しさん
23/11/23 15:08:18.27 m+MQWJu5.net
いや。参考になったから、それはそれでいいぞ(IUnk派

662:デフォルトの名無しさん
23/11/23 16:01:38.36 M3SMKrV5.net
Reactの継承を使っているコードを出せない時点で負け犬はどっちか明確
強い言葉使ってやるからかかってこい

663:デフォルトの名無しさん
23/11/23 16:37:00.29 /KrkujPK.net
「Reactは本体含めて継承は一切使っておらず、全て関数だと言い張る人がいるのですが本当でしょうか?」と
自分の主張ではないフリしてStack Overflowあたりで聞いてみ?
めっちゃ馬鹿にされるだろうけどすぐに欲しがってる答えをもらえるぞw

664:デフォルトの名無しさん
23/11/23 16:38:05.49 t7xzkVTj


665:.net



666:デフォルトの名無しさん
23/11/23 16:43:11.88 9Fa6B1S9.net
プロトタイプ継承もわかってないのに事あるごとにReact連呼してたのかと思うと滑稽を通り越してちょっと可哀想

667:デフォルトの名無しさん
23/11/23 16:52:07.60 t7xzkVTj.net
はよそのコードを出せよ
それも出せないくせに偉そうに御託をごちゃごちゃ言う
偉そうに自分語りするくせに的外れ
虫唾が走る

668:デフォルトの名無しさん
23/11/23 17:57:28.21 qpiJFg02.net
継承はプログラミングスタイルとして決定が多いため
モダンな各プログラミング言語で継承が不採用となっただけでなく
Reactでも継承を使わずに済むように進化してきたのよ

669:デフォルトの名無しさん
23/11/23 18:04:46.83 t7xzkVTj.net
おーいまた遅レスかー?
快活クラブから出ちゃったのー?

670:デフォルトの名無しさん
23/11/23 18:52:56.05 t7xzkVTj.net
>>644
多分そういう意味すらわかってないと思うよ
プロトタイプ継承がどうとかそんな話とカンケーないのにな
とっととReactのリポジトリクローンしてgrepすりゃわかるのに
何でその程度のことができないのか

671:デフォルトの名無しさん
23/11/23 19:34:58.02 5s3/w8/I.net
src/foo/bar.jsの124行目見てどう思うプギャー
とやればいいだけなのになぜかやらない

672:デフォルトの名無しさん
23/11/23 21:12:25.76 FMewW6Qw.net
>>629
それは理解がおかしい
浅い深いのコピーの分類ではうまくいかなかったのが歴史
それが所有権の概念とムーブセマンティクスの導入で整理されたのが今の状態
浅いと言っていたのがムーブで深いのがコピー
ヒープがどうのこうのってのは間接的なこと
そもそもヒープが単一って前提もc++にはない

673:デフォルトの名無しさん
23/11/23 21:20:40.39 FMewW6Qw.net
>>634
まぁ判断は難しいね
下手に表現力が高かったがために、一見言語組み込みでやるべきものの多くがユーザー側で実現されてきた
様々なテクニックが発見され発展速度向上には寄与しただろうが一方で深い考察のなく導入された結果仕様の複雑さを招いた
個人的にはエラーメッセージ見ても何が悪いのかすぐに理解できない代物になったのは許せないね

674:デフォルトの名無しさん
23/11/23 21:32:54.70 12+j04nO.net
C++のテンプレートはCのマクロ文化を止めたかったんでしょ
メタプロガチ勢が頑張りすぎてカオスになったけど功績は大きいと思う

675:デフォルトの名無しさん
23/11/23 21:58:33.69 hsLNP7GU.net
ディープコピーを知らずに盛大に恥を晒した某オジがコピーについて語るとか世も末だなw

676:デフォルトの名無しさん
23/11/23 22:09:33.63 t7xzkVTj.net
テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
例のコピー可能オブジェクトの話とも絡んできて「無理」となる
この辺Rustはよくできてる
イテレータが可変参照なのか共有参照なのか、実体なのかによってきちんと分けられている
C++で困った部分を完全に解決してくれてる
Rust素晴らしい

677:デフォルトの名無しさん
23/11/23 22:28:06.68 0De2U7us.net
>>652
>テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
>まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
STLで何か問題でも?

678:デフォルトの名無しさん
23/11/23 23:13:27.00 FMewW6Qw.net
そりゃSTLで満足してる間はそれでいいだろ
アロケーターを指定したことないだろ?

679:デフォルトの名無しさん
23/11/23 23:28:00.45 M3SMKrV5.net
むかしはSTLがない環境も多かったからね
windows環境ではクソ遅かったせいか
完全にないものと扱う奴さえいた

680:デフォルトの名無しさん
23/11/23 23:30:28.39 0De2U7us.net
>>654,655
じゃ今の


681:STLは問題ないで良いのかな?



682:デフォルトの名無しさん
23/11/23 23:37:07.63 u/H26W0M.net
>>652
そこに加えてRustはスタック領域も扱えるからさらにヒープ使用を減らせるところ

683:デフォルトの名無しさん
23/11/23 23:37:56.70 09UkZirn.net
問題ないと問われればあるだろうね
ただよく訓練されたC++使いは気に入らないと文句を垂れても仕方ない事もよく理解してるから
その環境で可能な別の手段を用いるだけだよ

684:デフォルトの名無しさん
23/11/23 23:39:53.17 0De2U7us.net
>>658
曖昧なことしか書かんのだな
問題あるならどのような問題かを短いサンプルコードで具体化してよ

685:デフォルトの名無しさん
23/11/23 23:48:05.78 09UkZirn.net
どのような問題かなんて別の手段で解決した後に覚えてるわけないじゃん
何でも欲しがりさんには判らないか

686:デフォルトの名無しさん
23/11/23 23:58:49.29 0De2U7us.net
>>660
示せないなら問題あるなんて言ってはいかんだろうよ?

687:デフォルトの名無しさん
23/11/24 00:21:55.00 oZLKiYTi.net
C++はSTLを一応擁しているけど、各プロジェクトで、もうちょっと軽量で自分とこ向きのコンテナ持ってるとこが多い
異論は認める

688:デフォルトの名無しさん
23/11/24 00:29:35.14 qKRvRsRu.net
>>662
でその自作コンテナを矛盾なく書くのがめちゃくちゃ難しいとな?
今のSTLは問題ないで良い?

689:デフォルトの名無しさん
23/11/24 00:31:58.77 oZLKiYTi.net
俺はSTLが重厚すぎて自分の手に負えないと思ってるので、なんとも。
STLにもバリエーションがあるのは承知していて、あんまり幅広く試せてないってのも。
ただし、依存(include)してるプロジェクトは当然あるし、試作には便利なので、ないのは困る。

690:デフォルトの名無しさん
23/11/24 07:39:29.33 eRQLkcC1.net
>>652
要素の型が実体とポインタ両方に対してうまく動くようにする

それはポインタを部分特殊化しろ、ということでは?

691:デフォルトの名無しさん
23/11/24 08:38:00.98 4SGglGUV.net
>>663
同意を求めるなよw
お前の用途ではSTLで十分ってだけ
そうじゃない場合もある
STLで足りるならboostもEASTLも存在してない

692:デフォルトの名無しさん
23/11/24 11:26:41.73 qKRvRsRu.net
>>666
>>652
>テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
>まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
これがいったい何のことを言っているのか分からんので
STLで問題を指摘させれば共通の題材として議論できるからSLT取り上げた

693:デフォルトの名無しさん
23/11/24 11:31:35.71 UKwUTpr8.net
継承を使いこなせない者同士仲良くしろよなw

694:デフォルトの名無しさん
23/11/24 14:20:00.82 v63PRHPl.net
嫌儲にまでスレ立てることないだろw

695:デフォルトの名無しさん
23/11/24 14:23:40.25 9RAaBgN9.net
全然伸びてなくて草
こんな過疎スレで敗走したからって嫌儲民おらに力を分けてくれーーってやろうとしたけど
そこでも無視されてる
情けない奴だ
だからゴミクズなんだよ

696:デフォルトの名無しさん
23/11/24 14:29:03.78 rK2EDUzF.net
Why I think C++ is still a desirable coding platform compared to Rust
URLリンク(lucisqr.substack.com)

697:デフォルトの名無しさん
23/11/24 14:36:54.58 eHJQmp62.net
>>671
そもそも前半の話いる?w
的外れ過ぎて意味のない指摘だよ

698:デフォルトの名無しさん
23/11/24 16:11:19.50 UVQLfV0S.net
>>671
これは酷いw

699:デフォルトの名無しさん
23/11/24 16:25:00.95 tvJVQF3W.net
いくらめんどくさくても安全のお守りがほしいんすわ
C++製システムがクラッシュしてうなだれたあの日の鬱憤が安全を求めるんすわ

700:デフォルトの名無しさん
23/11/24 16:34:40.23 6OrpRj0R.net
>>671
何故この手のやからって、
自分は今まで大丈夫だったから他の人(今度の新卒社員とか)も�


701:蜿苺vに違いないと思えるんだろうか。 いつも一人で仕事してるのかな。



702:デフォルトの名無しさん
23/11/24 16:45:30.90 Oe/LAESW.net
>>671
その人はRustを知らなすぎるな
C++はインラインアセンブリがある云々もRustにもあるし
算術ラッピング演算の件もRustはラッピングの有無両方が用意されてるのを知らずに書いていたり

703:デフォルトの名無しさん
23/11/24 16:52:45.75 KbRqc6TK.net
フルボッコで草

704:デフォルトの名無しさん
23/11/24 16:55:26.04 rK2EDUzF.net
めっちゃ感想来てるw

俺は読まずに貼った、おもしろそうだったから
[Roast Me] って付いてたので、異論は認める系の日記かなって思ってた
仕事終わったら俺も読む 気にしないから感想はご自由に

705:デフォルトの名無しさん
23/11/24 19:51:30.59 FR/8T+5m.net
>>674
わかる。他人の書いたC++ライブラリがめっちゃメモリリークする時とかそう思うわ

706:デフォルトの名無しさん
23/11/24 19:53:16.58 Pf2BWo+V.net
元記事に英語でコメント付けに行くことはしい内弁慶たちであった

707:デフォルトの名無しさん
23/11/24 20:53:52.01 HwIqF0Eo.net
>>652
要約: バカには無理

708:デフォルトの名無しさん
23/11/24 22:58:47.93 cJ52o0CU.net
使うなと言ってもバカはクラス継承をどうしても使いたがって質を下げるため
モダンなプログラミング言語は一斉にクラスごと言語から排除した

709:デフォルトの名無しさん
23/11/24 23:09:27.03 UpLQZeUm.net
そうそうバカはclassやextendを無くせば実装継承が無くなったと勘違いするからバカに気づかれないようにカモフラージュして実装してバカが無節操に使わないようにしてるんだよなぁ

710:デフォルトの名無しさん
23/11/24 23:40:23.66 qKRvRsRu.net
そうしてマイナー言語マニアの思い出の一つとして
長く記憶に留まる言語となるであろう

711:デフォルトの名無しさん
23/11/25 00:57:31.51 xDUppX6s.net
>>683
実装継承の定義教えてくれ

712:デフォルトの名無しさん
23/11/25 09:02:19.65 rKTwm3uz.net
>他人の書いたC++ライブラリがめっちゃメモリリークする
某OSのAPIのことですね判ります

713:デフォルトの名無しさん
23/11/25 09:47:04.81 9BsUE7B+.net
>>685
サブタイピング時に
上位の型が持つ実装コードの一部が
下位の型と共有されること

714:デフォルトの名無しさん
23/11/25 21:29:31.59 1Ohowu9E.net
嘘オジと複オジは撃沈されたようだな

715:デフォルトの名無しさん
23/11/26 15:19:59.23 06WEnIxy.net
OSにバグがあって後処理をしてもOSがリソースを掴みっぱなしになるといった経験はないだろうか。
そういった場合そのリソースを使う箇所だけ子プロセスとして隔離し、使い終わったらそのプロセスを終了する事でリソースを完全に開放させることが可能だ。
このプロセスの隔離はかなり万能な解決方法で、納期が短くて怪しいと思っても修正が困難なケースにも応用可能だ。
まあ要するにリークを疑われる場合一旦別プロセスにすれば必ず開放されるからリークは必ずしも怖くないよって話。

716:デフォルトの名無しさん
23/11/26 15:30:13.25 qv9H5y0z.net
と、御社の現お取引先ホームページにありますね。
弊社はRust採用実績十分、リークは原則としてありません

717:デフォルトの名無しさん
23/11/26 16:02:44.80 GTIMQwMH.net
>>687
いい定義だな

718:デフォルトの名無しさん
23/11/26 16:21:23.35 8OjiBh4l.net
Rustはモダンな言語の一つなので
その定義でもRustは実装継承を持たずきちんと排除している

719:デフォルトの名無しさん
23/11/26 18:06:50.18 6qvbnksS.net
結局、c++が最狂ってことでいいな?

720:デフォルトの名無しさん
23/11/26 18:08:00.70 Dq1p+inG.net
>>618
c++が最凶最悪

721:デフォルトの名無しさん
23/11/26 18:37:35.88 4YJKEDWv.net
>>689
OSの


722:バグならアプリのプロセスを落としたところでリソースが解放されるとは限らない プロセス落とすのはどちらかと言うとアプリのバグに対処するため



723:デフォルトの名無しさん
23/11/26 18:49:55.09 o8qwwCxG.net
>一旦別プロセスにすれば必ず開放される
doubt

724:デフォルトの名無しさん
23/11/26 19:14:33.38 6NRjjzPt.net
すくなくともWindowsは長期間起動し続けると空きメモリが減っていく
OSが意図的に開放せずにキャッシュしてるのかリークなのかは分からないが

725:デフォルトの名無しさん
23/11/26 19:39:37.59 AfiVlC9p.net
>>689
それ本当にOSのバグ?w

726:デフォルトの名無しさん
23/11/26 19:41:06.05 Lbe7PiAw.net
>>689
子プロレス切り離しが大仕事だろ
そこで別のバグが大量に入り込む
全然簡単な話じゃない
お前言うだけでやったことないだろ

727:デフォルトの名無しさん
23/11/26 19:44:09.20 EBR4w0d/.net
>>689
きっしょ

728:デフォルトの名無しさん
23/11/26 22:37:51.44 06WEnIxy.net
俺が遭遇したのは2件で、どちらもOSの不具合という結論だよ
MSのナレッジに残ってるかもしれないがどっちもプロセスを終了するしか解決策が示されなかった
>>699
こういう理不尽に遭遇して回避策が示されたなら大仕事でもやらざるを得ないと思うけどね
別に難しいって程でもないし

729:デフォルトの名無しさん
23/11/26 22:48:32.77 06WEnIxy.net
そういや別件でOSが設定しているタイムアウト値を待てない場合も別プロセスにして回避した事がある
この板って年寄りばかりだろうしWindowsのプログラミング長年やってれば何度かそういう事に遭遇するんじゃないの

730:デフォルトの名無しさん
23/11/26 23:01:37.86 iMOX0Yuj.net
あのね、年寄りが真面目に答えてやるとOSの観点から言うと
windowsとLinuxじゃプロセスの考え方が結構違ってて
Linuxの場合、バックグラウンドプロセスっていうのは普通に使われまくってるの
いわゆるプロセスのクローンだから扱いが楽
シェルから作れるし

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

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

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

以上がwindowsでもLinuxでも並行処理を書いてきた俺の感想

731:デフォルトの名無しさん
23/11/26 23:12:09.99 dlQxZ4PC.net
Windowsはプロセスもスレッドも、互換性チェックみたいのが重厚らしく超高コスト
さらに、セキュリティソフトが走ってるのが当たり前の世界なので、ファイルハンドルも高コスト
なんでもWSL2でやったほうが軽い? らしい

てことで、コルーチンはいいぞw

732:デフォルトの名無しさん
23/11/26 23:30:18.11 EFSUb3PR.net
Rustの東京を使えばデフォルトでCPUのコアスレッド数をフル活用してコルーチンを何万も同時に動かせますものね

733:デフォルトの名無しさん
23/11/27 00:37:45.36 ggQuSpTQ.net
Elixir は、10万もの小プロセスを起動できる

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

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

Goの方が、CPUコアを効率的に使える

734:706
23/11/27 00:48:36.74 ggQuSpTQ.net
とにかく、スレッドを起動したらダメ!

CPU コアや時間の大半が、起動処理に使われるから

735:デフォルトの名無しさん
23/11/27 00:59:58.17 zZXu+dmb.net
とはいえコルーチンって使い所が難しいのよ
流行りそうで流行らないのがその理由
結局「本当の並列性が必要ないようなすぐ終わる処理を大量にする」ユースケースにしか使えないから

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

よって普通の言語では使うのが難しい

736:デフォルトの名無しさん
23/11/27 01:36:12.87 O2rw1r7K.net
>>706
使いたければc/c++にはむっかしからコルーチンにファイバーがあるから
native言語なんだからosの資源使う上で不利になるはずない

737:デフォルトの名無しさん
23/11/27 01:38:37.07 AHLzaHDv.net
>>706
>Goの方が、CPUコアを効率的に使える

そう主張したかったら根拠を示さないとね
例えば逆の根拠として
Go各のgoroutineは別々の各々のスタック領域を必要とするけど
Rustはスタックレスなコルーチンだから必要とせずその分だけ効率的だね

738:デフォルトの名無しさん
23/11/27 01:45:48.38 zZXu+dmb.net
>>707
普通はスレッドプール使うやろ

739:デフォルトの名無しさん
23/11/27 06:31:05.54 klBkI3Ol.net
おれの作成したソフトは起動時に64個のスレッドを立ち上げているが常にサクサクだ

740:デフォルトの名無しさん
23/11/27 07:50:36.80 h6EdzCL7.net
>>712
言語は何?

741:デフォルトの名無しさん
23/11/27 07:54:36.67 klBkI3Ol.net
cppは光速

742:デフォルトの名無しさん
23/11/27 09:19:45.20 7/k6/GSg.net
>>701
それどころかプロセスを完全に終了させても解放されないリソースが残ることがある
OSを再起動してやっと治る
こんなもんOSのバグとしか言いようがない

743:デフォルトの名無しさん
23/11/27 09:21:22.84 7/k6/GSg.net
>>702
あるね
>>699 こそやったこと無い香具師だと感じる

744:デフォルトの名無しさん
23/11/27 09:24:14.02 7/k6/GSg.net
>>703
Windowsにforkがあれば良かったと思うことは何度かある

745:デフォルトの名無しさん
23/11/27 09:26:12.71 7/k6/GSg.net
ああでも
>>703
>一方windowsではexeなんでクソ重い上に扱いが面倒
>データ共有やプロセス間通信も一苦労だ
>だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う
ここは完全に間違ってるよ

746:デフォルトの名無しさん
23/11/27 09:30:39.99 7/k6/GSg.net
>>706
>C で、100スレッドを起動したら、
>CPU 使用率が高く、12秒も掛かったが、
>
>Goで100 goroutine を起動したら、
>6スレッドしか起動せず、9秒で済んだ
可笑しな理屈だな
スレッド数で比較するならgoでも100スレッド使って比較するか
Cの方でスレッド数増やさないCで描いたコルーチンで比較するべきだろ

747:デフォルトの名無しさん
23/11/27 10:19:10.91 bfNyVWtl.net
プロセスを分けて独立したメモリ空間の単位で障害を切り離して耐障害性を高めるのは昔からよく使われる方法だけどこれはスレッドやコルーチンでは代用できない
並行性を高める目的ならコルーチン+スレッドプールが最も効率が良い
C++やRustはまだまだ使いにくいけどGoやC#やSwiftのように使いやすいAPIが用意されれば誰もが当たり前のように使うようになる

748:デフォルトの名無しさん
23/11/27 13:17:02.15 y1vsdTcE.net
>>717
ある程度時間がかかる処理を並行で動かすという面でこれほど楽で使いやすいものはないしね
windowsへの移植性を上げるためにはforkを捨てなきゃならんのはかなり厳しい

749:デフォルトの名無しさん
23/11/27 13:22:19.90 y1vsdTcE.net
windowsくんェ
URLリンク(draftcode.github.io)

750:デフォルトの名無しさん
23/11/27 13:27:11.60 UqO8a829.net
fork移植されてると思うけどそういう話ではなく?

751:デフォルトの名無しさん
23/11/27 13:40:29.77 y1vsdTcE.net
>>723
pythonじゃ使えないぞ

752:デフォルトの名無しさん
23/11/27 14:04:14.09 l+s92lQ4.net
遅くともcygwinとかで、なんちゃってforkは実装されてるけど、コレジャナイ感は付きまとうんだよな(個人の感想です

753:デフォルトの名無しさん
23/11/27 14:10:54.29 O2rw1r7K.net
execなしのforkなんて時代錯誤もいいところ
いまだに使ってるやついんのか?
さっさと引退するのが世のために

754:デフォルトの名無しさん
23/11/27 14:17:35.21 zZXu+dmb.net
RubyもNotImplementedError
Perlはエミュレーションしてるがすでに非推奨レベル

755:デフォルトの名無しさん
23/11/27 14:21:41.56 +D1aTXqp.net
こんどはforkを取り囲んでフェルマータするターンか

756:デフォルトの名無しさん
23/11/27 15:12:24.83 qB4qrVrI.net
forkは同じページを(書き換えるまで)共有できるのが売りだと思うけどwin版は最初からコピーするのか
そんな実装でfork爆弾作れるの?

757:デフォルトの名無しさん
23/11/27 15:12:35.28 l+s92lQ4.net
ま、雑談だからな おもしろければどうでもおっけー

758:デフォルトの名無しさん
23/11/27 15:37:56.10 +D1aTXqp.net
オジジジジジw

スレリンク(prog板:667番)
667: 仕様書無しさん 2023/11/24(金) 01:57:39.09
>>665
C++のスマポは機能が弱すぎてできないことが多すぎる
例えばヒープ領域しか指せないから
(L1キャッシュ効果と領域確保解放コスト無しで高速な)スタック領域の活用がスマポではできない

759:デフォルトの名無しさん
23/11/27 15:50:29.33 UqO8a829.net
スタック領域をスマートポインタで指す必要はあるの?

760:デフォルトの名無しさん
23/11/27 15:57:04.75 l+s92lQ4.net
先々で、うっかりfreeするような書き方してしまったときにコンパイルエラーで止まってほしい
実体としては生ポだけど、チェック用の何かにラップされてる…そういうスマポ

761:デフォルトの名無しさん
23/11/27 17:16:07.46 FscsMJtl.net
いつものように誰かが書いてた受け売りで中身は理解してないんだろ
少し突っ込まれたら表面的なことを繰り返す壊れたレコードになる

762:デフォルトの名無しさん
23/11/27 17:19:29.35 ZLucLoet.net
www.microsoft.com/en-us/research/uploads/prod/2019/04/fork-hotos19.pdf

763:デフォルトの名無しさん
23/11/27 19:00:17.85 UqO8a829.net
>>733
実装すれば良いのでは?

764:デフォルトの名無しさん
23/11/27 19:12:23.49 MloD+hDC.net
>>731
スタック領域は勝手に解放されますが

765:デフォルトの名無しさん
23/11/27 19:23:48.42 VTBvXWTh.net
Rustはヒープ領域だけでなくスタック領域にまで所有権やムーブや参照の概念を拡張したことから
C++よりスタック領域の活用で効率的になってる話ではないか

766:デフォルトの名無しさん
23/11/27 19:41:50.12 4LX/kS4x.net
>>738
コードで示してよ
C++の

767:デフォルトの名無しさん
23/11/27 19:55:41.13 XLFtaca7.net
>>738
単に「何でもスタックに積む」というだけでは?
ヒープはVec Box使わないと確保できないんじゃなかったっけ。

768:デフォルトの名無しさん
23/11/27 19:57:13.46 ceTrdy2T.net
C++は書くのがしんどい
Rustもしんどいけど、生成AIに書かせたコードもコンパイルとテスト通ればメモリリークの心配なく使えるので気持ちは楽


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch