X



結局C++とRustってどっちが良いの? 8traits
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
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/
0002デフォルトの名無しさん
垢版 |
2023/10/28(土) 13:45:36.64ID:fh9BWjjr
あるあるトピックス
・後発のRustは優れている(この点で特に争いはない
・といっても、C/C++から「推し変」するほどじゃない(使わないとは言ってない
・ていうか、Cとの比較と、C++との比較は違うくね?
・いくら安全っつっても、ヘタクソがunsafeだらけに書いちゃったらおんなし
・てかC++にも unsafe{ } はよ

・web方面、特に基盤部分での人気すごいね
・ChatGPTとかが賢くなる(のに賭けてる)からどうでもいい
0003デフォルトの名無しさん
垢版 |
2023/10/28(土) 13:50:00.20ID:1iiYkiVL
スレ立て乙
unsafe {
0005デフォルトの名無しさん
垢版 |
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」などがある。
0006デフォルトの名無しさん
垢版 |
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に書き換えて、
そこから徐々に広げることで段階的にセキュリティ上の恩恵を受けようという戦略なのだ。
0008デフォルトの名無しさん
垢版 |
2023/10/29(日) 11:34:03.80ID:GrwAVmld
>>2
C++はデフォルトがunsafeだから、入れるならsafe{}じゃないのけ?
0009デフォルトの名無しさん
垢版 |
2023/10/29(日) 11:55:56.89ID:jrKbdvhX
デフォルトをsafeにするって話やろw
そうすると現行のライブラリはビルドできないので取り敢えず全部unsafeで囲う
バージョンを重ねてunsafeの部分を減らすって戦略でしょ?
0012デフォルトの名無しさん
垢版 |
2023/10/29(日) 13:01:53.93ID:IsQ6p7Vf
positive list と nagative list の違いやろ
どっちも一長一短があるってだけで
どっちが一方的に優れているということではない
0015デフォルトの名無しさん
垢版 |
2023/10/29(日) 14:24:26.17ID:IsQ6p7Vf
ちなみに Rust の unsafe {} は positive list に相当すると思う
0016デフォルトの名無しさん
垢版 |
2023/10/29(日) 16:22:18.96ID:UpWU1GX+
時代は静的検出なので、冒頭に

#pragma safe

とかでも書くとかになるんじゃないかな
そのうしろに、縛りの識別子が入るのでもいい
0018デフォルトの名無しさん
垢版 |
2023/10/29(日) 18:07:40.10ID:UpWU1GX+
} // あとでみなおす

とりあえず生ポはなしかな
ポインタはきちんと定義される
0019デフォルトの名無しさん
垢版 |
2023/10/30(月) 01:11:12.37ID:SHIqNVOV
>>9
あー、そういうことね。
0020デフォルトの名無しさん
垢版 |
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()となる
0021デフォルトの名無しさん
垢版 |
2023/10/31(火) 05:55:29.82ID:DJT4usEp
ゲーム業界はC++かC#
Rustが入る余地なし
0022デフォルトの名無しさん
垢版 |
2023/10/31(火) 08:54:10.63ID:5Lja4y81
Rust がリファクタリングと相性が悪いんじゃないか
と思うことが時々というより割と頻繁にある
0023デフォルトの名無しさん
垢版 |
2023/10/31(火) 10:17:54.25ID:Fz0aDVxr
設計が悪いおじさん「設計が悪い」

…とはいうものの、書き味ってもんがあるよね言語って
0025デフォルトの名無しさん
垢版 |
2023/10/31(火) 22:01:39.08ID:PwivvYFW
Rustはリファクタリングや更新メンテとの相性いいと思う
C/C++で他人もしくは過去の自分が書いたコードの肝の部分をうっかり踏み抜いてメモリデバッグコースとなるところを
Rustは未然に防いでくれてる
0026デフォルトの名無しさん
垢版 |
2023/10/31(火) 22:13:21.13ID:3AsVVcfX
リファクタリングでエンバグしにくいけど、そもそもリファクタリング自体しにくいよね
0027デフォルトの名無しさん
垢版 |
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が提供できるようになるかどうかまだわからないけどまあ頑張ってという感想
0028デフォルトの名無しさん
垢版 |
2023/11/01(水) 03:51:28.75ID:5z6NYMjm
悪い(かも知れない)設計を
良い(かも知れない)設計に
するのがリファクタリングのモチベだと思うので
元の設計が悪い(かも知れない)のは仕方ないが
良い(かも知れない)設計に変更するのを阻む力をRustはもってる
もちろんリファクタリングでエンバグしない利点は認めている
0029デフォルトの名無しさん
垢版 |
2023/11/01(水) 03:53:16.74ID:5z6NYMjm
更新メンテでエンバグしないと言っても
汚いコードが汚いまま増設されていく不安しかない
0032デフォルトの名無しさん
垢版 |
2023/11/01(水) 08:49:48.50ID:VeDR0B8A
耳が痛いわ〜w (横から

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

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

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

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

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

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

そもそも現代主流のグレゴリオ暦自体が欠陥だらけ (素数の7を週単位にしている、月の日数がバラバラ) だから、効率を気にしてもしょうがない。
完全数の6と3素数積の30を基準にすれば全然違ったのにな。
0068デフォルトの名無しさん
垢版 |
2023/11/03(金) 11:42:31.25ID:7w5cnhLp
>>58
シリアライズ時と異なるエンコーディングで復元しようとしたらそりゃバグるわな
でもそんなやつらのために内部表現を統一しろと言われても誰も相手にしないでしょ
0069デフォルトの名無しさん
垢版 |
2023/11/03(金) 12:30:23.11ID:xNBDqk0z
>>56
JavaはWeekFields経由で日曜始まりにもできる
Pythonは日曜始まりのインデックスを直接取得することはできないがcalenderモジュールで日曜始まりのカレンダーを扱える

どちらもRustほど低レイヤーやC++を意識する必要がないからRust比べて少し高いレイヤーで日曜始まりにも対応している
Rustの開発者にとって最もいい状況が他の言語の開発者にとっても最もいい状況とは限らない
0070デフォルトの名無しさん
垢版 |
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が複数出現するが、この中にも複製おじさんが多数含まれていると考えられている。
このように自分の誤りを認識した場合、それを認める書き込みは決して行わず、別人の振りをして最初から正しく理解していた体を装うのも複製おじさんの特徴である。
0074デフォルトの名無しさん
垢版 |
2023/11/03(金) 16:35:04.29ID:hQugpIJj
プログラミング言語は とにかくユーザ数が増えて裾野が広がらないとだめよ

とはいっても、Rustはその性格上 エンジン系にはとても強いと思う
0075デフォルトの名無しさん
垢版 |
2023/11/03(金) 20:01:25.17ID:oS0jLPzO
なんでゲームに向いてないの?
0077デフォルトの名無しさん
垢版 |
2023/11/03(金) 20:23:49.80ID:m1BMAQzf
>>74
ゲームエンジンこそどうでもいい
どうせ他人の成果物使うだけやし
つまりRustはゲームプログラミングに向いてない
0082デフォルトの名無しさん
垢版 |
2023/11/03(金) 21:23:41.57ID:YDoJin8V
>>78
むしろRustは大規模開発にも適するように設計された言語
今どきの普通にマルチパラダイムで当然オブジェクト指向もサポート
0084デフォルトの名無しさん
垢版 |
2023/11/03(金) 22:58:02.02ID:oS0jLPzO
>>75
>>79
グローバル変数が超絶面倒臭いからじゃね
0087デフォルトの名無しさん
垢版 |
2023/11/04(土) 00:10:04.03ID:vTgEadDD
既存のオブジェクト指向言語の置き換えを狙ってるなら
既存のオブジェクト指向言語の機能は備えんとなぁ
設計からやり直す必要が生じてまんどくさってなる
スクラッチから新たに書くのなら支障ないだろうけども
それではいつまで経ってもマイナー言語だよ
この先生きのこれん
0088デフォルトの名無しさん
垢版 |
2023/11/04(土) 00:22:53.36ID:p6vbmy4R
みんな反発しても結局オブジェクト指向に帰ってくる
みんなC++に帰ってくる
0089デフォルトの名無しさん
垢版 |
2023/11/04(土) 00:23:19.27ID:EeyeeoXm
最近のプログラミング言語は基本的にオブジェクト指向だがクラス継承だけは亡くなったらしい

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

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

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

1)の言語でGUI作れなくはないけど実際に作る開発者がかなり少ない
逆に2)の言語は大半の開発者がGUIを作ってる
それには理由があるということ
もっと言えばクラス継承的な機能の有無はトレードオフだからそれを理解しましょうねという話
0106デフォルトの名無しさん
垢版 |
2023/11/04(土) 10:34:34.64ID:2TRtrAOp
多くの高機能webサイトはGUIアプリと言って良いと思うが
ts jsのクラス機能はあるけど使わないな
0109デフォルトの名無しさん
垢版 |
2023/11/04(土) 12:01:10.23ID:vTgEadDD
>>89
思惑の違いが見事に結果に表れている分類だね
興味深い
0110デフォルトの名無しさん
垢版 |
2023/11/04(土) 12:09:00.72ID:vTgEadDD
>>104
その「言語のパラダイム変化」って具体的にはどれを指している?
Rustがユーザを獲得する際の参考になるかもしれんね
0111デフォルトの名無しさん
垢版 |
2023/11/04(土) 12:27:39.60ID:KPpuxUox
オブジェクト(classじゃなくてstructで良い)があって
正しい型指定で正しく関数が呼ばれてれば
クラス継承なんて要らないんだよな
別に禁止というほど厳しくやらなくても自然とそうなる
0112デフォルトの名無しさん
垢版 |
2023/11/04(土) 12:29:16.51ID:KPpuxUox
C++ の template なんてあれオブジェクト指向じゃねーし
0113デフォルトの名無しさん
垢版 |
2023/11/04(土) 12:35:18.44ID:eFHrirh7
>>105
KotlinとSwiftは最初からGUIアプリをターゲットにしてるしそれ以外の分野では全然使われてないような
0114デフォルトの名無しさん
垢版 |
2023/11/04(土) 16:44:29.40ID:qG8ydW8y
いまさら人に聞けない
悪い継承ってのがわからなくなった

継承おぼえたてて(一人プロジェクトが)めちゃくちゃになった経験ならあるけど、そうじゃなくてこう
0115デフォルトの名無しさん
垢版 |
2023/11/04(土) 17:10:03.05ID:S8hti0fw
クラス継承は必要
オブジェクト指向を理解できないのはただのザコ
0116デフォルトの名無しさん
垢版 |
2023/11/04(土) 18:03:19.84ID:rn/KP434
>>115
最近のプログラミング言語たちが揃いも揃ってクラス継承を不要と判断しちゃいましたぁ
【クラス継承がない言語】Elixir、Go、Julia、Nim、Rust、Zig
0119デフォルトの名無しさん
垢版 |
2023/11/04(土) 18:42:09.44ID:vTgEadDD
Rustも同じく普及戦略を誤った言語だよ
0120デフォルトの名無しさん
垢版 |
2023/11/04(土) 19:41:01.77ID:hPdVOFaj
Pythonスーパーセットのmojoにこのまま成長してほしいけどシープラRustの競合にはならないか
0122デフォルトの名無しさん
垢版 |
2023/11/04(土) 21:29:47.46ID:9ClykILV
結局ユーザーが欲しかったのは「ポインタのないC++」であって所有権やtraitみたいな使いづらい独自機能じゃなかったんだよなあ
0123デフォルトの名無しさん
垢版 |
2023/11/04(土) 22:19:37.19ID:+CP/CRpL
>>122
所有権はC++にもある
traitはC++の抽象クラスからデータ(メンバー)を分離独立させてより良い設計ができるようになっている
使いづらくなっていない
0126デフォルトの名無しさん
垢版 |
2023/11/05(日) 11:48:56.89ID:8w5QKIdz
精度の違いであって継承関係無いな。
むしろ継承したらダメなやつ。
共通のインターフェースを用意するのが普通。
0127デフォルトの名無しさん
垢版 |
2023/11/05(日) 12:19:51.94ID:pw4Q0c9f
パフォーマンスを度外視するなら
浮動小数点数型をfloatとdoubleの両方とも継承するのが自然かなぁ
0128デフォルトの名無しさん
垢版 |
2023/11/05(日) 17:32:34.60ID:vp0BWznn
>>127
その浮動小数点型ってどんなもの?
インターフェースじゃないんだよね?
0129デフォルトの名無しさん
垢版 |
2023/11/05(日) 19:27:50.24ID:aeGT2yJ/
>>116
自分に都合の良い言語のみ列挙する
まさにザコ
自分の考えが無い
0133デフォルトの名無しさん
垢版 |
2023/11/06(月) 10:12:15.79ID:48qtdwXc
Rustとの相性で言えば
Rust+Pythonはかなり良い
Rust+Cが最強
Rust+C++は最悪

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

Nimの勝ち
0135デフォルトの名無しさん
垢版 |
2023/11/06(月) 14:46:38.23ID:DT4BUOTR
テンプレートパターンやるにしても今は継承よりもクロージャで渡す方がわかりやすいって話やね。
まあどっちにしろ低レイヤー言語だとオブジェクトの解放タイミングとか気にしてめんどくさくはなるが。
0138デフォルトの名無しさん
垢版 |
2023/11/06(月) 18:05:43.27ID:BlmWAswu
>>134
そもそも流行りの話自体何の根拠にもなってないんでこの話自体無意味
無意味な話は時間の無駄
0142デフォルトの名無しさん
垢版 |
2023/11/06(月) 21:52:22.89ID:xwaCKIbt
Nimの唯一のメリットがPythonに似た文法と言われているが
このスレの住人はそれをメリットと感じない
0143デフォルトの名無しさん
垢版 |
2023/11/06(月) 22:00:03.84ID:juqSJt+O
何でお前が住人を代表してるの?w
0147デフォルトの名無しさん
垢版 |
2023/11/07(火) 07:52:40.08ID:Z7KocuHY
>>146
c世代はそうだけど、pythonユーザーの方が多い現在はインデントブロックの方が主流。じゃなきゃYAMLとか流行らん。
LISPも丸括弧使ってるけどインデントブロック風の整形しているし、波括弧ブロックが多数派とは思えん。
0150デフォルトの名無しさん
垢版 |
2023/11/07(火) 09:23:10.10ID:pJrSerDn
Pythonみたいなインデントずれたら明後日の動きする様な言語は欠損言語だろ
0151デフォルトの名無しさん
垢版 |
2023/11/07(火) 09:32:16.68ID:IkuZHVo7
「Linux」メンテナーの燃え尽き症候群問題--業務内容の変化と支援の必要性
https://japan.zdnet.com/article/35210969/

Corbet氏は「Rust」言語がLinux開発で採用されたことについて歓迎しているものの、これによってメンテナーにさらなる負担がかかるようにもなるとした。同氏は、「カーネルメンテナーを務める以上、Rust言語で記述されたコードのマージ依頼も受け取ることになるため、同言語に対する極めて深い知識が必要となる(中略)既に多忙を極め、自らの仕事量に圧倒されているメンテナーに対して、この新言語の学習を求めるのは酷というものだ。このため、この点は今後、問題となりそうだ」と述べた。
0152デフォルトの名無しさん
垢版 |
2023/11/07(火) 09:58:24.32ID:KQXk8Lyc
>>147
インデントに整形以上の意味を持たせた言語の方が好まれてるかどうかの話をしてるのに
他の言語でもインデントで整形してることを根拠にしても意味ないだろ
0154デフォルトの名無しさん
垢版 |
2023/11/07(火) 10:45:48.18ID:S2z7fl4T
whitespace significantな言語はプログラミングの素人にとっては多少読みやすいというメリットはある
しかしそれ以外はデメリットだらけなので素人を釣りたい場合を除いて採用するメリットがない
0155デフォルトの名無しさん
垢版 |
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%)と続いた。
0156デフォルトの名無しさん
垢版 |
2023/11/07(火) 16:44:22.56ID:K3Q4DPSx
> Pythonみたいなインデントずれたら明後日の動きする様な言語は欠損言語だろ
ほんとこれ
> インデントより会話の論点を揃えないとな
ほんとこれ
0157デフォルトの名無しさん
垢版 |
2023/11/07(火) 16:48:16.87ID:r4VgdGvO
>>150
ずれたら思ってない動作になる場合があるのは確かだが
ずれることがめったに起こらない
0158デフォルトの名無しさん
垢版 |
2023/11/07(火) 17:52:17.78ID:yNm6SVJF
正直食わず嫌いなんだが、あのインデント式、慣れない悪寒しかしない
yaml書かされるけど、おっかなびっくりだわ
0159デフォルトの名無しさん
垢版 |
2023/11/07(火) 18:32:13.35ID:WwhMyV/o
ifとかforがネストしてるときに論理構成変えたときに
ぐちゃぐちゃになったりしないの?
0160デフォルトの名無しさん
垢版 |
2023/11/07(火) 19:03:13.54ID:nOWHHYht
コピペした時困るのはあるけど
そんなネスト深いところにコピペする時点でコードが終わってるのだろう
0161デフォルトの名無しさん
垢版 |
2023/11/07(火) 19:24:21.76ID:RqjiUzBc
あっちのファイルはスペースで、こっちのファイルはタブでそれぞれインデントしてるとかw
更に同じファイル内でスペースとタブが混在したインデントしてるとかw
0165デフォルトの名無しさん
垢版 |
2023/11/07(火) 23:29:26.17ID:zgo9bT4J
>>151
>メンテナーに報酬を支払おうというところはほとんど「ない」のだ
メンテナーほぼ金貰ってないのかw
壮絶な時間の無駄だな
linuxなんて潰れちまえ
0166デフォルトの名無しさん
垢版 |
2023/11/07(火) 23:40:27.67ID:laLhHNQt
>>162
インデント構文はその醜さを完全に理解した親切な人が書くとわりとマシに読めるって話なら同意できる
0169デフォルトの名無しさん
垢版 |
2023/11/08(水) 10:02:49.03ID:RamzJ36x
>>165
Linuxなんて無料だから普及したってだけだし
無名の大学生が作った有料カーネルなんか誰が使うかよ
0173デフォルトの名無しさん
垢版 |
2023/11/08(水) 10:49:02.95ID:MFNjLgBF
NimはPython由来の文法が多い中でprocヘッダーの区切りをわざわざ=記号にしたのは何でなの?
0174デフォルトの名無しさん
垢版 |
2023/11/08(水) 11:13:52.74ID:U7ghqgyy
痘痕もエクボっていうしずっと使ってると美しく見えるのかもしれん
始祖のハゲ散らかしもイケオジに見えるのかもしれん
0175デフォルトの名無しさん
垢版 |
2023/11/08(水) 11:26:24.47ID:088wzVve
>>173
macro
0181デフォルトの名無しさん
垢版 |
2023/11/08(水) 15:41:40.86ID:hsKTrqcL
このスレの半分は複オジのウソで出来ています。
用法・用量を守って正しくご使用下さい。
0182デフォルトの名無しさん
垢版 |
2023/11/08(水) 15:50:23.42ID:J3/ZiO6G
複おじってニートでしょ?
なんか我々と対等に喋れること自体がとんでもない体験なんだし
もっと感謝して欲しいね
0183デフォルトの名無しさん
垢版 |
2023/11/08(水) 17:01:15.09ID:wMkAKLer
C++er的にC23ってどうなの?
0184デフォルトの名無しさん
垢版 |
2023/11/08(水) 17:32:19.27ID:K2ksJD7C
#embed はあると安心 ないとやっぱり一手間かかる
clangではできてたっぽいけど(VC派
0188デフォルトの名無しさん
垢版 |
2023/11/08(水) 19:13:26.39ID:mR96+8QE
>>182
とニートが申しております
0190デフォルトの名無しさん
垢版 |
2023/11/08(水) 20:15:54.45ID:dNhK+uJb
綺麗に書けるならという条件がつく
本来、綺麗に階層化するのが目的だったのが、どうしてもごちゃついてしまう
基本にして難 それが継承

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

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

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

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

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

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

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

自分用には、継承を、きれいに書けるようになりたい
C++から逃げるな
0229デフォルトの名無しさん
垢版 |
2023/11/09(木) 19:45:53.51ID:Nh0igmG8
ヌルポをなくしてOption型をデフォルトにすべきだった
コンパイラによるチェックを必須にすべきだったのよ
本当にこれだけのことで全てが変わった
0231デフォルトの名無しさん
垢版 |
2023/11/09(木) 20:26:38.28ID:GhU74Yg7
result型とoption型
rustだけがこの2つをデフォルトに採用した
生き残るのはrustだけ
0232デフォルトの名無しさん
垢版 |
2023/11/09(木) 20:29:05.07ID:8vjWDFJE
>>229
Object型じゃ型情報少なすぎるだろ。
全てのクラスにNullObjectを付けてnullptrを禁止すればマシになる。

あとインターフェイスはもっと制約を減らすべき。
c++テンプレートだと、テンプレート引数に指定するクラスはテンプレートについて何も知らなくていいけど、インターフェイスもそのレベルでクラス・インスタンスから切り離されているべきだ。
0233デフォルトの名無しさん
垢版 |
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値をとなってはいけなくここが肝要
0234デフォルトの名無しさん
垢版 |
2023/11/09(木) 21:05:40.49ID:GhU74Yg7
ただジェネリクスやテンプレートがないCに追加するのは容易ではない
それほど罪深い仕様
0235デフォルトの名無しさん
垢版 |
2023/11/09(木) 22:19:33.09ID:/jR/7UWQ
C++はまだ改良頑張ってるよ。
Cなんて、C11ぶり10年以上も改良してないとか酷すぎる。
0237デフォルトの名無しさん
垢版 |
2023/11/09(木) 23:32:03.13ID:alU/Ei+B
SOLIDすら理解してないやつがRust推してるのか
呆れを通り越して悲しみを感じる
0239デフォルトの名無しさん
垢版 |
2023/11/09(木) 23:51:27.12ID:/jR/7UWQ
>>236
新機能は決まって来年ISOから発行
0240デフォルトの名無しさん
垢版 |
2023/11/10(金) 00:37:21.40ID:YpxZ8uto
SOLIDもだが30年前から言われてるfavor composition over inheritanceの理由を理解してないのも呆れる
Rustの推し活する前にまずは基礎を学ぼうぜ
じゃないとどの言語使おうがゴミ量産するだけだぞ
0241デフォルトの名無しさん
垢版 |
2023/11/10(金) 02:22:01.34ID:bGIK0BM5
継承より合成とそうすべき理由を理解していないのはRustを叩いてる側だな
理解できないがためにいつまでもクラス継承に固執している
0244デフォルトの名無しさん
垢版 |
2023/11/10(金) 09:40:56.20ID:aa+qv15K
ついつい、機能を全部くらい使って書こうとしちゃうんだよね
複数世代のパラダイムが入ってるから、まぜるな危険
0245デフォルトの名無しさん
垢版 |
2023/11/10(金) 10:45:22.93ID:TCW8Ak5o
C++はスマホやPCと同じだよ
昭和ジジイはすぐ「これが持つすべての機能をマスターしてすべて使いこなそう!」とか無意味な事を考え
そして挫折して「パソコンなんて憶えても意味はないっ!人間の尊厳はもっとシンプルなものにあるのだ!
パソコンをつかわずに人間らしい美しい生き方をしよう!」とかいいだす
スマホもPCも自分に必要な機能だけ憶えて使えばいいだけ
0247デフォルトの名無しさん
垢版 |
2023/11/10(金) 13:40:46.42ID:E5/tDr6w
s/ジジイ/池沼/g
0249デフォルトの名無しさん
垢版 |
2023/11/10(金) 16:20:15.04ID:FL9N1XVu
c++はどっちかというとフロントボンネット開けっ放しでエンジン丸出しにしたテスラって感じだけどな
0251デフォルトの名無しさん
垢版 |
2023/11/10(金) 16:51:19.99ID:tLf5vZ8S
>>249
うまい例えのつもりなのか?
0254デフォルトの名無しさん
垢版 |
2023/11/10(金) 20:21:08.16ID:VDRR6isO
モーター
0255デフォルトの名無しさん
垢版 |
2023/11/10(金) 20:21:28.96ID:eRO+Ebqf
ガソリンエンジンか、エレクトリックエンジンかの違いだね
0257デフォルトの名無しさん
垢版 |
2023/11/10(金) 23:56:02.81ID:XAiSTtL/
>>248
継承を使わないほうが様々な問題を起こさず上手く書けるというのが本筋
例えばクラスと継承を広めたJavaの生みの親であるJames Goslingも>>102でJavaを作り直せるとしたら継承を除外したいと言っている
これはプログラミング言語界では共通認識であるためモダンな各言語ではクラスとその継承が除外されている
0258デフォルトの名無しさん
垢版 |
2023/11/11(土) 00:01:12.93ID:woXaVSWq
発言のコンテキストを理解しようとしないからアホな結論に達するんだよなあ
0259デフォルトの名無しさん
垢版 |
2023/11/11(土) 00:03:12.63ID:uDCEJA+a
どうでもいいくだらない話題で延びるのは
上の方に消したいレスがあるとき
0261デフォルトの名無しさん
垢版 |
2023/11/11(土) 00:53:13.03ID:Qqt+MGf6
>>258
伝言ゲームで多くの人を介した後の情報にしか接しようとしない人はコンテキストとかわかんないんだよ
0263デフォルトの名無しさん
垢版 |
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がチート職業!
0264デフォルトの名無しさん
垢版 |
2023/11/11(土) 07:03:04.53ID:6YPjiDGp
>>257
Rustはclassの機能をstruct,impl,traitにばらしているからな。

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

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

動的型付け言語なら「値がクラスであるための条件」を定義することで何がクラスであるか定義する言語もあるが
(にしたって継承に依存しないだろうが)
静的型付け言語も含めた一般的な定義としては使えなさそうだ
0273デフォルトの名無しさん
垢版 |
2023/11/11(土) 17:56:27.75ID:8uzQmIun
カプセル化などはクラス以外にも存在しクラスの固有機能ではない
クラスをクラスたらしめている要素は継承
Javaの生みの親が>>102で「Javaを作り直すとしたらクラスを除外したい」と発言した意図も、
その後に付加説明しているように「クラスを除外」とは「継承を除外」の意味としている
継承を使わないならクラスである必要はない
それがクラスごと除外した各モダン言語の意図だろう
0276デフォルトの名無しさん
垢版 |
2023/11/11(土) 18:28:45.74ID:mn5CSVOj
菱形は無理になくてもいい
…といいつつ、あとになって菱形になっちゃいましたもありうるんだろうしな
まあ積極的には使わん 人智を超えるw
0277デフォルトの名無しさん
垢版 |
2023/11/11(土) 19:45:32.60ID:2HJkyP1v
>>272
javascriptのprototypeに近いものをclassと思ってるんじゃないかな
0280デフォルトの名無しさん
垢版 |
2023/11/12(日) 00:36:55.65ID:E93HrjVI
>>267
ユーザー数と継承機能の有無は関係無いぞ
0283デフォルトの名無しさん
垢版 |
2023/11/12(日) 02:41:28.74ID:E93HrjVI
>>281
元になった言語があるかどうかじゃん。継承関係ねーじゃん。
0284デフォルトの名無しさん
垢版 |
2023/11/12(日) 04:42:06.75ID:yMP0yjCE
>>281
全部ドマイナー
0285デフォルトの名無しさん
垢版 |
2023/11/12(日) 08:54:04.31ID:TrDrLjQN
モダン言語=関数型ベースにボクの考えた似非オブジェクト指向追加するのが流行ってるだけって感じで終わってる
0287デフォルトの名無しさん
垢版 |
2023/11/12(日) 09:53:11.34ID:l8rhUXJt
>>283
ユーザ数が少ないとユーザは増えないんだよ
おまいらはどマイナー言語が趣味だろうけども世間は違う
ユーザ数を増やすには既存の言語のユーザを分捕るのが手っ取り早い
継承関係がないってことは他言語のユーザが学習したり
他言語のライブラリを移植する際にハードルとなる
期せずして書かれた>>89は上は全部どマイナー言語
下の言語はC++もそうだけどユーザー数が上より遥かに多い
普及戦略には既存言語との互換性が最大の影響を与えるということを示している
俺様の理想のみを追求した原理主義では誰もついてこない
0288デフォルトの名無しさん
垢版 |
2023/11/12(日) 09:57:24.71ID:l8rhUXJt
そういやRustで書かれたOSが実用化される話を読んだよ
軌道に乗ればRustを使う現場が増えるかもね
https://www.gizmodo.jp/2023/11/vivo-blueos.html
0290デフォルトの名無しさん
垢版 |
2023/11/12(日) 10:24:30.80ID:l8rhUXJt
本家は英語のページがない
https://blueos.vivo.com/
0293デフォルトの名無しさん
垢版 |
2023/11/12(日) 11:31:15.41ID:yMP0yjCE
>>288-290
Rust 推してんの中國人なんか?
そういえば github の Rust も中國語多い気がするな
Rust に関わるのもう辞めようかな
0294デフォルトの名無しさん
垢版 |
2023/11/12(日) 11:32:56.85ID:CMeM7fMz
情熱的な曲ってCmベース多いよ
ドマイナーはドマイナーじゃない(豆

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

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

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

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

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

やっぱり、クリティカル用のCってあったほうがいい
0332デフォルトの名無しさん
垢版 |
2023/11/14(火) 10:15:35.52ID:XadOWBX2
Cは進化を前提としたABIではないから
シンタックスシュガー的な強化しかできない
モダンな機能を求めるならCにトランスパイルする言語を使うことになる
0333デフォルトの名無しさん
垢版 |
2023/11/14(火) 12:09:27.81ID:SRCspH78
fn main(){
println!("{}", 111111111*111111111);
println!("{}", 111111111u64*111111111u64);
}
1653732529
12345678987654321
警告もコンパイルエラーも出ないんだが
Rustってあほなんか?
0336デフォルトの名無しさん
垢版 |
2023/11/14(火) 16:14:21.75ID:SRCspH78
あほが間違ったのを指摘できるのがRustのメリットじゃなかったんか
0338デフォルトの名無しさん
垢版 |
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型とみなされるようだ
エラーも丁寧に出るから初心者にもやさしいな
0339デフォルトの名無しさん
垢版 |
2023/11/14(火) 18:34:48.03ID:hryaTN3D
>>330
言い切るのはいいが、その根拠を示さないとな。
0341デフォルトの名無しさん
垢版 |
2023/11/14(火) 19:23:59.78ID:hryaTN3D
現状はそうだけど
それでは、未来永劫置き換わらないと言えないのでは?
sudoとか置き換わってるよ
0343デフォルトの名無しさん
垢版 |
2023/11/14(火) 21:16:27.35ID:K+bD5cJ/
オーバーフローチェックがどういう時に働くか把握してないならThe Bookからやり直しましょう
0344デフォルトの名無しさん
垢版 |
2023/11/14(火) 21:54:16.75ID:sG8x0H9f
>>341
置き換わってねーよw
0345デフォルトの名無しさん
垢版 |
2023/11/14(火) 22:10:44.82ID:elb2YwUG
>>331
Cの機能強化はあきらめろ。
委員会の顔はベンダーのほうをみていてCを良くしようなんて思ってないから。
0346デフォルトの名無しさん
垢版 |
2023/11/14(火) 22:30:39.73ID:e1z7sXs7
>>341
未来永劫とか言い出すのはガキ
今から置き換えるメリットがない
せいぜいcの黒魔術マクロを排除できるぐらいだろ

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

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

カーネルは6.6.1でfind -name '*.rs' で引っかけるとmallocとかCのライブラリ関係かな?ほかいろいろ
LLTM=1スイッチで置き換わるようだが。
すぐに全体が置き換わるわけではないだろうけど、コアで脆弱性なところから始まってる感じに思えるね。
0358デフォルトの名無しさん
垢版 |
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%
0359デフォルトの名無しさん
垢版 |
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ヶ月間の事実
0360デフォルトの名無しさん
垢版 |
2023/11/15(水) 11:20:10.48ID:ywV5GNL0
>>357
>すぐに全体が置き換わるわけではないだろうけど、コアで脆弱性なところから始まってる感じに思えるね。
全くそうは思えないのだが?
0361デフォルトの名無しさん
垢版 |
2023/11/15(水) 11:25:52.06ID:7t1hSBTd
このスレの半分は複オジのウソで出来ています。
用法・用量を守って正しくご使用下さい。
0362デフォルトの名無しさん
垢版 |
2023/11/15(水) 11:35:20.23ID:PvDO1mrU
>>360
そういわれると、たしかにコードの置き換えとしては進んでない感じするな
まだ実験検討段階って感じか
0364デフォルトの名無しさん
垢版 |
2023/11/15(水) 12:27:36.50ID:teqcURmf
>>347
「コスト」が最大の理由だろ。
コードをRustに置き換えるだけでも膨大な手間と時間がかかる。

そもそもLinusとかのメンテナがRustを使いこなすのに何年費やすかね。そんな時間があったら現環境で機能強化するわな。
0365デフォルトの名無しさん
垢版 |
2023/11/15(水) 13:00:57.66ID:no7PoE7H
clangでのビルドにも慎重なのにrustで置き換えなんか進むわけない
そもそも書き換える行為に生産性がないのだから
せいぜい新しく書くところで部分的に使っていきましょうとなる
だからドライバでとなる
0366デフォルトの名無しさん
垢版 |
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の言葉を借りて「未来永劫」ないとないと言い切ってやろう
0368デフォルトの名無しさん
垢版 |
2023/11/15(水) 14:11:39.36ID:ywV5GNL0
>>367
ざっと2千500万行だね
0369デフォルトの名無しさん
垢版 |
2023/11/15(水) 14:24:01.47ID:kSRDfKJq
30年の積み重ねを置き換えるのに30年…
とまでは行かなくても5年で大部分書き換え
とかはならんだろう
0370デフォルトの名無しさん
垢版 |
2023/11/15(水) 14:51:21.03ID:6FugGo49
元々Cで造られたプロジェクトを一部だけRustに置き換えなんて面倒なだけでメリット無い
どうせRustでやるんだったら全部描き治しの方が良いに決まってる
Rustで置き換えと言うよりRustで新たにLinux互換プロジェクトが出来上がるだけ
0372デフォルトの名無しさん
垢版 |
2023/11/15(水) 15:12:05.87ID:PvDO1mrU
Andoroidは置き換え比較的進んでるよ、事実だしこれは否定しようがない。

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

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

Androidと関係なくてもGoogle自体がLinuxカーネルを進化させてるメジャープレイヤーでもある
0389デフォルトの名無しさん
垢版 |
2023/11/16(木) 11:05:25.04ID:wNLmB51s
rustサポートって何してるのか気になってコミットログ読んでみたけどこんなもんか
0391デフォルトの名無しさん
垢版 |
2023/11/16(木) 11:20:28.08ID:QXdh7keC
>>376
ほんそれ

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

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

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

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

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

前者の大半はゲームのルールを他者に支配されている立場であり裁量の余地が小さいためマインドセットが保守的
純粋なコストベネフィット以外に低いリスク選好度からくる心理的抵抗が強いためearly adoptersやearly majorityにはなりにくい
複オジがいつも事例であげてるAndroid、Cloudflare、AWSなどが全て後者なのは偶然ではなく構造上の特性から生じる必然
新しい技術というのはゲームのルールを自らコントロールできるこちら側の企業によって牽引される
0410デフォルトの名無しさん
垢版 |
2023/11/16(木) 15:14:00.47ID:IFD1cI+g
つまり何が言いたかったかというと
Linux KernelにおけるRustの採用率というのは
技術採用ライフサイクルの観点で見た場合
late majorityやluggardsのRust採用率の目安だということ
0411デフォルトの名無しさん
垢版 |
2023/11/16(木) 15:14:30.69ID:QXdh7keC
adaptor だと思ってたけど adopter なんか
0415デフォルトの名無しさん
垢版 |
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)新規作成だからであろう
0416デフォルトの名無しさん
垢版 |
2023/11/16(木) 17:13:48.99ID:GrubNHks
C/C++から書き直すにしても設計をそのまま使えないことが多いから
かなり大変なんだよな
とくに参照やポインタだらけで全部ヒープアロケーションしまくってる場合とか
C++でもその辺りポインタを多用せずスマポやスタック割り当てをうまく使って書いてあるソフトは移植しやすい
0417デフォルトの名無しさん
垢版 |
2023/11/16(木) 17:41:46.11ID:cVeFFprT
どの言語からでもいいけどRustに移行するのにプログラム設計もそのまま引き継いだ自動コンバージョン的な移行を想定するほうがおかしいやろ
そんなんありえんよ
0418デフォルトの名無しさん
垢版 |
2023/11/16(木) 17:41:52.36ID:nV/QBQ73
C/C++にRust世代の知見が流入してくることに賭けて、待ってる勢はあるはず 自分はそう
それもあるけど、いまあるRustから前線で知見を得ようという勢もあるはず
0419デフォルトの名無しさん
垢版 |
2023/11/16(木) 17:47:05.98ID:nV/QBQ73
>>417
C/C++もclangがいったん咀嚼してLLVMにしてる
Rustにトランスパイルするのは非現実的とまではいえないはず
うまくいけば、Linuxは一夜にしてpure Rustになる
Rust派の誰かがやるんじゃないかと思ってる
0421デフォルトの名無しさん
垢版 |
2023/11/16(木) 17:55:14.82ID:GrubNHks
全てスタック変数で割り当てる
コピー時に適切なムーブをする
ヒープが必要なところはスマポを使う

これをちゃんとやればC++をrustに置き換えることは可能
しかしこれをやってるC++プロジェクトはない
0423デフォルトの名無しさん
垢版 |
2023/11/16(木) 18:05:24.97ID:nV/QBQ73
ま、雑談だから
ストローマンは愚痴

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

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

その知見が流入してこない原因はスクリプト不要論だろう
0430デフォルトの名無しさん
垢版 |
2023/11/16(木) 23:13:12.09ID:BwM227bO
>>425
Cの安全性を高める目的ならトランスパイラではなく静的コード解析ツール用にアノテーションするほうが遥かに簡単
C++と同じようにCにもそういう動きが出てくる可能性はあると思う

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

イメージ的には↓こういうやつ
浸透するとしても10年以上先だろうね
https://www.youtube.com/watch?v=Pk2RAl8kG1o
0431デフォルトの名無しさん
垢版 |
2023/11/16(木) 23:35:15.35ID:nxuWB9A/
そこで奥さんChat-GPTですよ!
0432デフォルトの名無しさん
垢版 |
2023/11/16(木) 23:43:26.30ID:4If2hIRf
>>430
Cの標準では今後も無い。
委員会がやる気ない。
0433デフォルトの名無しさん
垢版 |
2023/11/17(金) 00:28:52.66ID:XzLpc9VL
Cは他のお笑い言語とは違って俺が最初に手に取ったK&R第二版から変える必要無かったからな
0436デフォルトの名無しさん
垢版 |
2023/11/17(金) 01:27:31.74ID:lIdOKj8F
やる気が暴走したPerlとかC++とかを過大評価するのは暑苦しい
やる気以外のルールはないのか
0437デフォルトの名無しさん
垢版 |
2023/11/17(金) 05:30:59.53ID:30xMjeDv
あー、Perlも好きだわーw
ドザなので、シェルスクリプト代わりに、中途半端な処理は全部お願いしてる
0440デフォルトの名無しさん
垢版 |
2023/11/17(金) 22:09:06.15ID:HoPy7y+y
>>421
>コピー時に適切なムーブをする
これが恣意的すぎて自動的に対応できんわな。
0443デフォルトの名無しさん
垢版 |
2023/11/18(土) 11:21:22.60ID:ZyDTP43o
立場によってはそう
継承に親でも殺されたんかって人なら、そう言うだろう

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

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

実装継承の乱用するやつも悪だと決めつけるやつも中身を理解してないという意味では同類だから
どの言語を使っていようがどちらも採用してはいけない
0452デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:22:47.39ID:GRi2RJZB
>>450
dN/dt = cN
右辺は一次関数とは限らんだろうけども
新たに学ぶ言語を選択するときには
人は多くの人が使っている言語を選択する傾向にある
0453デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:27:30.14ID:63IqxYSZ
>>452
そんなん仕事で開発する人には通用しないよw
開発対象がどのハードのどのOSで動かすかによって決まるからな
0454デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:29:23.25ID:63IqxYSZ
しかし、パラメータの意味も説明も無くいきなり数式出す奴ってなんなの?
0455デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:31:03.67ID:jiGs7deg
>>451
それは理解していなさすぎる
実装継承とはある型(クラス)に対して定義したメソッドが別の型(クラス)に対して引き継がれることを指す
Rustに実装継承はない
0457デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:38:02.55ID:GRi2RJZB
>>453
「仕事で開発する人」ってのは仕事の多さに左右される
新規の言語はまずユーザー数を増やさないと
この先生きのこれない
0458デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:38:26.91ID:63IqxYSZ
多段継承は何だかなぁだけど
単純な基礎クラスに応用クラス乗せるくらいは許して欲しいなぁ
0459デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:39:14.68ID:GRi2RJZB
>>454
Nってのは数
tは時間
cは定数
どれもよく使うから端折ったけども?
0460デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:40:04.55ID:63IqxYSZ
>>457
だからユーザー数なんて増えないんだよw
その言語でしか開発出来ないスマホとかでも作らないとなw
0461デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:41:04.57ID:63IqxYSZ
>>459
dは何よ?
0463デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:45:04.02ID:GRi2RJZB
>>461
>>449
0465デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:49:49.32ID:63IqxYSZ
>>463
ならば進次郎にも分かる説明でないとダメだろ
0466デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:54:44.31ID:GRi2RJZB
>>465
>>446に分かりやすく書いておる
0467デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:55:17.22ID:63IqxYSZ
>>466
だからそれは否定されたろ
0468デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:56:30.92ID:GRi2RJZB
>>467
誰に?
0469デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:56:35.04ID:zRkY2vB2
仕事で使う技術選定の最大要因ってなんだかんだで利用者数の多さ(≒資料の多さ)になりがち
0470デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:57:39.99ID:63IqxYSZ
>>468
俺にw
0471デフォルトの名無しさん
垢版 |
2023/11/18(土) 12:59:42.63ID:GRi2RJZB
>>470
そりゃお前が読めてないだけだよ
>>452の最後の1行も平易に同じことを書いているので読んでね
0473デフォルトの名無しさん
垢版 |
2023/11/18(土) 13:03:35.26ID:63IqxYSZ
C++の資料なんか腐るほどあるが
今やC#かCしか生き残って無いだろw
0474デフォルトの名無しさん
垢版 |
2023/11/18(土) 13:05:11.55ID:63IqxYSZ
Rustなんて使わなきや開発出来ないアプリなんか無いし
使う事は未来永劫無いだろうね
0476デフォルトの名無しさん
垢版 |
2023/11/18(土) 13:09:08.70ID:9pS/cQYo
Rust書けないからって嫉妬してるのはわかるけどそこまで逆恨みすることはないじゃん?
0478デフォルトの名無しさん
垢版 |
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%程度(総本山なのに)
0479デフォルトの名無しさん
垢版 |
2023/11/18(土) 14:46:30.05ID:BPYzRrhj
それ過去に開発された言語が混ざってるよね?
0480デフォルトの名無しさん
垢版 |
2023/11/18(土) 15:41:41.81ID:aHGnQ9F/
もうすでに15%もあるといった考え方は?現状の%を並べても5年どうなるかわからないんだし。
その調べかたからわかるのことは限定的だな。
その割合が年々減っていってるのならRustはだめだろうし。
0481デフォルトの名無しさん
垢版 |
2023/11/18(土) 16:00:47.99ID:Q+v8Z7oO
言語の変更は多くの場合システム改新などコードを書き換えるタイミングで行なわれる
また言語の変更をするか否かに関係なくモノリシックなシステムはシステム改新に不利でその点ではマイクロサービスなど多数で構成されるシステムが有利
OSカーネルやWebブラウザも同様でモノリシックに作られている場合は言語の変更に最も適していない
そのような最も適していない極端な特殊例を持ち出して数え上げることは無意味で無駄な行為
0482デフォルトの名無しさん
垢版 |
2023/11/18(土) 17:15:55.14ID:rXJKESWN
一眼観て微分方程式だと判らないレベルの人は黙っていて欲しい
0483デフォルトの名無しさん
垢版 |
2023/11/18(土) 19:58:38.30ID:HxfHsjDi
それはわかったけど、英語そんな読めない俺、なんも言えず

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

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

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

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

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

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

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

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

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

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

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

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

ちなみにReactの本体では今でも実装継承使ってる
つまらない嘘はいい加減止めようね
0525デフォルトの名無しさん
垢版 |
2023/11/19(日) 19:34:44.92ID:nljhlBVQ
>>524
何で知ったかしてバレないと思うん?
0526デフォルトの名無しさん
垢版 |
2023/11/19(日) 20:05:00.46ID:aXcE9XXk
マイコンレベルに小さなコンパイラを搭載しなければいけないような案件だとRustは重たすぎて無理っぽいが
それ以外のデメリットは無い感じはする。今のところ
FPGAの論理合成のような長いコンパイルプロセスに未来を感じる(感想)
0530デフォルトの名無しさん
垢版 |
2023/11/19(日) 22:14:28.15ID:fSaG2PoW
昔のReactはコンポーネントクラスというJavaScriptのクラスを用いた方法を用いていたけど
それでも継承は使わないでコンポジションを使うようにと公式に書かれていた
今のReactはクラスではなく関数コンポーネントを用いるようになった
0531デフォルトの名無しさん
垢版 |
2023/11/19(日) 22:31:23.82ID:2h4NT+3n
継承はクラスの再利用とクラスの切り替えが同じ継承に集約
されていたのが問題だった
0534デフォルトの名無しさん
垢版 |
2023/11/20(月) 03:25:10.93ID:m3TC6/PX
クラスの切り替えとはキャストのことか
だがダックタイピング界隈には「キャストする」という振る舞いがない
templateなら引数を変えることが切り替えでありキャストは重要ではない
重要ではないものを重要と思ってたなら問題だ
0535デフォルトの名無しさん
垢版 |
2023/11/20(月) 03:52:37.02ID:Uh0cT6mQ
だからさ、独自用語で煙に巻いてないでTaPL読んだうえで共通語彙で話しようぜって
0536デフォルトの名無しさん
垢版 |
2023/11/20(月) 07:37:53.49ID:kv+dmWMk
>>521
親クラスを継承できないクラスはポリモーフィズムできないねぇ。

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

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

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

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

例えばライブラリが返すインスタンスのクラス。普通はクラスを直接弄ることはできないし、final宣言されてたら派生も無理。クラスを直接弄くれるとしても、ライブラリをメンテナンスするとか面倒臭いからやりたくない。
普通はAdoptor作るけど、それなら>492みたいなIF側で自動的にやる機能が欲しい。
0544デフォルトの名無しさん
垢版 |
2023/11/20(月) 12:49:42.01ID:JpnTJcOA
githubの2023年成長率でもRustが40%増でTOPだったな。
でもまだ人気言語TOP10には食い込んでなかったけど。
0546デフォルトの名無しさん
垢版 |
2023/11/20(月) 13:32:31.99ID:NElbrJwW
>>541
1位はpython?
0549デフォルトの名無しさん
垢版 |
2023/11/20(月) 14:04:35.58ID:NElbrJwW
>>547
PHPを書けるより市場価値がないの?
0550デフォルトの名無しさん
垢版 |
2023/11/20(月) 14:38:31.00ID:dEVryb2p
Rustが出せるのは高い信頼性だが、日本で何か作っても、それ信頼できんの?ってなるから
だったりして
0551デフォルトの名無しさん
垢版 |
2023/11/20(月) 14:44:00.93ID:NElbrJwW
>>550
求められている信頼性って「Rustが出せる信頼性」とは違うんだと思うよ
0552デフォルトの名無しさん
垢版 |
2023/11/20(月) 15:09:31.41ID:MS7hPbOQ
日本だけに限らないかも知れないけど
ソフトウェアの利用者ってそもそも
何の言語で造ってるかなんて気にしてないし知ろうともしない
0554デフォルトの名無しさん
垢版 |
2023/11/20(月) 15:41:32.66ID:NElbrJwW
>>553それはRustプログラマの視点
それまでの話は発注者側からの話
0556デフォルトの名無しさん
垢版 |
2023/11/20(月) 15:55:24.47ID:NElbrJwW
鶏と卵の関係になるけどプログラマが確保できなく保守性が悪い
0558デフォルトの名無しさん
垢版 |
2023/11/20(月) 16:18:06.96ID:JXHwx0JF
>>556
プログラムの保守性自体はRustが高くて好ましいため
あとはプログラマーの数は単調増加する一方なので特に問題なし
0559デフォルトの名無しさん
垢版 |
2023/11/20(月) 16:27:04.23ID:NElbrJwW
>>558
プログラマが確保できないってことは
発注者側からすると運用後の保守に
支障を来すリクスがあるってことだよ
0560デフォルトの名無しさん
垢版 |
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
0561デフォルトの名無しさん
垢版 |
2023/11/20(月) 18:15:53.85ID:1QHH6HXV
クローズ開発案件が含められないから意味が無い件
0562デフォルトの名無しさん
垢版 |
2023/11/20(月) 18:32:56.66ID:Tq0YX8uR
>>557
株とかはそうだね
いいものは誰にも教えないで買い占めるはず
商品化し売られているのは悪いものしかない説
0563デフォルトの名無しさん
垢版 |
2023/11/20(月) 20:50:45.51ID:NElbrJwW
>>561
ある程度は相関してるでしょ
0564デフォルトの名無しさん
垢版 |
2023/11/20(月) 21:15:52.04ID:ojqzhkRS
>>562
お前がレスに使ってる端末は悪いものなんだな~。
0565デフォルトの名無しさん
垢版 |
2023/11/20(月) 21:47:51.39ID:Tq0YX8uR
>>564
自然言語で雑談ばっかりして
コーディングとコンパイルと実行をしない原因はこの端末かもしれないな
0566デフォルトの名無しさん
垢版 |
2023/11/20(月) 21:56:32.85ID:Ygoo/zhh
>>533 >>548
嘘つきオジは「知ったかぶりして”Reactは本体含めて継承は使っていない全て関数”などという真っ赤なウソをついてすみませんでした」と言うのが先だろ
0567デフォルトの名無しさん
垢版 |
2023/11/20(月) 21:59:46.43ID:1QHH6HXV
>>563
全くしてないだろ
公開出来るソフトなんて業界の一部でしか無いからなぁ
0569デフォルトの名無しさん
垢版 |
2023/11/20(月) 23:27:57.05ID:/Ubqd6b6
>>530
Reactはクラスコンポーネント時代も
開発元のFacebookが様々なケースで継承を使うとよいケースは存在していないことを確認しているとReact公式に書いていたもんな
もちろん今はクラスコンポーネントすら捨てて関数コンポーネント
0570デフォルトの名無しさん
垢版 |
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となります。
0571デフォルトの名無しさん
垢版 |
2023/11/21(火) 09:29:05.70ID:WJ7yrtvk
React本体のJavaScriptコードで継承が使われてるという事実は嘘つきオジがいたので指摘しただけで重要な事ではない
JavaScriptの継承を理解してる人ならリポジトリ見れば誰でもわかる

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

それはなぜなのか?
0572デフォルトの名無しさん
垢版 |
2023/11/21(火) 09:48:09.93ID:meOGGGPH
>>570
Rustはもう何年もずーっと愛され続けてずーっと増加率もすごく高いのに
誰も使ってないのが不思議w
0573デフォルトの名無しさん
垢版 |
2023/11/21(火) 10:52:34.98ID:TIZNoRj+
増加<率>だからねw
0574デフォルトの名無しさん
垢版 |
2023/11/21(火) 10:53:27.83ID:TIZNoRj+
つまり分子が大きいというより分母が少ない
0575デフォルトの名無しさん
垢版 |
2023/11/21(火) 10:56:46.75ID:fyFN08Ef
ヒント非公開
0579デフォルトの名無しさん
垢版 |
2023/11/21(火) 11:18:07.78ID:Lmp19CDx
>>575
エビデンスを出せという言葉を使えば公開されるという認識なんじゃないか
まるで魔法みたいに
0580デフォルトの名無しさん
垢版 |
2023/11/21(火) 11:27:49.20ID:j31CN6Yb
>>569
とFacebookの犬が申しております
0583デフォルトの名無しさん
垢版 |
2023/11/21(火) 12:27:03.76ID:vP2RupFQ
特定のレスに妙に攻撃的な単発ちょくちょく湧いてくるのってやっぱりアイツ?
0584デフォルトの名無しさん
垢版 |
2023/11/21(火) 12:50:14.72ID:j31CN6Yb
>>583
いや、あいつとは別
0585デフォルトの名無しさん
垢版 |
2023/11/21(火) 12:50:16.11ID:j31CN6Yb
>>583
いや、あいつとは別
0587デフォルトの名無しさん
垢版 |
2023/11/21(火) 13:52:02.24ID:Lmp19CDx
質問する側は基本的に無力で、答える側に生殺与奪の権を握られる
一発逆転するには攻撃力か何かで優位に立たなければ
0590デフォルトの名無しさん
垢版 |
2023/11/21(火) 22:22:25.20ID:3Y9OZVuh
>>577
GTKは実装継承モリモリ
Cで実装継承を実現するためのオブジェクト管理システムをGTK用に作ってある
Reactの話とは関係ないけどね
0592デフォルトの名無しさん
垢版 |
2023/11/21(火) 22:43:10.96ID:Q9pynku3
>>590
そういう返答するだろうなあと思ってたよ
言語機能になくても実装で継承使われてるんだ~
というならどんな言語使っても構わないね
はい終了
0593デフォルトの名無しさん
垢版 |
2023/11/21(火) 23:11:04.07ID:Lmp19CDx
Cはスマポ<T>を作れない
C++でもtemplateを使わない主義ならばスマポのようなものをTが実装継承するかも
0594デフォルトの名無しさん
垢版 |
2023/11/21(火) 23:15:06.85ID:x0TxAGsF
>>592
論点は実装継承は不要なのかどうか
常にコンポジションを使うべきかどうか

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

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

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

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

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

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

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

他のやり方があったとしてもより楽に安全に開発できるようになるなら言語機能としてあった方がいいってことになるよね?
0600デフォルトの名無しさん
垢版 |
2023/11/22(水) 00:33:52.03ID:SCjy6MJ9
>>597
それは仕様変更前のクラス数百個を捨てさせ変更後の数百個で置き換えるには都合が良い
一箇所変更するだけで古いクラス数百個が消滅する
だが古いクラスに依存していた資産が消滅するのは本当にお得なのか?
0602デフォルトの名無しさん
垢版 |
2023/11/22(水) 01:26:34.89ID:uxQX1dJD
>>598
> 他のやり方があったとしてもより楽に安全に開発できるようになるなら言語機能としてあった方がいいってことになるよね?

c++に色々跳ね返ってきそうなお言葉来たな
0603デフォルトの名無しさん
垢版 |
2023/11/22(水) 16:32:36.94ID:Ky8NVDmM
「GCは嫌い。だけどC++は苦手。
 噂だとRustがそれを解決するらしいから」
ということでRust票が入っているだけ。
0605デフォルトの名無しさん
垢版 |
2023/11/22(水) 18:40:30.34ID:I05HGQ1N
結局windows11 10.0.22631.2715 (23H2)にRust製モジュール入らなかったが
0606デフォルトの名無しさん
垢版 |
2023/11/22(水) 19:20:29.71ID:zUxnYc1v
MSの使ってるコンパイラは何だろう?
0608デフォルトの名無しさん
垢版 |
2023/11/22(水) 20:29:20.42ID:ltxaInSK
>>604
信用できないアホコーダーにはバグを入れる自由なんて与えない。
コーティング規約だと防ぎきれないから抜け道の少ないRustにする。

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

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

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

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

それはポインタを部分特殊化しろ、ということでは?
0666デフォルトの名無しさん
垢版 |
2023/11/24(金) 08:38:00.98ID:4SGglGUV
>>663
同意を求めるなよw
お前の用途ではSTLで十分ってだけ
そうじゃない場合もある
STLで足りるならboostもEASTLも存在してない
0667デフォルトの名無しさん
垢版 |
2023/11/24(金) 11:26:41.73ID:qKRvRsRu
>>666
>>652
>テンプレートはコンテナを矛盾なく書くのがめちゃくちゃ難しいのよ
>まず要素の型が実体とポインタ両方に対してうまく動くようにするのは至難の業
これがいったい何のことを言っているのか分からんので
STLで問題を指摘させれば共通の題材として議論できるからSLT取り上げた
0670デフォルトの名無しさん
垢版 |
2023/11/24(金) 14:23:40.25ID:9RAaBgN9
全然伸びてなくて草
こんな過疎スレで敗走したからって嫌儲民おらに力を分けてくれーーってやろうとしたけど
そこでも無視されてる
情けない奴だ
だからゴミクズなんだよ
0674デフォルトの名無しさん
垢版 |
2023/11/24(金) 16:25:00.95ID:tvJVQF3W
いくらめんどくさくても安全のお守りがほしいんすわ
C++製システムがクラッシュしてうなだれたあの日の鬱憤が安全を求めるんすわ
0675デフォルトの名無しさん
垢版 |
2023/11/24(金) 16:34:40.23ID:6OrpRj0R
>>671
何故この手のやからって、
自分は今まで大丈夫だったから他の人(今度の新卒社員とか)も大丈夫に違いないと思えるんだろうか。
いつも一人で仕事してるのかな。
0676デフォルトの名無しさん
垢版 |
2023/11/24(金) 16:45:30.90ID:Oe/LAESW
>>671
その人はRustを知らなすぎるな
C++はインラインアセンブリがある云々もRustにもあるし
算術ラッピング演算の件もRustはラッピングの有無両方が用意されてるのを知らずに書いていたり
0678デフォルトの名無しさん
垢版 |
2023/11/24(金) 16:55:26.04ID:rK2EDUzF
めっちゃ感想来てるw

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

並行性を高める目的ならコルーチン+スレッドプールが最も効率が良い
C++やRustはまだまだ使いにくいけどGoやC#やSwiftのように使いやすいAPIが用意されれば誰もが当たり前のように使うようになる
0721デフォルトの名無しさん
垢版 |
2023/11/27(月) 13:17:02.15ID:y1vsdTcE
>>717
ある程度時間がかかる処理を並行で動かすという面でこれほど楽で使いやすいものはないしね
windowsへの移植性を上げるためにはforkを捨てなきゃならんのはかなり厳しい
0725デフォルトの名無しさん
垢版 |
2023/11/27(月) 14:04:14.09ID:l+s92lQ4
遅くともcygwinとかで、なんちゃってforkは実装されてるけど、コレジャナイ感は付きまとうんだよな(個人の感想です
0726デフォルトの名無しさん
垢版 |
2023/11/27(月) 14:10:54.29ID:O2rw1r7K
execなしのforkなんて時代錯誤もいいところ
いまだに使ってるやついんのか?
さっさと引退するのが世のために
0729デフォルトの名無しさん
垢版 |
2023/11/27(月) 15:12:24.83ID:qB4qrVrI
forkは同じページを(書き換えるまで)共有できるのが売りだと思うけどwin版は最初からコピーするのか
そんな実装でfork爆弾作れるの?
0732デフォルトの名無しさん
垢版 |
2023/11/27(月) 15:50:29.33ID:UqO8a829
スタック領域をスマートポインタで指す必要はあるの?
0733デフォルトの名無しさん
垢版 |
2023/11/27(月) 15:57:04.75ID:l+s92lQ4
先々で、うっかりfreeするような書き方してしまったときにコンパイルエラーで止まってほしい
実体としては生ポだけど、チェック用の何かにラップされてる…そういうスマポ
0734デフォルトの名無しさん
垢版 |
2023/11/27(月) 17:16:07.46ID:FscsMJtl
いつものように誰かが書いてた受け売りで中身は理解してないんだろ
少し突っ込まれたら表面的なことを繰り返す壊れたレコードになる
0736デフォルトの名無しさん
垢版 |
2023/11/27(月) 19:00:17.85ID:UqO8a829
>>733
実装すれば良いのでは?
0738デフォルトの名無しさん
垢版 |
2023/11/27(月) 19:23:48.42ID:VTBvXWTh
Rustはヒープ領域だけでなくスタック領域にまで所有権やムーブや参照の概念を拡張したことから
C++よりスタック領域の活用で効率的になってる話ではないか
0740デフォルトの名無しさん
垢版 |
2023/11/27(月) 19:55:41.13ID:XLFtaca7
>>738
単に「何でもスタックに積む」というだけでは?
ヒープはVec Box使わないと確保できないんじゃなかったっけ。
0741デフォルトの名無しさん
垢版 |
2023/11/27(月) 19:57:13.46ID:ceTrdy2T
C++は書くのがしんどい
Rustもしんどいけど、生成AIに書かせたコードもコンパイルとテスト通ればメモリリークの心配なく使えるので気持ちは楽
0743デフォルトの名無しさん
垢版 |
2023/11/28(火) 06:19:45.83ID:fb4KLmhh
>>734
ほんそれ
同じ香具師なんだろうバレバレ
0745デフォルトの名無しさん
垢版 |
2023/11/28(火) 07:38:03.63ID:OE19BKGq
>>736
自分なりには考えてみてるんだけどね

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

>>741
お前は死んだ方が良い
0748デフォルトの名無しさん
垢版 |
2023/11/28(火) 09:04:02.54ID:uB2ZO1/C
Rustの所有権チェックって、(コンパイル時にコストを寄せてるから)実行時はゼロコストじゃないん

へたくそに書いたら効率が下がる(たいてい実装効率が上がった犠牲)のは、C/C++も同じ
0749デフォルトの名無しさん
垢版 |
2023/11/28(火) 10:10:56.04ID:pC50QOa+
技術的選択というのは最終的には必ずトレードオフになるので
ある選択のプラス面だけしか見ない/考えない/認識できないやつは何やらせてもダメ
0750デフォルトの名無しさん
垢版 |
2023/11/28(火) 12:14:38.37ID:0HFLSmnD
新人やお前らの前任の調子いいだけの奴がコンパイル通したコードで、rustとc++のどっちが安心できるかってことよ。
0751デフォルトの名無しさん
垢版 |
2023/11/28(火) 12:37:00.84ID:zgX3htu8
c++に自動変数専用参照とかあるといいんだけどなぁ。
自動変数にあるスマートポインタは参照渡ししたい。
0753デフォルトの名無しさん
垢版 |
2023/11/28(火) 14:49:32.02ID:tbacT9e+
>>751
イマイチ分からんのだがコードで書ける?
0754デフォルトの名無しさん
垢版 |
2023/11/28(火) 15:14:43.92ID:zjrE05Ar
>>632
と暇人が申しております
0755デフォルトの名無しさん
垢版 |
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); //次のスタックフレームに渡すのも合法
}
0757デフォルトの名無しさん
垢版 |
2023/11/28(火) 20:15:20.15ID:QlCOA+Xa
メモリがスタックにあるかヒープにあるかはリンカのアドレスマップと連携すればわかる
つまり欲しいなら自作すればいいのでは
0758デフォルトの名無しさん
垢版 |
2023/11/28(火) 21:08:43.42ID:zgX3htu8
>>757
え?リンクでこねこにすればshared_ptrのカウンタを増減させなくて済むようになるんかね?

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

>>760
呼び出し元の方にあるスタックフレームに保存されている自動変数は、スタックフレームのLIFOを破壊しない限り存在を保証できる。そういう自動変数を呼び出し先から安全に参照したいだけだよ。
0765デフォルトの名無しさん
垢版 |
2023/11/28(火) 23:43:48.38ID:QlCOA+Xa
無知ばっかりでここまで話が通じないと思わなんだ
スタックやヒープの開始アドレスがどこから始まるとか気にしたことないの?
rustの悪いとこ透けて見えたわ
0766デフォルトの名無しさん
垢版 |
2023/11/28(火) 23:55:41.04ID:xnaKz8pj
Rustならそんな複雑なことする必要もなく
Rustの方が優れている
ライフタイムさえ満たせば参照先がヒープかスタックか関係なく同一コードでその参照を安全に返す関数などを書くことができる
0768デフォルトの名無しさん
垢版 |
2023/11/29(水) 01:18:06.77ID:w45cg+MW
>>765
>>751
>>755 と話繋がってないけど。
スタックやヒープの始まりは >>755 のコードでも >>751 の要件でもわからんやん。
0770デフォルトの名無しさん
垢版 |
2023/11/29(水) 03:16:09.69ID:0jw/VZcC
いまいちメリットがわからない
ヒープのオブジェクトなら渡す前に呼び出し側でチェックすべきなのではないのか
0775デフォルトの名無しさん
垢版 |
2023/11/29(水) 07:33:14.16ID:Oshr4ESo
関数の定義で、shared ptr の参照を安全に受け付ける仮引数の定義方法とかあるの?
効率化のためにインスタンスのコピーは無しの方向で。
0776デフォルトの名無しさん
垢版 |
2023/11/29(水) 08:59:38.65ID:w45cg+MW
>>773
スタックの頭知りたかったらコマンドライン引数のアドレス取れば?ヒープの頭知りたかったら最初にsbrk(0)すれば?
0779デフォルトの名無しさん
垢版 |
2023/11/29(水) 09:29:15.22ID:w45cg+MW
>>776
これだと実行時だわ、コンパイル時にはわからんわスマン。
ってか何でコンパイル時にスタックやヒープの先頭アドレス知りたいのかわからん。
リンクしないでなんてわかりようも無いし。
0780デフォルトの名無しさん
垢版 |
2023/11/29(水) 10:51:01.40ID:I6OxsG4L
rustはヒープとスタックを言語的に区別してライフタイムをトラックしてるだろ
それが欲しいならrust使えで終わり
c++では汎用的には無理
そういう要望は昔からある
0782デフォルトの名無しさん
垢版 |
2023/11/29(水) 11:26:21.99ID:JCtBk62y
そもそもスタックに参照カウンタ必要か?
関数に対するスタックはプロセスに対するグローバル領域とライフタイムの考え方は同じ。
関数を抜けるまではスタックは有効だし、その関数以降に呼んだ関数が呼出元の関数を抜けた後も握り続ける状況は発生しえない
(別スレッドに共有したりヒープにCopy/Moveしない限りは)からshared_ptrにする必要がないと思うが。
つまり、

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

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

>>780
参照になった時点でヒープかスタックかの区別なくライフタイムのみで安全に扱えるところがRustの勝因かな
スタック領域を指す参照についても関数から返してよい参照と返してはいけない参照の区別がライフタイムでなされる
0785デフォルトの名無しさん
垢版 |
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); //次のスタックフレームに渡すのも合法
}
0786デフォルトの名無しさん
垢版 |
2023/11/29(水) 13:05:45.44ID:I6OxsG4L
>>785
shared_ptr<T>を使うから意味が不明なんだよ
Tが置かれる場所がスタックかヒープかなんだろ?
0789デフォルトの名無しさん
垢版 |
2023/11/29(水) 13:37:19.41ID:qKmTtpoR
>>773
スタックとヒープの違いが分かってなくても使えるなんて、なんて素晴らしい言語なんだ
0790デフォルトの名無しさん
垢版 |
2023/11/29(水) 13:52:43.41ID:pBsavzeJ
もういいよ
議論するレベルになってない
引っ掻き回したいだけだろ
この話題終わり
ゴミだから
0791デフォルトの名無しさん
垢版 |
2023/11/29(水) 14:48:01.22ID:wOoUvEHR
>>786
違う。
「shared ptr」の置かれている場所がスタックかヒープか。この場合だとTはヒープ。
>>785はとりあえず「shared ptrが」自動変数にある場合だけエラーにならないのを想定。
0793デフォルトの名無しさん
垢版 |
2023/11/29(水) 15:22:50.48ID:I6OxsG4L
>>791
shared_ptrの参照カウントの操作を省きたいならshared_ptrの参照渡すか生ポインタ渡せばいいだろ
それかrustにしろ
0794デフォルトの名無しさん
垢版 |
2023/11/29(水) 15:29:56.33ID:0GsI2ATG
「lvalueよりさらに限定された値カテゴリを作って、それだけを指せる参照を導入したい」という欲求

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

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

ただポイント先が途中で変化しても安全と言えるかどうか微妙
Arc/Rcはownerが複数いる場合はポイント先が変更されないことも保証されてる
0801デフォルトの名無しさん
垢版 |
2023/11/30(木) 12:27:38.75ID:MXha9GzH
ライフタイムチェックが今のRustと同じレベルになるのは早くてもC++32以降なので過度に期待せず気長にお待ち下さい。
0804デフォルトの名無しさん
垢版 |
2023/11/30(木) 14:51:08.28ID:JOtYuMwa
的はずれなことを書いてる自覚がないとはな
複オジ(>>784)のほうが多少自覚してるだけマシかもしれんぞ
0805デフォルトの名無しさん
垢版 |
2023/11/30(木) 15:21:08.01ID:D7FKv4Y4
>>800
自作でやるならかなり大変で、自作言語作るのと工数変わらないかも。
それならRust使ったほうが楽かね。
0809デフォルトの名無しさん
垢版 |
2023/12/02(土) 21:13:09.29ID:Lt6EdYBh
Javaからプログラム始めたからC++の静的ポリモーフィズムやるconceptの制約がわかりにくすぎて使いこなせん
C++20のconceptを使いこなせてる猛者さん、果たしてスレにおるのかね
0810デフォルトの名無しさん
垢版 |
2023/12/02(土) 21:29:52.21ID:ojltmATj
C++で継承をやろうとするのが間違いなんだよね😇
テンプレートはゴミ!
ゴミなんです!
0812デフォルトの名無しさん
垢版 |
2023/12/03(日) 11:30:00.35ID:QTewqrs7



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

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

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

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

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

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

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

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

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

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

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

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

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

その話とは別にshared_ptrやRc/Arcは参照カウンタによるコストがかかる
そのため複数所有者を使わざるを得ない場合に限定して用いる
0903デフォルトの名無しさん
垢版 |
2023/12/05(火) 18:13:07.15ID:Ppu4uIXE
>>902
Weak Reference等を使って循環参照を手動で避ける方法が用意されてるかどうかは手動メモリ管理かどうかとは全く関係ないよ
0907デフォルトの名無しさん
垢版 |
2023/12/05(火) 19:18:25.05ID:800y2Su3
積極的にC++を使いたがる人ってC++のどこに魅力を感じているんだ
0909デフォルトの名無しさん
垢版 |
2023/12/05(火) 19:32:43.32ID:4rw/VL0P
>>897
問題はGC言語は *常に* GC機能ありなところ。
0911デフォルトの名無しさん
垢版 |
2023/12/05(火) 20:04:51.38ID:3vhS3QGH
リファレンスカウンター気にするくらい速度を求めるなら、RAIIすら嫌だとはならんのかな
mallocはプログラムの最初に一回呼ぶ以外は許されない
0912デフォルトの名無しさん
垢版 |
2023/12/05(火) 20:31:30.51ID:GM9Glwep
>>907
組み込み系でオブジェクトやりたい人
あと意図的に悪意あるコードを仕込む人とか。
0913デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:15:38.20ID:HiCWBikd
やりたいことが出来るのが一番の理由
アンリミテッドが魅力
0914デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:36:14.43ID:9fH1d+k3
参照カウントて結構コストあったよな……と探したら解説見つけた。
yamasa.hatenablog.jp/entry/2021/01/29/012525

昔は並列処理と相性悪いと言われていたけど、今はどうかね?
0916デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:43:08.45ID:tZxAn7Rl
>>909
GC言語でもunsafeで手動管理とかできるよ
Rustと同じで基本がsafeだからC++をsafeにしていくよりもずっと簡単で問題が起きにくいアプローチ
0917デフォルトの名無しさん
垢版 |
2023/12/05(火) 21:59:57.96ID:puqODfvy
>>902
>そのため複数所有者を使わざるを得ない場合に限定して用いる
複数所有者を使わざるを得ない状況かどうかを確実に見分けるのはそれなりに難しい
Rustの場合はコンパイル通らないから無駄にRc/Arcを違うことはあっても逆はないので安全
C++は逆もある
>>853が「めちゃくちゃ安全になる」と言ってる理由もその辺にあるのでは
0918デフォルトの名無しさん
垢版 |
2023/12/05(火) 22:10:46.45ID:vNAfxFS3
>>911
RAII自体はコストゼロ
RAIIで解放されるスタック上の値の型にデストラクタがある時にその実行コストがかかる
そしてヒープ領域を所有していればヒープ解放コストがかかる
何度もヒープ確保解放を繰り返すよりはなるべく最初に確保するのはもちろん正しい
スタック領域で済ませられるならさらに望ましい
0921デフォルトの名無しさん
垢版 |
2023/12/06(水) 01:23:15.09ID:N0N71GtG
たとえクソレガシーだったとしても書き込むアドレスの範囲が想定してるものかのチェックは入れるべきだろう
どうせオフセットも手計算だろうし
0922デフォルトの名無しさん
垢版 |
2023/12/06(水) 01:40:45.31ID:MT5mgeUa
>>916
>>909
>GC言語でもunsafeで手動管理とかできるよ

どの言語?具体名あげてくれ。
0925デフォルトの名無しさん
垢版 |
2023/12/06(水) 09:17:14.31ID:oM0gjrfW
>>867
>あらゆる本で紹介されてない

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

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

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

いやいや Rust 以前から Rust 無関係に C++ で普通に C++ っぽく描いた結果でしょ
きみ承認欲求強過ぎるね
0931デフォルトの名無しさん
垢版 |
2023/12/06(水) 12:31:44.18ID:3kI3ay52
型推論の是非を問いたい
書くのは楽かもしれないが読みにくくね?
型の重複記述は省きたいがまったく型がわからなくなると理解が難しくなる
読みやすさを優先すべきだと思うがどうだろう
IDEやエディタのサポートでカバーされるという考え方もあるが、カーソル合わせないとわからないしな
0932デフォルトの名無しさん
垢版 |
2023/12/06(水) 12:44:38.03ID:lEEu+DT0
>>931
ややこしい型の手書きとか効率悪化の元だから駄目。

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

型変わったらコンパイル通らないし、型明示がバグの温床になるってのは無い。
修正の手間が増えるってのはわかる。
0935デフォルトの名無しさん
垢版 |
2023/12/06(水) 12:54:09.75ID:B4jpx9xe
複雑な型名を知る必要がない場合も多い
例えばRustなら関数の引数型も返り型でも具体的な型名を書かずに
impl Trait名 と使う機能のトレイト名だけを指定したり
0937デフォルトの名無しさん
垢版 |
2023/12/06(水) 13:09:40.96ID:6EzLMFr7
同じ情報を二重に書くのはプログラマなら普通疑問に思う
0942デフォルトの名無しさん
垢版 |
2023/12/06(水) 13:38:13.20ID:+XLnMsko
どれだけスレが進行しても客観的な基準が示されず
主観バトルを発生させ続け
留まるところを知らない概念

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

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

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

最初に型名が正しいと確認されたら型推論に任せるべきです
0951デフォルトの名無しさん
垢版 |
2023/12/06(水) 14:41:23.05ID:oM0gjrfW
>>945
>保守できなくなるから必ず避けるべき

保守する気がなくなるから必ず避けるべき
ならわかる
0953デフォルトの名無しさん
垢版 |
2023/12/06(水) 14:52:19.97ID:3kI3ay52
>>949
> 最初に型名が正しいと確認されたら型推論に任せるべきです

その最初の確認ってどうすんのさ?
まったく字面では現れない場合があるよね
もともとはその場合の話
0957デフォルトの名無しさん
垢版 |
2023/12/06(水) 15:22:00.69ID:aoO2XCof
全銀のやつは記事に書いてることはわかるがめちゃくそ疑問だらけ

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

一般企業でもなかなかお目にかかれないひどい内容だがそれを金融系のしかも全銀がやっちゃうってのが信じられないわ
0958デフォルトの名無しさん
垢版 |
2023/12/06(水) 15:26:41.21ID:MT5mgeUa
>>944
同感
0959デフォルトの名無しさん
垢版 |
2023/12/06(水) 15:33:52.57ID:MT5mgeUa
型推論よりインテリセンスとか補完がうざい。
こっちの入力リズムに合わないとイラっと来ることある。
0960デフォルトの名無しさん
垢版 |
2023/12/06(水) 16:16:19.10ID:oM0gjrfW
>>957
同感
0962デフォルトの名無しさん
垢版 |
2023/12/06(水) 18:22:40.40ID:SQhb0To1
Pimplが説明してるある本がないか立ち読みしたのだがあった
最近出たC++ソフトウェア設計という本にモロに書いてあった
こんな本いつの間に出てたんだ?
モロに俺がドヤ顔したパターンじゃねえか...
この本内容もめちゃくちゃ良いぞ
0964デフォルトの名無しさん
垢版 |
2023/12/06(水) 18:37:31.41ID:+XLnMsko
ヘッダファイルの変更のせいで再コンパイルされるC++特有の問題に対処するのが主目的のpimplがなんでGoFにあると思ったんですか?
0965デフォルトの名無しさん
垢版 |
2023/12/06(水) 18:54:10.35ID:MT5mgeUa
>>962
pimpl、10年前の本「C++のためのAPIデザイン」(2012年)にも載ってるぞ。
0966デフォルトの名無しさん
垢版 |
2023/12/06(水) 18:55:40.21ID:SQhb0To1
まあPimplの主張はコンパイルサイズを固定するとか
内部を隠蔽することが主目的っぽいね
この本ではImplにunique_ptrを使ってコピー時にmoveする実装になってる
0970デフォルトの名無しさん
垢版 |
2023/12/06(水) 19:26:54.33ID:lBgUAnRO
確かに不毛過ぎる気はする
本質的じゃない部分ですげー頭使わなきゃならんし
面白い部分でもない
素直にrust使うべきだわ
0971デフォルトの名無しさん
垢版 |
2023/12/06(水) 19:48:07.27ID:Pw3WwC1e
銀行はやったこと無いけどSIerの下請けで
お役所のシステム移行の
仕事したときにライブラリ一つに数万個のテストケースが
用意されてあらゆる仕様適合をチェックしていたので
実装でアホなことしててもテストで叩き落とせばよいという
思想なのかも
0973デフォルトの名無しさん
垢版 |
2023/12/06(水) 20:16:14.69ID:3kI3ay52
ヘッダーに実装書きまくるのが今のクソc++だからpimplにしたところでというのはある
0974デフォルトの名無しさん
垢版 |
2023/12/06(水) 20:37:00.46ID:MnzvwPfi
実装を書かざるを得なくなってヘッダーと呼ぶのが不適切になったから.hの拡張子がなくなった
0979デフォルトの名無しさん
垢版 |
2023/12/07(木) 00:06:56.11ID:3PWWuEZS
デザインパターンとは構造について述べたもの
pimplはBridgeパターンの一適用例
別のものではない
0980デフォルトの名無しさん
垢版 |
2023/12/07(木) 00:37:25.72ID:mM7hpDu4
>>979
>デザインパターンとは構造について述べたもの
全然違うよ
GoFにもそういう考えを明確に否定する内容が書いてある
0981デフォルトの名無しさん
垢版 |
2023/12/07(木) 00:41:10.07ID:katRzGi9
C++オブジェクト設計という本にはbridgeパターンの一種で継承や多態性が必要がない場合の単純な例としてPimplの説明があった
0982デフォルトの名無しさん
垢版 |
2023/12/07(木) 00:52:49.01ID:3PWWuEZS
>>980
議論をしたければ
GoFに書いてあるそういう考えを明確に否定する内容
を述べ給え
0983デフォルトの名無しさん
垢版 |
2023/12/07(木) 00:55:08.82ID:3PWWuEZS
>>981
一見して分かりそうなもんだけどね
0984デフォルトの名無しさん
垢版 |
2023/12/07(木) 01:04:03.35ID:Avn/NPEq
C++の不完全型とJavaのインターフェースが同じに見える人には同じに見えるんだろう
0985デフォルトの名無しさん
垢版 |
2023/12/07(木) 02:06:38.63ID:Sudvf4UZ
>>980
そんなこと書いてねーぞ
0990デフォルトの名無しさん
垢版 |
2023/12/08(金) 09:55:56.32ID:k3Bpg+TD
踏んどくか
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を超えています。これ以上書き込みはできません。

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