1 名前:デフォルトの名無しさん mailto:sage [2021/08/09(月) 10:57:31.60 ID:JaaB5Egp.net] 前スレ C++相談室 part156 https://mevius.5ch.net/test/read.cgi/tech/1621389313/
175 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 21:27:04.43 ID:gNvESTNy.net] 生年月日ならミリ秒まで言える必要は無いが ログの時刻を極力正確に(WindowsのGetLocalTime()と同じ時刻で)記録したいのでつ∀`;)
176 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 04:13:32.16 ID:F733kpwr.net] 1970年以前生まれの50代以上のオッサン
177 名前:デフォルトの名無しさん [2021/08/23(月) 16:50:49.24 ID:Rrt4HCug.net] B.C. A.D. B.E.
178 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:05:26.78 ID:xWEF4I0D.net] B.E.って何ですか UCとSEとかRCとかじゃないの
179 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 22:52:48.51 ID:xWEF4I0D.net] ていうかsystem_clockはC++17以前からtime_tと相互変換できるのに(system_clock::from_time_t()、system_clock::to_time_t())、 エポックがどの時間を指しているかは未規定とかおかしくね↑?
180 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:20:43.35 ID:AuTnTHJo.net] 別におかしくない 変換時にエポックの差の分ずらせばいいだけだろ
181 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:31:13.03 ID:sPTJEjpv.net] そんなことよりなんでtime_tは符号なしなん? 64bit拡張するときに符号ありにしとけば166みたいな煽りを受けずにすんだのに
182 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 00:03:00.26 ID:24MephMZ.net] 符号なし使うのは総じてセンスないよね
183 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 07:17:43.25 ID:NEyNeI43.net] 符号付き整数はwrap aroundしたときの挙動が処理系依存か何かだったはず…… ハードウェア例外を生じるやつがあるらしい
184 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 07:52:57.66 ID:4Ohx7QuI.net] >>173 純粋にプログラミングスキルの話と受け取った>>167 に謝れ
185 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 08:21:39.19 ID:NErefsYh.net] >>175 オーバーフローしたときにラップアラウンドさせる使い方が数値計算としては特殊だからねぇ。
186 名前:デフォルトの名無しさん [2021/08/24(火) 15:27:02.85 ID:WZMj7UxV.net] >>167 ntp使え
187 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 17:48:36.53 ID:DexxKsi1.net] >>174 time_tを符号なしにしたやつはアフォだと思うが それをもって符号なしを使うやつ全員が例外なくアフォというのは 早まった一般化という誤謬だ
188 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 22:08:27.39 ID:OPjw/0cg.net] >>160 なるほど!ありがとうございます
189 名前:167 mailto:sage [2021/08/25(水) 00:50:22.37 ID:MXKFEwSS.net] そういやーまだご存命の方もいらっしゃるんでしたね >>179 符号付きにしたら2038年問題が2004年問題になってた 人類は間に合わなかった
190 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 07:34:23.44 ID:VHSVWUHA.net] 30年も猶予があったのにな
191 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 10:43:26.33 ID:M5WZn8fZ.net] ヒトラー「2036年、人類と云われる者は居なくなっている」
192 名前:デフォルトの名無しさん [2021/08/26(木) 16:49:35.75 ID:WPRv8+9f.net] 関東大震災だって100年も猶予があっても何もしない國ですし
193 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 21:09:02.54 ID:xnTAPql6.net] 色々やってるぞ 庶民を助ける政策をやってないだけで
194 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 17:50:19.96 ID:BFKMFKNN.net] https://twitter.com/cpp_akira/status/1430779310885859330 最近はC++の発表資料を公開すると「Rustでいいじゃん」というコメントがたくさんつくのか…。 Rustへの言及とか一文字も書いて
195 名前:ネいのに。 普及活動だと思うけど、さすがに嫌がらせチックに見える。 https://twitter.com/moriyoshit/status/1430795812552863744 C++の件に限らず、旧来からある言語の長所短所を理解せずに、 表面的に新言語を推す発言を見ると、 果たして当人は新しい言語の方も理解できているのだろうか、 という疑念をもってしまう... (deleted an unsolicited ad) [] [ここ壊れてます]
196 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 19:27:10.45 ID:wbifwX7a.net] >>186 Rustはいらんけど、制約を強化してコンパイルエラーを増やしたc++--は欲しいなぁ。 スライシングはすべてコンパイルエラー、ダウンキャストはメンバー関数とフレンド関数のみ使用可能 new deleteはメンバー関数とフレンド関数のみ使用可能(global operator new/deleteは廃止) といったメモリ周りの制約強化は欲しい。
197 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 14:03:18.97 ID:dCOU+NEa.net] Rustを使って欲しいなら、そう言えばいいのに 人のすることを小馬鹿にするような態度で来るから敵と見られるんだよ コミュ障にも程がある
198 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 18:35:03.00 ID:iJLWqDs6.net] インテルコンパイラの-fastには-staticが含まれてるけど、なんでスタティックリンクは速いの?
199 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 18:49:01.71 ID:Ovc44+68.net] ライブラリ使うときのロードの手間がなくなるからね
200 名前:はちみつ餃子 mailto:sage [2021/08/28(土) 23:41:54.59 ID:V8MBAFoh.net] スタティックリンクにすると最適化の情報が増えるというのもあると思う。 C/C++ では翻訳単位ごとにコンパイルしてからリンクするという工程を踏むから、 コンパイル時には他の翻訳単位の情報を知らず、他の翻訳単位の情報を利用した 最適化が出来なかった。 今では LTO が当たり前になって、リンク時にあらためてコンパイラに戻して最適化 させる仕組みがあるんだけど、バイナリ自体が別物だとその仕組みを使えない。
201 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:13:16.45 ID:h29TClHM.net] std::threadってスタックサイズを指定できないってマジ? 仮想メモリを使えない組み込み用途だとどうすんじゃ……
202 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:20:14.34 ID:kSqJuAzn.net] native_handle()関数で環境に応じたスレッドハンドル(linuxならpthread)を取得できるから、スタックサイズを設定するところだけ環境ごとに用意して切り替えればいいよ
203 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:28:41.66 ID:h29TClHM.net] Windowsみたいにスレッドハンドルを生成したときはスタックサイズ指定済のとき、みたいな 組み込み用OSがあったらどうすんじゃ……
204 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:46:08.60 ID:h29TClHM.net] とわいえμITRONのcre_tsk()は >cre_tsk でスタック領域を明示しない場合のタスクのスタックや割込みハンドラ/割込みサー >ビスルーチンのスタックは、OS が用意する「スタック用メモリ」から割り当てられます。 >スタック用メモリのサイズを定義する STKMSZ の標準値は 0 で、この場合、main 関数が使って >いる処理系のデフォルトのスタック領域(スタックセクション)を、OS のスタック用メモリとし >ます。この場合の実際のスタックサイズは、リンカでのセクション設定とスタートアップルー >チンでの初期スタックポインタ値で決まります。 みたいなことが書いてある C/C++界隈はみんな頭おかしい……
205 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 13:55:46.65 ID:h29TClHM.net] ゴメ勘違いcre_tsk()(IDがOSが自動割り当てのやつはacre_tsk())は 第2引数に与えるT_CTSK構造体でタスクごとにスタックサイズを指定できたわ;;; なんでstd::threadではできないんじゃ……
206 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:18:20.52 ID:vSvS+48a.net] コイツ前スレでも連レスしてたムーブ全く理解してないバカだよね? NGしたいからトリップつけてください
207 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:25:04.60 ID:x8xWTwL3.net] >>192 標準じゃ無理でしょ 全てのスレッドを変えたいならリンカのオプションとかで指摘できる環境もあるけど boost::thread使って boost::thread::thread_attribute::set_stack_size() で設定するがよろし >>193 native_handle()関数でハンドル取れると言う事はスレッド開始してる 開始済みスレッドのスタックサイズを変えられる環境って聞いたことない
208 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 14:30:52.45 ID:AWkeWwKB.net] >>196 ほんと組み込み屋は馬鹿だな
209 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:52:45.64 ID:h29TClHM.net] >>197 完璧な理解をサンプルコード付きで示したやろうが;;; 論点はなんでムーブに置き換えられるケース(明示的にstd::move()したら明らかに効率的なコードになる において最適化でムーブにならないのか?なのだが高度すぎるのか文盲か故に>>197 が付いてこれていないだけ >>197 はブーメラン
210 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 16:54:56.72 ID:h29TClHM.net] もっとも天才の漏れは答えにたどりついたがな ムーブコンの実装がコピコンの実装より効率的である保証が無い以上、 置き換え可能なケースであってもコピコンからムーブコンへの機械的置き換えは正当化されない
211 名前:デフォルトの名無しさん [2021/08/30(月) 14:34:41.72 ID:jKIf8Vzq.net] 天才のインフレ
212 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 16:43:13.53 ID:Uxp79PtR.net] Rustみたいにコンパイル時にいちいち参照のチェックするんじゃなくて C++で最終的に完成したバイナリに対してメモリサニタイザーを一回動かす ってのではだめな理由ある?
213 名前:デフォルトの名無しさん mailto:sage [2021/09/01(水) 20:16:57.41 ID:dG55Jwur.net] >>203 動かしたフロー以外のフローについて不安が残るし、サニタイザーの精度がどれほどかという問題もありそう。
214 名前:はちみつ餃子 mailto:sage [2021/09/01(水) 23:35:30.93 ID:3mB0e8fG.net] >>203 ものによって賢さの程度が違うから一概には言えないけど 基本的にはサニタイザは実際に起こった問題を検出するものなので 入力値次第で問題が有ったりなかったりするようなケースを検出できなかったり、 言語仕様上で未定義なものがたまたま問題ないアクセスになってしまうようなケースも 検出できないかもしれない。 問題が起こっていて再現条件が分かっているときに検証するツール、つまりデバッグ用のツール としてはサニタイザは有用だし、ごく基本的なテストツールとしても使えるけど、 Rust のライフタイムチェックほど網羅的ではない。
215 名前:デフォルトの名無しさん mailto:sage [2021/09/02(木) 05:18:49.53 ID:90/tsZBA.net] 一言でまとめると動的試験てことだな
216 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 09:16:16.79 ID:6YHhlfzl.net] MozillaのFireFoxの場合、わざとクラッカーがセキュリティーホールを見つけ出して そこを付いてくるから、普段の実行テストでは一度も発見できなかった メモリーバグが問題になるが、普通のアプリの場合、ユーザーがわざとバグを 付くことはないから、そのようなホールはあまり関係ないと思う。 テスト駆動開発とかアジャイル開発とかも、普段使いで問題が無いかをテスト することで大部分のバグが無い状態で開発していこうとする考え方。 それでもほとんどのメモリーバグは無い状態になっている。 メモリーバグがあると、普段使い的なテストをしても発覚することが多いから。 昔から言われているメモリーバグの問題点は、再現性が有る場合でも、バグが ある行とそれが発覚した時期とがずれていることがあるから。 デバッグモードでコンパイラが自動的にチェックするコードを入れていれば、 それはなくなるはず。 Rustはその意味で、経験法則的にFireFoxみたいな特殊なものでは意味があるが 一般アプリでは余り意味が無い。ブラウザの特殊性は、世界中のクラッカーが セキュリティーホールを探してわざとその穴を付いてくること。一般アプリでは それがないので、隠れたバグは隠れたままになっていることが多くて、 テストで出てこなかったバグは実際問題的には余り問題となら無い事が多い。
217 名前:デフォルトの名無しさん [2021/09/03(金) 09:22:40.61 ID:6YHhlfzl.net] >>207 例えば、ダングリングポインタ(Use After Free)は、ptrがどこかでまだ使用中なのに、 free(ptr)としてしまうこと。しかし、そのfree()をした時点ではアプリはダウン しないし、ptrに対して読み書きした段階でもまだ発覚せず、ptrが指すメモリー アドレスを別の目的で使用してしまって、お互いに読み書きがある種の干渉を 起こしてしまって、データがめちゃくちゃになり、それによってどこかで不具合 が生じた時点で発覚する。 なので、バグの根本原因であるfree(ptr)を実行した行がどこかを探し出しにくいと される。 しかし、このバグの場所とバグが起きた場所のずれは、デバッグビルド時に速度を 落としてチェックすれば本当は防げるはず。
218 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 09:24:49.55 ID:6YHhlfzl.net] >>208 チェックと言っても人間が手で書く必要は無く、コンパイラがチェックコードを 自動生成できるはず。
219 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:00:52.25 ID:yL2Kwy6+.net] 根拠のない決めつけばかりで気持ち悪い。
220 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:16:16.17 ID:lmzB7IZ6.net] >>207 世の中にはテスターという職種の人がいてだな
221 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 10:46:20.27 ID:yJUEU9nq.net] >>207 任意のファイルを読むアプリはファイルのパーサーの脆弱性をついてユーザ権限でコードを実行される可能性がある どちらかと言えばアプリよりサーバとしてアクセスを受け付けているプログラムの脆弱性をつかれて攻撃コードの実行を許してしまうことが多い さらに上のような場合でも、アプリやサーバのプログラム自体に脆弱性があるのではなく、使用しているOSのAPI側の実装の脆弱性をつかれる可能性がある こういうアプリやサーバやOSのコードの脆弱性にMSやGoogleは悩まされている
222 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:00:44.84 ID:yJUEU9nq.net] Valgrind と言う動的解析ツールを調べて見るといい うちはC++のプログラムは基本これを通すことになってる 商用ならもっといいツールもあるかも知れない そういうのを利用しても充分でないから静的解析するRustが注目されている
223 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:27:43.59 ID:6Xh4x7Us.net] 商用の静的解析ツール使ってると、正直メモリ関係のバグなんてありえないと思えるくらいいろいろ見つけてくれるよ
224 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:44:23.16 ID:9y+1HwQb.net] コンパイル時間に糸目を付けなければ、静的解析はもっと出来る。
225 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 11:47:10.63 ID:lmzB7IZ6.net] > メモリ関係のバグなんてありえないと思える lintの副作用がモロに出てるなw
226 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:20:21.54 ID:MvVz2a9W.net] 言うまでもない事だが完璧なメモリチェッカーは存在し得ない 停止問題と同値だからな
227 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 15:50:45.07 ID:6Xh4x7Us.net] 完璧無理っておまえの毛髪の量がプログラム停止に与える影響が読めないとかそういう話だろ? 限定的な範囲で正しけりゃ十分だよ
228 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 16:54:40.55 ID:lmzB7IZ6.net] ゴールポストは動かしちゃダメだよ
229 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:38:29.50 ID:6Xh4x7Us.net] 無限遠のゴールを設定するのはアホだべ
230 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:51:18.36 ID:xmwLNRYX.net] スクリプト言語も普通にクラッシュ
231 名前:することあるから [] [ここ壊れてます]
232 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 17:52:37.20 ID:xmwLNRYX.net] OSのコアダンプ出力とリブートに救われる手のひらの孫悟空
233 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 18:28:35.67 ID:iCLUv6gH.net] rustでもメモリアロケーション失敗するとパニックになる、てリーナスが突っ込んでいたろ。 c++の場合はどうなんのかな。
234 名前:デフォルトの名無しさん mailto:sage [2021/09/03(金) 20:13:28.89 ID:USKNPKWa.net] CoverityとVectorCASTは使ったことあるけど検知レベル最高にしても見逃すリークや二重フリー, ダングリングはそれなりにある (そもそもコードの構造が悪い場合も多いが) 検知レベル上げ過ぎると逆にFalse Positiveも増えるし
235 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 07:59:49.00 ID:kFVsNuY8.net] 無限遠のゴールポストを動かすって こいつ文系か?
236 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 08:08:40.61 ID:N/QuNfWR.net] まあ見つからないのは間違いなく書き方が悪いよな
237 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 19:04:52.86 ID:7+pvijvQ.net] ∞の概念が理解できるならそいつはもう文系ではあるまい
238 名前:デフォルトの名無しさん mailto:sage [2021/09/04(土) 19:11:19.50 ID:ICKB9ww0.net] ε-N論法
239 名前:デフォルトの名無しさん [2021/09/04(土) 22:28:42.31 ID:mLTAxmCN.net] 超久しぶりにC++の参考書 買った。 いまってC++20までいってるんでしょ? 時代遅れもいいところだから勉強しようと思ってw ただ読む気がおきない。 「pythonでいいか」って思いが・・・ww
240 名前:ハノン mailto:sage [2021/09/04(土) 23:52:57.58 .net] >>223 https://tabesugi.net/memo/2009/1a.html C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが 簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを 追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。 C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、 それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる: - うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が 安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、 もはや笑えるレベルを超えている) - 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに 効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の コードがその素晴らしいオブジェクトモデルに依存していて、直すためには アプリ全体を書き直さなきゃなんない。 言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに 限定するってことは、他の人がそれをめちゃくちゃにしないってことで、 ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい 「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
241 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:05:05.82 ID:yIsM5ONG.net] バカが使いこなせる言語ではないからな
242 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:27:52.33 ID:eMsTCIh+.net] linusに言われると返す言葉もないが、その後の文脈にある 『もし C++ で書かれた VCS が欲しいのなら、Monotone を見てみるといい。 ほんとに。連中は「本物のデータベース」を使っているよ。 「素敵なオブジェクト指向ライブラリ」も使ってる。「ナイスな C++ の抽象化」も 使ってる。そして率直なことろ、一部の情報系の人間が喜びそうな これらすべての設計上の決定のために、できてきた結果はゲロゲロで 保守不可能なカオスだ。 でもあんたはきっと git よりも気に入るだろう。保証するよ。』 な感じでC++を気に入って、夢を見ていたいんだろうね。
243 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 00:53:47.56 ID:66hkUr5p.net] 「オレはC++を使いこなせている」と思い込む素人を生温かく見守るスレはここですね
244 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 01:42:41.34 ID:eMsTCIh+.net] >>223 https://lkml.org/lkml/2021/4/14/1099 コレのことだと思うけど、どういうケースを想定しているの?
245 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 06:00:11.76 ID:fsFc+8nQ.net] 昔、バカでも使える言語でプログラマ人口増やしましょうてなことやってたな BASICじゃないぞ、あれは初心者用で、バカ用じゃない 計算を数式で書くのは理系だけだから 英文で書けるようにして文系でも使えるようにしようという試みがあった で、狙いどおり本当にバカプログラマを量産できた それでいいことあったか? C++はアレの逆をいっているわけだ
246 名前:デフォルトの名無しさん [2021/09/05(日) 06:45:24.37 ID:ClPlKiJv.net] Qtを使ってるから、C++一択だな。
247 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 12:24:02.01 ID:cBh+EO/A.net] namespaceと多態性はCだけではやりにくい
248 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 12:47:17.91 ID:0Cj96kG7.net] 静的なディスパッチの充実がCに必要なのではないか
249 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 14:17:57.22 ID:cBh+EO/A.net] >>234 Linuxはモノリシックカーネルなので動的メモリ確保を伴うような軟弱な モジュールもカーネルのうちに入ってしまっているからメモリ不足ぐらいで パニくられると手の打ちようがないから困るという話なんじゃないの(適当 OSはリソース管理を放り投げて停止することは許されないから 伝統的なやり方では起動時に非常用のメモリブロックをアロケートしておいて メモリが枯渇したら非常用のメモリブロックを使うみたいな手段がとられる(と思う がパニックされたらそこまで行きつかない ※ 個人の感想です
250 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 14:38:48.42 ID:eMsTCIh+.net] >>239 具体的に何かのケースを想定して言ってるわけじゃないのか。 ぶっちゃけOSをC++で書くならカーネルでnew/malloc/mmapとか使う実装はしないだろうし、処理系が使うランタイムにも依存するけど基本その辺はカスタマイズできるようになってると思う。 rustでもそんな感じで処理系次第って話だと思う。
251 名前:デフォルトの名無しさん [2021/09/05(日) 14:44:00.68 ID:LgQhIBwq.net] >>230 馬鹿除けのために C++ じゃなくてあえて C を使うのは良いね https://www.youtube.com/watch?v=TkyGdUg_XlA
252 名前:ハノン mailto:sage [2021/09/05(日) 17:28:18.83 .net] >>241 >>230 の類の話は昔からいわれていたもので、これも有名ですね www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html インタビューア(以下「I」): あなたがソフトウェアデザインの世界を一変させてから何年にもなる。振り返ってみて、感想は。 Stroustrup(以下「S」): 実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが C 言語を使っていたけど、問題はみんな結構うまくコーディングしていたことだった。 大学も C 言語を教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ 。 S: ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「プログラマが余るなんてことが絶対にありえないくらい、複雑でおぼえにくい言語があったらどうなるかな」ってね。 実は、この考えの一部は X10――例の X Window の――から頂いたんだ。あれはひどいグラフィックシステムでね、Sun 3/60とかでないと動かなかった。 ばかばかしいくらい複雑な構文規則とか、わかりにくい関数とか、疑似オブジェクト指向的な構造とか、僕がほしいと思う要素は全部揃っていたんだよね。 今でさえ、生の X Window コードを書く人間なんていない。正気を保つには Motif を使うしかないんだ。 S: もうかなり時間がたったしね、C++ が時間の無駄だということにはほとんどの人が気がついたとは思うけど、でも当初予想していたよりはずいぶん時間がかかったな。 I: 具体的に何をどうやったのかな。 S: 最初はほんの冗談のつもりでね、みんながあの本を真に受けるとは思ってもみなかったんだ。脳みそが半分でもあれば、オブジェクト指向プログラミングが非直感的で、非論理的で、非効率なことくらいはわかるよね。 I: え? S: それに「コードの再利用性」ときたら…。どこかの会社がコードを再利用したなんて話を聞いたことがある? I: うん、でも C++ は基本的にはしっかりした言語だと思う。 S: それ、本気で信じてるね。実際の C++ プロジェクトの経験はある? どうなるかって言うとね、まず第一に、いろいろワナを仕掛けてあるから、よほど小規模なプロジェクト以外は一発では動かないようになっているんだ。 たとえば演算子のオーバーロードがそうだ。たいていの場合、プロジェクトの終わり頃にはほとんどのモジュールで演算子をオーバーロードしている。 プログラマの連中が、トレーニングコースで教わったとおりにやらなくちゃいけないと思うからだ。つまり、1つの演算子の持つ意味が、モジュールによってまったく異なることになる。 モジュールの数が100かそこらあるときに、これをまとめあげようとしたらどうなると思う? データ隠蔽もあるね。モジュール間の連繋にどこかの会社が苦労しているなんて話を聞くと、笑いを抑えられないときがあるよ。 「Synergistic」という言葉は、プロジェクト管理者の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。
253 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 17:47:40.38 ID:eWmYSwWp.net] >>242 とっくに否定済みのデマを貼るな www.stroustrup.com/bs_faq.html#IEEE
254 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:05:24.16 ID:Lkm6/1Sl.net] https://ideone.com/fHH1N4 これが、シングルトンとして抜けている理由を教えて下し亜。 コードのストックにするために書いたのですが、そもそもシングルトンってなんでしたっけ?
255 名前:ハノン mailto:sage [2021/09/05(日) 18:06:53.16 .net] >>243 誰が書いたかなどどうでもよく、その内容についてはどう思いますか?
256 名前:はちみつ餃子 mailto:sage [2021/09/05(日) 18:10:26.36 ID:vh6AiUnJ.net] >>244 関数テンプレートが結果的に引数の数が違う関数として展開される。 引数の数の違いが結果の違い。
257 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:23:29.28 ID:cBh+EO/A.net] >static std::shared_ptr<T> O = std::make_shared<T>(A...); の部分って、Singleton()の初回呼び出しが複数のスレッドから同時に起こってもき ちんと排他してくれるんでした っけ また排他してくれるとしても最速(そのアーキテクチャ(マルチコアかもしれない)で最も適切) であることを気体していいんでしたっけ…… つまり生成に成功した後は排他不要なわけで、無駄にロックを取りに行きたくない……
258 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:24:18.83 ID:yIsM5ONG.net] >>242 おまえホント頭悪いな
259 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:27:31.03 ID:cBh+EO/A.net] みたいな配慮がシングルトンにしたとたんに必要になる メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
260 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:28:54.12 ID:0Cj96kG7.net] >>247 呼ばれたところで最後の奴が勝てば問題ないのでは
261 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:47:53.68 ID:cBh+EO/A.net] >>250 ある >static std::shared_ptr<T> O = std::make_shared<T>(A...); 全体が排他されないとしたら、Oの生成関数(初期化式「O=」の右辺)が複数回、 それも同期的に繰り返し呼ばれるのではなく、非同期的に再入される形で呼ばれかねない 生成関数の中でリソース確保するとしたら先の呼び出しで確保したリソースの ハンドルがdunglingにならないように配慮が必要になる 非同期的再入ということは、Oが生成→破棄→生成→破棄、にならず、 生成→生成→破棄→破棄になりかねないから、デストラクタをちゃんと書いたらリークしないとか そういう認識で当たったらバグる 問題山積や メインの処理が始まる前に普通の初期化関数呼び出しでOを生成したらそれで済むのに、、、
262 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 18:50:05.34 ID:nyuo1Vq1.net] >>245 お前の質問なんかどうでもいいからデマを貼るな
263 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 19:08:04.86 ID:UYU4AxET.net] >>247 https://timsong-cpp.github.io/cppwp/n4861/stmt.dcl#4
264 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 19:10:36.36 ID:2jP3+tuQ.net] >>246 を踏まえるとこんな感じか 関数テンプレートだけで済ます方法はあるのかな? https://ideone.com/kmIimz
265 名前:ハノン mailto:sage [2021/09/05(日) 21:38:19.52 .net] >>248 はい、頭も性格も悪いと思います、しかし >>242 の中のどういうところが悪いとお考えになったのか教えていただくと嬉しいです!!
266 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:21:15.62 ID:TAzC3d8r.net] >>255 そもそも、C++の生みの親で、それに関する書籍を出してその中でC++を 良い言語と自負して(それ以上の言語が出来ないというような主張も幾度もして) 解説し、まだ推進しようとしている人が、C++を徹底的に卑下するかどうかを 疑問に思ってないことも頭が悪いと思われる原因の一つ。
267 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:29:24.50 ID:15q7gB85.net] 実際、C++は、特に初期の頃はCより全面的に優れていると誰でも思えるような 物であって、ちゃんと世界的に認められて広まっていたのに、その部分まで 全否定するようなことをインタビューで答えるわけがない。 その後に追加されて機能は人により評価が分かれて全面的に優れているとは 思えるようなものではなくなっていた。 だから、C++11は、好きな人も居れば嫌いな人も居る。C++98より全面的に 優れていると言えるかどうかは人により評価が分かれるので、好みにより 文壇の様なものが生じている。
268 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:30:49.67 ID:cBh+EO/A.net] >>254 ひ、日本語でおk、、、 >If control enters the declaration concurrently while the variable is being initialized, the concurrent execution shall wait for completion of the initialization.85 >If control re-enters the declaration recursively while the variable is being initialized, the behavior is undefined. はどう読めばいいの? 結局concurrentlyにre-enterされるときはbehavior is undefinedとしか読めなさげ >>254 以上の状況なので>>244 の糞コードは直しても仕方が無い
269 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:36:38.84 ID:66hkUr5p.net] メモリを自動解放するfinally機能さえあればCでも大丈夫とは思う
270 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:50:33.49 ID:yIsM5ONG.net] https://imgur.com/aX1iNMp.jpg
271 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 22:52:01.95 ID:cBh+EO/A.net] とオモタがcontrol enters the declaration concurrently のときは初期化のcompletionまでshall waitで、 ただしrecursivelyだとイカン(未定義動作)と書いてあるのか…… つまりSingleton()関数内の初期化式「O=」の右辺がSingleton()を呼び出す場合か まあ確かにWindousみたいに特殊な仕様のクリティカルセクションでもない限りデッドロックしそう
272 名前:デフォルトの名無しさん mailto:sage [2021/09/05(日) 23:09:38.17 ID:eTOvJaZ9.net] >>251 そうか まあ仕様的にはスレッドセーフだわ 関係ないけど参照したグローバル変数に値が入っとらんで困ったことがあった
273 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 00:30:26.82 ID:62gS+LUW.net] >>258 なんかスレッド安全性の問題にしたいようだけど、 そもそも>>244 の第一の問題点は2番目のSingletonの呼び出しだけ別のオブジェクトを指してしまっている点だよ stdoutの2行目だけ0になってるだろ? その原因の説明が>>246 というわけだ すべての関数・クラスを最初からスレッドセーフな設計にしないといけないわけじゃない
274 名前:デフォルトの名無しさん mailto:sage [2021/09/06(月) 04:31:29.75 ID:HRRCwLhx.net] >>263 >>258 じゃないし、よく分からないけど https://ideone.com/69FQhL ではダメなの?
275 名前:デフォルトの名無しさん [2021/09/06(月) 04:31:59.38 ID:G2BRvA3h.net] ビャーネ・ストロヴストルップその人のインタビューだとは私も考えてませんよ、これはブラックジョークというべきでしょう、まあC++er が気を悪くする理由は理解できますが それに私も GNU Multi-Precision Library を使うときはC++のラッパの方を使います。C インターフェースの方は使い難くって使い難くって、これはもう罰ゲームですね‥‥ だから演算子のオーバーロードも控えめに使えば有用という立場です、紹介することと賛成することとは別だと思います https://mevius.5ch.net/test/read.cgi/tech/1434079972/84