X



C++相談室 part152

レス数が950を超えています。1000を超えると書き込みができなくなります。
0854デフォルトの名無しさん
垢版 |
2020/10/04(日) 22:09:13.89ID:oRUS9BLt
C++でカーネルを書くとして
レイヤー的にSTLとか一切禁止になるんじゃ…
するともはやCに対するアドバンテージはクラスや仮想関数が使えることぐらい
だがそれあってもカーネル書くのに言うほどうれしいかどうか、、、
0855デフォルトの名無しさん
垢版 |
2020/10/04(日) 22:18:38.61ID:oRUS9BLt
アプリケーション開発なら問題領域と解決領域をスムーズにつなぐのにクラスや多態性が役に立つが
OSのカーネルとなると信頼性と効率性が追求目標なのでアプリの設計とは様相がだいぶ異なるヨカン
アルゴリズムとデータ構造の世界で今日日のアーキテクチャーの複雑なメモリモデルの
要請を満たしつつメチャ枯れた書き方を要求されるしそれ以外の書き方をしたらリーナスに頃される
ハズ
0856デフォルトの名無しさん
垢版 |
2020/10/04(日) 22:23:23.86ID:BZCvNbQp
>>854
テンプレート自体は使える
ただ、new/deleteや例外を使ってるやつも多いから使えるのはかなり限定されるとは思う

>>852
ダッサw
0858デフォルトの名無しさん
垢版 |
2020/10/04(日) 22:50:31.84ID:heX2CqX2
おいおい
linux kernelの中はいたるところ仮想関数だらけですがな実質的には
vptrは使わないけど
0860デフォルトの名無しさん
垢版 |
2020/10/04(日) 22:58:43.88ID:oRUS9BLt
そうだっけvptrって構造体に書かれているvptrでvtblを参照してさらにそのvtblに収容されているポインタを参照するわけだが
そんなことをするぐらいなら構造体メンバとしてポインタを持ったほうがなんぼかマシ

※ 個人の感想です
0862デフォルトの名無しさん
垢版 |
2020/10/05(月) 00:59:40.74ID:5Dit9vq+
なんでこんなC++を目の仇にしてるようなオッサンがわざわざスレみにきてるのかが謎だ
その精力を別のことに割り振ればもっと生産的なのに・・
0864デフォルトの名無しさん
垢版 |
2020/10/05(月) 08:19:43.37ID:FaJmikLJ
>>860
virtualキーワード導入にあたってvtable方式に対する反対意見としてそういうのがあったらしいね
多態はクラスの特性かオブジェクトの特性かという分かれ道で
Smalltalkerあたりが言い出しそうなことだ
0866デフォルトの名無しさん
垢版 |
2020/10/05(月) 15:49:19.03ID:b8gYZTQ3
>>839
++
0867デフォルトの名無しさん
垢版 |
2020/10/06(火) 00:17:27.92ID:c3+O5H5/
>>862
ちゅうか、お湯に入れたカエルは飛び出るので死なないが、
水から茹でたカエルはそのまま死んでしまうのと同じで、
昔のC++が好きで使っていたらいつのまにか全然違う言語になってしまって
嫌いになっているから。
0868はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/06(火) 00:52:29.20ID:cMEvggOJ
私は C++ が ISO で標準化される前から使っているが今の方がずっと良くなってると思うんだがなぁ……。
まあ私はアマチュアだから業務での事情とかも知らんし、何か思うところがある人もいるのかもしれん。
0869デフォルトの名無しさん
垢版 |
2020/10/06(火) 01:07:59.33ID:IqXUZgwy
保守性無視のアホ拡張ばかりでもはや業務では使えん。
多くのOSSのC++プロジェクトが担当してたPGがいなくなれば保守されず放置されるのは至極当然。
昔のObjective-C、C++、Java、Javascript、C#がそうであったように、オナニー拡張するなら改名して別言語にすべし。
0871デフォルトの名無しさん
垢版 |
2020/10/06(火) 01:21:56.51ID:CFpJLx94
テンプレートメタプログラミングのトンチ臭さがなんとも
ライブラリを使うだけの立場なら使いやすくなったと思うけど
テンプレート絡んだライブラリ作る側はしんどすぎる
デバッグつらい
0872はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/06(火) 01:33:21.32ID:cMEvggOJ
確かに色々としんどい機能は多いのかもしれんけど、
それらの機能が必要なときに使わずに書くともっとしんどいでしょ。

全面的にメリットがないときなら使わないという選択もできるわけだし。
0873デフォルトの名無しさん
垢版 |
2020/10/06(火) 02:15:21.24ID:IqXUZgwy
頓珍漢甚だしい。その拡張された機能が必要だったのは標準化される10年も20年も前だろう。
必要なときに用意しないで今更使ってくれと迷惑極まりない。C++標準化委員会のやってることは時代錯誤甚だしい。

過去のコード資産を全否定するような拡張するなら別言語にしろと言ってんだ。
0875デフォルトの名無しさん
垢版 |
2020/10/06(火) 04:32:17.12ID:V/Ik48ec
てか、はちみつはマジで煽り抜きで
数万行以上のソフトをモダン(と、C++オタが信じてる)な書き方で作ってみたらいいよ
当然メタプログラミングにも挑戦して、だ
業務どうこうじゃなくて、ソフトを作る道具としての今のC++がどうなのかわかるから
0876デフォルトの名無しさん
垢版 |
2020/10/06(火) 05:41:08.44ID:bkxQK63r
c++界隈ってガイジしかいねーのかね…
0880はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/06(火) 08:42:39.29ID:zdPPSeez
>>875
新しい機能を (必要だと考えるまで) 使わないでいい自由があるということを
私は言ってるのにその返しはなんかおかしくない?
0882デフォルトの名無しさん
垢版 |
2020/10/06(火) 10:08:20.97ID:aU8CxIwJ
んまー低水準開発だと見えてほしくないものが見えてしまっている
レイヤーAとBの初期化が終わらなければレイヤーCの機能を呼んではいけないのに、
という状況は言語によらず普通に発生するから程度なのかもしれんが
C++はその手の罠が大杉問題、
0883デフォルトの名無しさん
垢版 |
2020/10/06(火) 10:09:47.48ID:aU8CxIwJ
最新のC++規格について行けている(キリ
と自称されている方々は、
単にOSが起動完了した状態での使い方に習熟しているだけではないのかどうなのか、
0884デフォルトの名無しさん
垢版 |
2020/10/06(火) 10:24:36.80ID:2iI+f89O
くだらねえ言いがかりだな
まあそんなことしか言うことねえのはわかるぜ
最大級に軽蔑する
0885デフォルトの名無しさん
垢版 |
2020/10/06(火) 10:52:17.76ID:WjG83btQ
このスレ観てたら C#++ とか産まれそう

と思った
0887デフォルトの名無しさん
垢版 |
2020/10/06(火) 11:53:18.32ID:aU8CxIwJ
プロジェクトのコーティング規約をしっかり定めさえすれば
空も飛べるはず、
0888デフォルトの名無しさん
垢版 |
2020/10/06(火) 11:55:12.28ID:c3+O5H5/
>>870
まあ、配列が TYPE a[N][M]; ではなく、
vector<vector<TYPE>> a; // ???
が推奨された時点でもう、おかしいから。
しかも、このスレにはvectorと略さずに必ずstd::vectorと書け、とまで言う人までいる。
0891デフォルトの名無しさん
垢版 |
2020/10/06(火) 12:01:19.58ID:c3+O5H5/
iteratorの書き方も煩雑すぎ、長すぎ。
linked listの場合に効率悪すぎ。
ポインタも生ポインタ費推奨で uniqure_ptr, shared_ptrなどが推奨されているのも
既に言語として破綻してる。
ポインタはCの「命」なのに、unique_ptrなどと書くのは長すぎるので。
アメリカの学生は9割がポインタが理解できないので、
多数決で言語仕様を決定していくと、ポインタを徹底的に排除してしまう。
角度の Radian 法が理解できない人が、Degreeを推奨し続けたりしているようなもの。
AndroidのSDKは、それになっている。
馬鹿じゃないかと思う。
0893デフォルトの名無しさん
垢版 |
2020/10/06(火) 12:06:36.75ID:c3+O5H5/
頭が悪い人は、ポインタの表記の優先順位を頭の中で「ほどけない」ので、
優先順位が馬鹿でも分かる
unique_ptr<unique_ptr<T>> p;
という書き方の方が分かり易く感じるのだと思う。
頭の良い人にとっては、ただ書くのが長くなっただけに過ぎないのに。
0895デフォルトの名無しさん
垢版 |
2020/10/06(火) 12:09:23.24ID:c3+O5H5/
>>892
便利でも書くのが長くなった時点で駄目。
頭の悪い人は、長くても考える量が少なくなる方を好むから、
9割がベギナー止まりであるところのプログラミングの世界で多数決で
良し悪しを決めると長くても考える量が少なくなる方が人気を呼ぶことになる。
しかし、頭の良い人は頭のAIがすぐれているので、考えなくても瞬時に分かって
しまうので、読み解いたり自分で書くときに全く時間が掛からないので、
短くかけるほうが好まれる。
0900デフォルトの名無しさん
垢版 |
2020/10/06(火) 12:18:47.45ID:aU8CxIwJ
余は真に驚くべき代案を思いついたが
匿名掲示板に書くには余白が狭すぎる、
0901デフォルトの名無しさん
垢版 |
2020/10/06(火) 12:35:34.59ID:6yK3bagl
>>896
ネットを除いたお前さんの実世界って、話す相手が自分自身かお母さんくらいしかいないんじゃないの?
0902デフォルトの名無しさん
垢版 |
2020/10/06(火) 12:38:51.95ID:6yK3bagl
>>891
生ポインタは言語仕様上、現在でも有効だし、合理的理由があればナマポを使うことを否定されるわけでもないのに、何が不満なのか分からんな。
0903デフォルトの名無しさん
垢版 |
2020/10/06(火) 12:44:06.33ID:CI7Aw4lV
>>882
グローバル変数やスタティック変数のコンストラクタに依存姓のある処理を記述して失敗しているのを目撃することはよくある。
でもそれはロード時に自動実行する機能のある言語では同様に起こりうることだと思うよ。

だいたいシングルトン多用するやつの仕業。
使うと恥ずかしくて死んでしまうようなパターン名ならよかったのに
0908◆QZaw55cn4c
垢版 |
2020/10/06(火) 18:51:39.39ID:44oBE2pA
>>896
そういうのならその証拠をみせてください
あなたのものの言い方は、どちらかというと反対側の人の言い方ですね
0909デフォルトの名無しさん
垢版 |
2020/10/06(火) 19:20:46.29ID:c3+O5H5/
この板で一番馬鹿っぽいのに自分は賢いと思っているのが QZだ。
恐らく女。
女の中では賢いのかもしれないが、男の中では普通。
0910デフォルトの名無しさん
垢版 |
2020/10/06(火) 20:13:08.46ID:k5Zg1BNu
>>903
アドレスサニタイザー入れたらシンプルトン関連で例外だらけになった
やっぱ未定義動作なのね
0911◆QZaw55cn4c
垢版 |
2020/10/06(火) 20:34:25.94ID:44oBE2pA
>>909
>恐らく女。

面白い意見ですね、どのような推論からこの結論が導き出されたのか興味があります

>>896
>実世界では天才と呼ばれているから。

というのなら、その証拠を投稿内容で証明してみせてほしいですよね
>>909 を見る限り、私には馬鹿の同類項にしかみえないですね……
0913デフォルトの名無しさん
垢版 |
2020/10/07(水) 03:07:05.72ID:Bq/qs/XJ
C++で食ってるフリーランスいる?

いくつでどういう技能を持ってていくら貰ってるか教えてくれよ
0914デフォルトの名無しさん
垢版 |
2020/10/07(水) 03:10:26.00ID:5YLES8U8
>>911
>>恐らく女。
>面白い意見ですね、どのような推論からこの結論が導き出されたのか興味があります
普段から、馬鹿な応答が多かったし、
「自分でコンテナクラス(リストなど)を作れるから天才」
だとか、男だったら基本中の基本の出来て当たり前の事が出来るだけで天才と言っている
辺り、如何に周りのレベルが低いかが分かったから。
0915デフォルトの名無しさん
垢版 |
2020/10/07(水) 09:58:24.09ID:Ht8WKaAR
>>913
教師なら有り得るなω
0916デフォルトの名無しさん
垢版 |
2020/10/08(木) 11:06:31.29ID:2a0CIcHX
>>904
> ::std::vector ←こう書かなきゃ意味ねえだろ
えーキモいからやだ
0918デフォルトの名無しさん
垢版 |
2020/10/08(木) 14:32:44.44ID:FCbCRYtX
>>916
絶対パスのつもりらしいが絶対パスになってねえだろ
相対パスならusingしろ
絶対パスの面倒臭さと相対パスの曖昧さのデメリット両取りする間抜けな書き方すんじゃねえって話
0921デフォルトの名無しさん
垢版 |
2020/10/08(木) 15:23:06.13ID:3RUxQQIS
>>920
技術板だからこそ、教条主義的な完全性より現実的な条件での合理的な判断があってしかるべきだと思うぞ。
0922はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/08(木) 15:43:13.43ID:xCgN3gCo
プログラミングはサイエンスの部分もなくはないがエンジニアリング (またはテクノロジ) 寄りの話だろ。
一部の隙もない論理を構築したいわけじゃなくて問題を解決したいんだ。
で、 std のかわりに ::std と書くことで解決される問題が
このスレの誰かの前に出現したことがただの一度でもあると思うのかね?

トップレベル以外の名前空間に std が現れるのは仕様で禁止されていないっぽいから、
そりゃあ可能性だけで言えば絶対にないとは言えんだろうが、
現実にはこの二者がいたらどちらがよりクソだと思う?

・ 変なところに std という名前空間を作るやつ
・ ::std と書かずに std と書くやつ

前者があまりにもクソすぎるのでそういうやつはおらんだろということで
だいたい上手く運用できておるのや。
0923デフォルトの名無しさん
垢版 |
2020/10/08(木) 15:45:51.60ID:FCbCRYtX
自己弁護にしか聞こえねえな
"今までそうやってきたから正しいことにしたい"
批判的な相手がそれで納得するとでも思っているのか
0924デフォルトの名無しさん
垢版 |
2020/10/08(木) 15:48:46.09ID:bMUfOck+
#define std ::std
0925デフォルトの名無しさん
垢版 |
2020/10/08(木) 15:51:15.44ID:FCbCRYtX
いっそstdをキーワードにすればって話ならまだわかるぜ
おまえらの論法で言うところの関数名やオブジェクト名をstdにはしねえんだから
下線で始まらないoperator""をstd以外には作らせないこともできるね
0926はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/08(木) 16:12:32.18ID:xCgN3gCo
>>923
そうだよ。
std という名前を作らないか ::std を使うかのどちらかが達成されていればよく、
std という名前を作らないという習慣で今までやってきるのをあえて乱したいのはなんで?
っていう話だよ。
0928はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/08(木) 16:18:31.50ID:xCgN3gCo
>>923
どちらかが正しいと言ってるんじゃなくて、一貫させることが正しいと言ってるんだよ。
移行コストを支払って得られる何かがあるなら検討はするよ。
何かいいことあるの?
0929デフォルトの名無しさん
垢版 |
2020/10/08(木) 16:25:12.01ID:OzyhYKZT
>>923
世の中には話の通じない相手がいるのは分かってるし、そんな相手を納得させることに無駄なエネルギーを費やす価値はない。お前さんが納得しなくも他の誰も困らないからどうでもいい。
というのも合理性だなw
0930デフォルトの名無しさん
垢版 |
2020/10/08(木) 16:30:41.96ID:FCbCRYtX
「合理性」を咎められたのが余程効いたようだな
意味をここでだけ変更したくてそんなに必死になるのは
そういう手合いはstdの意味をここだけ変更もしかねねえな
0934デフォルトの名無しさん
垢版 |
2020/10/08(木) 16:41:16.92ID:k2d5Ic0g
::stdって自己満でしかない
リターンがない
特に困ってない問題を解決したところで人生の無駄遣い
そこがんばったところでアホなマクロがひとつ混ざれば破綻する可能性はあるわけで
ある程度の良識や常識に依存するのは仕方ない
可能性のスケール感を考えられるかどうかとも言える
まぁやめろとは言ってないんだから好きにすればいいじゃん、ひとりで書いてる限りは
0935デフォルトの名無しさん
垢版 |
2020/10/08(木) 16:59:59.98ID:FCbCRYtX
実害が出る前に予防的措置ということはあるぞ

それから俺は既存のコードを書き直せなんて言ってない
そんなのはてめーらの勝手だ

アカデミックな目線でおかしいと思うところを批判しているだけだ
代替案も出してる(採用されるか否かはともかく)
0937デフォルトの名無しさん
垢版 |
2020/10/08(木) 17:10:34.05ID:bhEfUzRp
初心者から抜けられない・・・
0938はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/08(木) 18:12:40.88ID:xCgN3gCo
>>935
もっと広範囲に std という名前を禁止する提案はもう出てるよ。
言語仕様として良くなかったというのは言わなくても皆がわかってるので、
そんなに強くいわなくてもいいよ。
C++ の仕様がグダグダなんていうのは今更のことじゃん。

その上で、 std という名前を定義しないという運用上の習慣は確立してるって話。
0939デフォルトの名無しさん
垢版 |
2020/10/08(木) 19:16:21.52ID:Bj+fAE8H
そもそもstd名前空間(::stdじゃなくて)の拡張は未定義じゃね?
(17.6.4.2.1 Namespace std)

何のためにstd名前空間を定義するの?
0941蟻人間 ◆T6xkBnTXz7B0
垢版 |
2020/10/08(木) 19:51:57.26ID:N89hoMl4
例えばstd::swapで自分のクラスの交換を定義したい、ってケースが考えられる。
0942はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/08(木) 20:13:18.19ID:xCgN3gCo
>>939
その std は ::std のことやで。
その std を拡張することは禁止されているが、
別の名前空間の下に std という名前空間を作るのは禁止されていない。

using namespace で std を含む名前空間を取り込んだ上だと ::std でなく std という表現をすると
標準ライブラリの std でないものを指す可能性があるというのが今の話題。

でも禁止されてないからといって std という名前を付けるやつはおらんから気にするだけあほらしいでというのが反論。
0944はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/08(木) 20:41:41.67ID:xCgN3gCo
>>941
std (::std) に定義を追加することは禁じられているが特殊化を追加することは禁じられていなかった。
しかし C++20 からはこれも禁止になる。
カスタマイズポイントという仕組みが用意されたのでこれを使うのが (今後は) 望ましい。
0945sage
垢版 |
2020/10/08(木) 20:42:23.39ID:5vNQ47uu
>>942
C++標準にnamespace std を ::stdとする定義ってあったっけ?
『standard libraryの名前xは ::std::xとして定義しろ(20.5.1.1.3)』
というのはあるけど、namespace std = ::std という定義じゃないよね?

最近は標準を読んでないから見落としあるかもしれんが、
ざっと見た範囲では無さそうだった。
0946はちみつ餃子 ◆8X2XSCHEME
垢版 |
2020/10/08(木) 22:31:10.36ID:xCgN3gCo
>>945
そう。
using namespace std; の std が ::std でないものを指す可能性があるが、
拡張を禁じている std というのは ::std のことなので、
大元の議論は ::std を拡張するなんていう話はしてないという指摘をしてる。
0947デフォルトの名無しさん
垢版 |
2020/10/09(金) 00:24:46.45ID:Sv65jxff
ID:FCbCRYtX さんはグローバル以外で自分のコードから見えるスコープに誰かが
std という名前を宣言している可能性も考慮して万全の策を取っているんですね。すごいなぁ。
ということは当然、誰かが #define std ... している可能性も考慮して
::std を使う行の前には必ず #undef std も書くのでしょうね。すごいなぁ。
0949sage
垢版 |
2020/10/09(金) 03:59:02.26ID:eAfWXkzh
>>946
16.5.4.2.1 Namespace std
Unless otherwise specified, the behavior of a program is undefined if it adds declarations or definitions
to namespace std or to a namespace within namespace std.
で、::stdの規定があるのは
16.5.1.1 Library contents
Whenever a name x defined in the standard library is mentioned, the name x is assumed to be fully qualified
as ::std::x, unless explicitly described otherwise. For example, if the Effects: element for library function F
is described as calling library function G, the function ::std::G is meant.
だけだから、拡張を禁じているのが::stdだけというのは言いすぎじゃね?

標準化の経過を追っているわけじゃないからこの解釈が妥当か知らんが。
レス数が950を超えています。1000を超えると書き込みができなくなります。

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