C++相談室 part165

レス数が900を超えています。1000を超えると表示できなくなるよ。
2023/10/31(火) 07:37:38.52ID:+ZyYyqMO0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること

次スレは>>980が立てること
無理なら細かく安価指定

※前スレ
C++相談室 part164
https://mevius.5ch.net/test/read.cgi/tech/1683600652/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2025/04/06(日) 10:21:41.86ID:gleSakN+0
リスコフの置換原則を破るからあんまり良くはないと思うけどな
基底クラスとして振る舞わせる気がないならprivate継承すべきだ
2025/04/06(日) 10:25:35.73ID:xzDebXnC0
>>821
なるほど……
virtualが省略可能なのが諸悪の根源かとオモタがそっちか……

>>823
通常はBaseクラス→派生クラス、の順で設計するから「そういうインターフェイス」と考えてだいたい良いのかもしれませんけども
派生クラスまで設計した後にBaseクラスにメソッドを追加して、それがたまたま派生クラス独自に定義したprivateメソッドと
同じシグネチャになってしまった場合、Baseクラス経由で派生クラスのprivateメソッドを意図せず呼べてしまうという
現象が再燃する……
2025/04/06(日) 10:32:27.61ID:xzDebXnC0
んまーBaseクラスにメソッドを追加しようとする時点で変更の影響範囲を派生クラスまで広げて調査すべき
というのは正論やがコンパイラで検出可能な不都合のチェックのを人にやらせるのはイマイチ……
2025/04/06(日) 11:31:20.83ID:xouJqKec0
大抵のコンパイラで普通警告出るやろ?
2025/04/06(日) 11:41:46.34ID:Qy9uUb820
純粋仮装関数でも無ければ影響無いだろ
だいいち使わない関数なら配慮する必要も無い
2025/04/06(日) 11:42:28.71ID:Qy9uUb820
全コンパイルは掛かるけどなw
2025/04/06(日) 11:43:04.77ID:CSMreA7R0
たとえば GCC なら -Wsuggest-override を付けておけば override 指定子なしでオーバーライドしているときを警告する。
https://wandbox.org/permlink/h6PGzqrDAAkAVeJO

だけどこのオプションは -Wall にも -Wextra にも含まれてないから個別に指定しなきゃならなくて、普段は有効になってないのが普通かも。
831デフォルトの名無しさん (JP 0Hd1-yI6P)
垢版 |
2025/04/06(日) 11:54:04.73ID:4eCwmFCZH
前から思ってたけど -Wall と銘打ってるのに All じゃないとはこれいかに
832デフォルトの名無しさん (JP 0Hd1-yI6P)
垢版 |
2025/04/06(日) 11:54:05.20ID:4eCwmFCZH
前から思ってたけど -Wall と銘打ってるのに All じゃないとはこれいかに
833デフォルトの名無しさん (JP 0Hd1-yI6P)
垢版 |
2025/04/06(日) 11:54:58.77ID:4eCwmFCZH
(二重投稿スマン)
2025/04/06(日) 12:20:48.70ID:JUJG8trR0
コンストラクタ呼び出しで()の時にinitializer_listを呼んでしまったときの警告と
逆に{}の時にinitializer_list以外を呼んでしまったときの警告がほしい
2025/04/06(日) 12:33:44.13ID:KBEItHDk0
override指定子って初めて知ったけども-Wallで警告出るのは俺はやだな
警告が大量に出るソースばかりと思うし
警告出すほどにoverride指定子を付けるべきなのかちょっと疑問
2025/04/06(日) 13:09:33.59ID:Qy9uUb820
overrideなんて飾りです
privateも飾りです
837デフォルトの名無しさん (ワッチョイ a574-CpEl)
垢版 |
2025/04/06(日) 15:06:13.11ID:BtyKUyO50
#define class struct
#define private public
#define protected public
すれば大体はすり抜けられる
2025/04/06(日) 16:50:10.05ID:CSMreA7R0
>>837
`private` などは用途が限定的なキーワードだからそういうことも出来るけど `class` はちょっと問題があるな。

template<class T> class foo {};

みたいなのが破綻する。
2025/04/07(月) 12:25:07.84ID:yN1PvO54p
classとstructは別ものだからなぁ
2025/04/07(月) 12:42:21.06ID:ioyUXCRU0
C++ の言語仕様的分類では構造体というものはないのだが、 C との関係の都合で微妙な形で struct キーワードは残されてしまった。
これも歴史的経緯による変なところ。
2025/04/07(月) 14:49:45.64ID:KdsoKBW+0
むしろキーワードとしてのclassがいらなかった
型は全部struct、構文の曖昧さを除くためのプレースホルダは全部typenameで良かった
2025/04/07(月) 15:01:27.29ID:w0rhHNCza
protectedは使った方が良いけどprivateは使いたくなるシーンがほとんど無い
2025/04/07(月) 15:02:24.36ID:w0rhHNCza
>>841
Rust使え
2025/04/08(火) 02:19:24.63ID:o1kEMolW0
rustだってどうせ20年もすれば後からあーすればよかったこーすればよかった言ってるよ
2025/04/08(火) 07:45:44.78ID:veBTnWpR0
Rust はエディションごとに互換性が維持され、逆に言えばエディションをまたぐと互換性を損なっても良いというルール。
そして異なるエディションがひとつのプロジェクトに混在できる。
古いエディションから新しいエディションへの移行はかなり自動化されている。
最初から互換性を捨てることがありうる体制なので歴史的事情をいつまでも引きずることはない……と思うのだがこの体制でうまくいくかはやってみないとわからんね。
二十年くらいすれば結果が見えてくるだろう。
2025/04/08(火) 09:56:44.28ID:HZL/zZFGp
開発ツールごと遺跡になって発掘される毎に解析されるんだよ
2025/04/08(火) 19:53:49.89ID:S61wTbWN0
似たような仕組みは歴史上何度も再発明されて全て爆死してるし
今の所うまく行ってるように見えてるのは、まだ大して使われてない証拠でしかないっておじさんは思っちゃうよ
2025/04/10(木) 00:16:06.10ID:nvkavsn60
現在公開されている世界最速grepツールであるripgrepがRustで組んであるってのがすごい
2025/04/10(木) 17:46:33.43ID:SlMXr4vG0
>>848
C や C++ でやってやれないことはないと思うが使えるプログラムがあるのにフルスクラッチで書きなおそうと思うことがそもそもあまり無いからね。
新しい言語が登場するという形で整理する機会が生じるのは健全な進歩だと思う。
2025/04/11(金) 08:30:12.43ID:9LNHX+AUM
rustで一部の高速なシステムコールが追加されたらそれを使えばC++だろうが何だろうが関係なくなる
でもどうせマルチスレッドのsimd使いなんだろうからシステム全体に過負荷になるからめんどくさい
2025/04/11(金) 08:37:04.65ID:5PthuDCs0
↑何これ?w
2025/04/11(金) 13:45:57.41ID:8HYvuWNF0
>システムコールが追加されたら
??
2025/04/11(金) 13:57:42.36ID:gEQ2gSNrM
DOS「ファンクションコールと呼べ!」
2025/04/11(金) 14:31:46.86ID:2mKx2F8Up
それってOS付属のランタイムをrustで書いたらって事?
2025/04/11(金) 18:09:26.07ID:8HYvuWNF0
glibcのシステムコールラッパーみたいなものがRustにもあればってことなのかそれともsyscall命令で飛ぶカーネルのコードがRustで書かれてればってことなのか
分からんね

>>850は最近システムコールって言葉を知ったのかもしれない
2025/04/11(金) 18:48:50.71ID:qqgfnt32M
なんか頭悪そうな人間がたくさん噛みついてきてるけど生産性ゼロだなとしか…
何が言いたいんだよ

お前らが単純にシステムコールを知らなかっただけだろう?
OSに対してサービスの要求するのがシステムコールだ
OSよって呼び方が違う
2025/04/11(金) 19:57:08.33ID:5PthuDCs0
↑何を馬鹿にされてるかもわかってない
2025/04/11(金) 20:02:48.75ID:S6J8cW8H0
イマドキgrepぐらいAPIで用意しとけと
2025/04/11(金) 20:07:19.88ID:Yq7fRKgz0
Rustって今こんなレベル低い人間も流れ込んでるのか
そのうちJava化する運命だな
2025/04/11(金) 20:07:35.60ID:9wDK2WuU0
>>856
そのシステムコールを提供するのはOS側であって「rustで一部の高速なシステムコールが追加されたら」ってのが意味不明だって話だぜ?
2025/04/11(金) 20:08:42.81ID:qqgfnt32M
>>857
理解不足なのはそっち
2025/04/11(金) 20:09:54.47ID:qqgfnt32M
>>860
当たり前だろ
馬鹿なのか?
2025/04/11(金) 20:14:09.35ID:qqgfnt32M
システムコールはOSが提供するのは当たり前
それがRustの特性に合わせた高速化が行われていても使う側はなんでもよいと言う話がなんでわからないのか馬鹿なのかなと
2025/04/11(金) 20:15:15.52ID:9wDK2WuU0
>>862
「rustで一部の高速なシステムコールが追加されたら」について説明を
2025/04/11(金) 20:15:47.00ID:qqgfnt32M
>>864
幼稚園児なのかな?
2025/04/11(金) 20:18:14.21ID:qqgfnt32M
お前らrust "に" 一部の高速なシステムコールが~ と書いてあると勘違いしたんだろ
馬鹿すぎる

システムコールが追加されるのはOSだろ
馬鹿馬鹿しい
2025/04/11(金) 20:19:44.78ID:9wDK2WuU0
つまり>>848で書かれているツールの高速性は「Rustの言語仕様や機能に依存した話ではなくOS提供のシステムコールによるものだ」と言いたいのか
ふぅ〜ん
2025/04/11(金) 20:20:27.06ID:qqgfnt32M
>>867
幼稚園児並みの馬鹿発見
2025/04/11(金) 20:23:13.43ID:qqgfnt32M
馬鹿発見

851 名前:デフォルトの名無しさん (ワッチョイ 4694-PSZj)[sage] 投稿日:2025/04/11(金) 08:37:04.65 ID:5PthuDCs0 [1/2]
↑何これ?w
2025/04/11(金) 20:28:30.50ID:G/OJx5+6M
連投おつかれ
知ったかぶりは恥ずかしいよね
2025/04/11(金) 20:29:30.23ID:qqgfnt32M
サブ回線使いだすほうが恥ずかしい
2025/04/11(金) 20:34:48.29ID:Yq7fRKgz0
なんだよRust界隈のお客さんじゃなくていつもの大天才様くんかよ
おもんな
2025/04/11(金) 20:47:02.26ID:qqgfnt32M
誰と勘違いしてるんだよ
普段はこのスレに書いてない
>>46が自分だ
2025/04/11(金) 20:52:01.51ID:edOe0r2X0
ああ,自分の誤った主張を説明しようとするとボロが見えるから自分に反論してくる人にレッテル貼って誤魔化してるのか
2025/04/11(金) 20:55:02.66ID:qqgfnt32M
それはどっちだよw
2025/04/11(金) 21:01:06.49ID:yx7ZxPSb0
>>850
何を言っているのか全然わからん。
Rust開発者の主張は
「C/C++並に速くC/C++より安全」
だから、
「rustで一部の高速なシステムコールが追加されたらそれを使えばC++だろうが何だろうが関係なくなる」
というのが高速の話ならそりゃそうだろとしか。
Rustが違うと言っているのはそこじゃなくて、
「ビルド通ればダングリングポインタとかオーバーフローとか無いから安全だよ(safe rust なら)」
ということかと。
2025/04/11(金) 21:03:21.88ID:9wDK2WuU0
すぐさまサブ回線使いだすとか言う辺り、自分でもサブ回線使ってそうだよね
「rustで一部の高速なシステムコールが追加されたら」についての説明が出来ない時点でね
2025/04/11(金) 22:20:53.69ID:qqgfnt32M
>>877
すぐ上のジジイは理解できてると言うのに…
2025/04/11(金) 22:23:05.46ID:9wDK2WuU0
何を言われているのかも分かってないようだw
2025/04/11(金) 22:24:47.66ID:qqgfnt32M
いやいやw
未だに
> 「rustで一部の高速なシステムコールが追加されたら」についての説明が出来ない時点でね
と言ってる時点で認知症だろ
2025/04/11(金) 22:29:25.47ID:qqgfnt32M
ChatGPTにさっきのメッセージ食わせてみた

回答
たしかに、Rustで高速なシステムコールが追加されて、それを直接叩けるようになれば、言語による違いはある程度意味を失いますよね。
C++でもRustでも、結局はそのシステムコールにアクセスできるかどうかでパフォーマンスの上限が決まる。


ただおっしゃる通り、高速化しようとしてマルチスレッド+SIMDをガチで使い始めると、リソースの使い方が雑になりがちで、
他プロセスにまで影響出たりするのが悩ましいところ。
特に、CPUキャッシュやメモリ帯域を食い尽くすと、システム全体が重くなって「なんかPC遅い…」ってなるやつですね。
2025/04/11(金) 22:34:55.84ID:5PthuDCs0
恥の上塗りw
2025/04/11(金) 22:41:15.01ID:qqgfnt32M
これぐらいの意味が取れないってどういうことなんだお前らは?
884デフォルトの名無しさん (ワッチョイ 4dd9-GhsC)
垢版 |
2025/04/11(金) 22:44:03.19ID:Lf3Jev+n0
cmakeでbuildするC++プロジェクトのバイナリを配布したいんだが
この場合生成されたbinディレクトリを抜き出せばいいんでしょうか?
こういうことは初めてでよくわかりません
2025/04/11(金) 22:47:45.89ID:5PthuDCs0
ChatGPTを使うにも知識と知恵がいるんだよ
バカは質問の仕方が下手
---
「Rustでシステムコールを追加する」という表現は 文脈によっては誤解を招きやすく、通常の意味では少し不適切 です

1. Rustで書かれたOSの中に、新たなシステムコールを実装する
→ 例:Rust製OS(例:Redox OSなど)にsyscallを加える。
→ この場合は正しい文脈。

2. Rustでカーネルモジュールを書いてシステムコールを追加する
→ 実現可能だがLinuxでは一般的ではなく、安全性に注意が必要。

3. RustでOSとやりとりするAPIを自作して、それを便宜的に「システムコール」と呼んだ
→ 厳密には誤用。OSレベルの syscall とは異なる。
2025/04/11(金) 22:54:08.95ID:qqgfnt32M
>>885
自分では意味が取れなかったんだろ?ただの馬鹿自慢だろ?
2025/04/11(金) 22:56:17.51ID:5PthuDCs0
ほんとこいつ頭悪いw
どうバカにされたかも理解できない
2025/04/11(金) 22:57:06.69ID:qqgfnt32M
>>887
それは自分だろw
そこに書いてある内容の真偽すら判定できないんだろw
889デフォルトの名無しさん (JP 0H66-GhsC)
垢版 |
2025/04/11(金) 23:09:03.39ID:FTY9KFp+H
cpack使えばいいのか
自己解決
2025/04/12(土) 01:43:37.04ID:wegzxSOP0
>>886
馬鹿な私に教えてください >>885 の1~3のどの意味だったんですか?
2025/04/12(土) 02:47:01.21ID:8WRtHLwQ0
ミネオ大先生! 随分とカジュアルな言葉遣いになられたんですね
2025/04/12(土) 06:55:20.32ID:9PpTsBpz0
>>850>>876で反論してやったんだからちゃんと反応しろよ。

「自分850はRustのことをよく知らないのに引き合いに出した間抜けでした」
というだけの話なのに、いつまでうんこみたいなレス重ねるんだよ。
2025/04/12(土) 08:18:10.89ID:O9vZbYm90
天才様くんは次に「俺様の天才的レスが理解できない白痴ばかりだな」と言い出す
相手するだけ無駄
2025/04/12(土) 08:50:38.72ID:7ueEveVip
つまり、OSをrustで書き換えたらって話かなぁ?
2025/04/12(土) 09:06:55.53ID:KALSJULX0
それ、なんか嫌じゃね?w
2025/04/12(土) 09:17:59.45ID:C5glPX3o0
こっちこい

結局C++とRustってどっちが良いの? 9traits
https://mevius.5ch.net/test/read.cgi/tech/1701997063/

こっちもみてるから、このスレが伸びたのかとおもうたわw
2025/04/12(土) 09:34:56.96ID:VGLNjbvdM
24H2の売りはrustで書き換えたってとこだろ
グダグダだけど
2025/04/12(土) 09:39:06.01ID:KALSJULX0
バカ矯正用言語だからな
899デフォルトの名無しさん (ワッチョイ ae21-xzp7)
垢版 |
2025/04/12(土) 12:41:18.56ID:tVJvX2Kc0
Rustは生メモリを扱えなくしてスマートポインタしか使えないので安全だって聞いたけど
2025/04/12(土) 15:12:38.91ID:50hOhfEU0
単純化すると「高速なAPIを呼ぶようにすればどんな言語でも高速になる」ってことだろ?
そりゃそうだろとしか思えんよな
話の肝は、「その言語で高速に組んだこと」だと思うのに

あれだろ、一番速い車の話しているときに「どんな車でも速い車に載せれば早くなれる」って言っているようなものだよな
知らんけど
2025/04/12(土) 15:25:35.11ID:X5lME/jLp
ハンドラを高速にしたって秒間何千回とか頻繁に呼んでるのでも無きゃ全体の処理速度は体感出来ないだろうに
2025/04/12(土) 16:44:12.03ID:VGLNjbvdM
パワステの無いハンドル握ったこと無いんだろうなぁ
2025/04/12(土) 17:11:32.63ID:50hOhfEU0
>>901
でも850は大半をシステムコールに頼ってる感じで言ってる気がするんだよな
そうでなきゃメインプログラム(呼び出し元の意)が足を引っ張るから、全体のスループットは下がるってわかるはずだし
なんなら、データを渡せば全部やってくれて結果を受けとるだけ、ぐらいに思ってる気がしないでもない
2025/04/12(土) 19:49:48.77ID:ctMpwM2A0
>>872
漏れは>>850以降の流れはノーコメント
2025/04/12(土) 19:51:48.08ID:ctMpwM2A0
ひょっとしたらRustで書かれたRedoxはメチャクチャ速いのかもしれん……
2025/04/12(土) 20:47:35.95ID:Kq/N9vBkr
>>904
面白いことかけなかったら、だまっとけ

俺はかけない、だまっとく
書くならC++ かあちゃん愛してる
2025/04/12(土) 21:04:16.73ID:ctMpwM2A0
>>906
>>850を書いた香具師と思われたら恥ずかしいし……
2025/04/12(土) 21:23:50.46ID:laBjQjoGM
>>850書いたやつは知ったかぶりだけど
無理に話を広げると>>863に書いてるrustの特性に合わせた高速化ってありえると思う?
カーネルはメモリ空間別なんだし特にできることないよね?
2025/04/12(土) 23:26:15.15ID:C5glPX3o0
Cよりは「うまく」かけるけど、C++ほど「凝らずに」書けるのは、いいことのはず
Linusが、C++はボロクソ言ってNGしたが、Rustにはゴーサイン出したのは、そういうことだと思ってる
(念のために・後学のためにいっとくが、LinusはC++について、ユーザランドでは好きにしたらいいとも言ったはず)
2025/04/13(日) 00:04:43.19ID:cgsGBgQOM
>>908
並列化
2025/04/13(日) 00:06:07.15ID:cgsGBgQOM
最初に書いたことは一切特別なことは書いてない
小学生でも流すような内容で当たり前の当たり前

それをアホが勘違いして騒いでいる
2025/04/13(日) 00:11:33.04ID:YJSdSOOz0
Linusが昔触ったC++コンパイラの出来が最悪でキレ散らかした
要するにC++の仕様が悪いわけではなくて当時のg++の出来の悪さに嫌気をさしてC++を触らなくなった
どっちにしろバカに危ういコードを書かせないようにするセーフティ機構を導入したところでバカがコーディングしている時点で22H2も史上最悪の大型アプデで終わってるワケなんだがな
2025/04/13(日) 00:12:54.40ID:YJSdSOOz0
まちげーた
×22H2 〇24H2

どっちにしろセンスのないやつに触らせたら終わる罠
2025/04/13(日) 00:14:13.66ID:cgsGBgQOM
C++は継承があるからコードが追い辛いとかそんな理由だろう
cだと関数はその点簡潔に挙動が追いやすい
2025/04/13(日) 00:48:59.24ID:PZbFvNAM0
>>909
抽象化モデルが非効率だったと何年もたってから発覚したときにはそのモデルに依存しきっていて全体の書き直ししか修正しようがないということをリーナスは書いている。
プログラムを凝らずに書けることが良いというよりは、凝ったプログラムが柔軟性がない (修正しにくい) ことを問題視してるように見える。

実行効率はやってみないとわからん場合もあるし事情が変わる場合もあるから、ある時点で設計として真っ当であってもずっとそうだとは限らんのだな。
2025/04/13(日) 01:02:02.66ID:PZbFvNAM0
一度しか呼ばれないような関数は書かない (関数としてくくり出さない) とかいう方針の有名なプロジェクトがあったような気がするんだが、なんだったかわかる人はいる?
細部の処理の追いやすさとしてはそのほうが見通しがよいという論で、なるほどそういう考え方もあるんだなーと面白く思った記憶がある。
2025/04/13(日) 01:35:44.56ID:b1PigeDH0
>>910
解説頼むわ
rustじゃないとできない並列化って何?
2025/04/13(日) 01:36:41.03ID:wr7CGYg/0
>>916
有名なというと、デビット・カトラーのNTカーネル開発ではなかったか

逆に、「関数は30行以内」だったかなルールが採用されており、
普通に描いたら40行とか行ってしまう関数を、25行ずつの呼び出し元関数と呼び出し先関数に
書き換えられることが頻繁にあった、というので有名だったのはFileMakerだったかな
2025/04/13(日) 06:32:10.84ID:Aq/uJRNv0
Rust見て羨ましいと思ったのはスタックフレーム重視の言語設計かね。

効率化の観点からは入れ子構造・スタック構造が優れているんだから、スタックを崩す例外とかgotoは廃止してほしい。
あとスタックにある自動変数は関数呼び出しが乱れない限り存在が保証されるんだから、自動変数の参照しか受け付けない仮変数も欲しいところ。スマートポインタの参照は効率的だし、もっと安全に使えるようにしてほしい。
2025/04/13(日) 10:18:45.93ID:MoeuBZp20
アイタタタ……つ∀`;)
2025/04/13(日) 10:31:02.45ID:K92VhJDO0
例外はもう実行が続けられないんだからスタックが壊れても問題ない
それよりも、単なるエラーを例外として実装したコードが多いのが問題
std::optional など使え
922デフォルトの名無しさん (スフッ Sd7f-g0pP)
垢版 |
2025/04/13(日) 10:42:06.37ID:3fI5Pb+md
>>916
emacs
2025/04/13(日) 10:48:07.97ID:MoeuBZp20
>>921
ヒエッツ……、、、例外とスタックの関係について誤解が見受けられる……
例外発生時はスタックをアンワインドしてくれられるので(構築済みの)自動オブジェクトは解放される
もっとも救われるのはそれだけなので無神経なコーディングをしているとリソースリークがほとんど避けられないが
924デフォルトの名無しさん (ワッチョイ 475f-8xdJ)
垢版 |
2025/04/13(日) 11:00:29.39ID:c0pIh3Hj0
今後はよく反省し「スタック」を狩野英孝のホスト物まねの口調で「スタック~」と音読するようにしなさい
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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