- 1 名前:デフォルトの名無しさん (ワッチョイ efda-9b8G) mailto:sage [2023/10/31(火) 07:37:38.52 ID:+ZyYyqMO0.net]
- !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
- 445 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 11:58:09.00 ID:UFsx2JaR0.net]
- >>444
生ポ使うよりかスマートポインタの参照を使った方がマシだったりするからなぁ。スマートポインタがスタックフレームにあるなら安全だし。 スタック変数専用仮引数とかあればもっと安全になるのになぁ。 仮引数の種類はもっとあっていいと思う。
- 446 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 16:26:14.57 ID:lSV8lU690.net]
- >>445
考え方にもよるだろうけど、確保も解放も所有もしない関数でスマポ受け取る必要あるか? 特定の用途で管理されている特定のポインタしか許容しない、という意図ならスマポの参照でもいいだろうけど、汎用性は無いよね 生ポ受け取る場合暗黙のキャストも効かないし
- 447 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 20:17:38.39 ID:Ci+xhqlU0.net]
- >>442
むしろshared_ptr<T>でスレッド間共有オブジェクトを保持するのは 生ポに対するshared_ptr<T>のメリットが無い…… 可能な限りスレッド間共有なんてことはやめてconstオブジェクトのコピーにするのが正義…… >>439 自己参照ではないが前方宣言が必須の例、 class TreeNode; class TreeNode { std::shared_ptr<TreeNode> m_pLeft; std::shared_ptr<TreeNode> m_pRight; public: TreeNode(); ... };
- 448 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 20:21:44.33 ID:Ci+xhqlU0.net]
- んまー前方宣言が必須というのは言い杉やったかもしれんorz
TreeNodeみたいなクラスはノード毎にヒープを確保するなんてことはやめて専用のアロケーターを設けて 専用の領域をまとめて確保して、 木全体がいらなくなったら木をトラバースすることなく一気に解放するのが本当やが その場合m_pLeftやm_pRightにあたるのはポインタではなくて専用の領域(配列)のindexとかにすれば 前方宣言は不要、
- 449 名前:デフォルトの名無しさん mailto:sage [2024/09/07(土) 21:38:34.24 ID:lSV8lU690.net]
- >>442
使わざるを得ないは言い過ぎじゃね 同期取るのにshared_ptrのアトミック保証に依存するしか方法が無いの? 競技プログラマか何かか?
- 450 名前:デフォルトの名無しさん mailto:sage [2024/09/08(日) 00:33:39.65 ID:vgBqrjWA0.net]
- shared_ptrの内部的な参照カウンタとかはともかく
保持しているオブジェクト自体はアトミックでもなんでもないでしょ ってなんか勘違いしてる?
- 451 名前:デフォルトの名無しさん mailto:sage [2024/09/08(日) 01:27:17.93 ID:6Lpw1aoe0.net]
- 持ってるポインタの指す先のオブジェクトがアトミックになるとか言ってると思ってんの?アホかw
- 452 名前:デフォルトの名無しさん mailto:sage [2024/09/08(日) 01:32:50.82 ID:TMvzCbR60.net]
- そこでRustですよ!
- 453 名前:デフォルトの名無しさん [2024/09/08(日) 12:52:42.06 ID:Lw7YNDXG0.net]
- でたw
布教マソw
- 454 名前:デフォルトの名無しさん mailto:sage [2024/09/10(火) 11:29:59.05 ID:v6KS9t6sM.net]
- >>447
お前の理解はshared_ptrの一面だけだな ようするにunique_ptrの延長でしか見てない shared_ptrがどうしても欲しくなるのは オブジェクトのリリースタイミングが非決定的であるとき これは一般的にマルチスレッド環境 お前のTreeNodeの例はそれこそ生ポで実装しても対して苦労しないが 例えば動的可変multi producerなqueueの場合確実に安全なqueueの解放タイミングを知るにはリファレンスカウントのような制御が必要となる 当然この場合コピーすれば安全なんて寝ぼけたことにはならない
- 455 名前:デフォルトの名無しさん [2024/09/10(火) 13:20:49.36 ID:KGjTz1X0a.net]
- x 対して
- 456 名前:デフォルトの名無しさん mailto:sage [2024/09/10(火) 15:36:50.97 ID:+l9ylb2n0.net]
- それで自己参照ってのは結局何のことを指して言っていたんだい
- 457 名前:デフォルトの名無しさん mailto:sage [2024/09/10(火) 15:39:03.70 ID:+l9ylb2n0.net]
- あ、相互参照が先か
>>435>>436の言うところの
- 458 名前:デフォルトの名無しさん [2024/09/11(水) 12:14:54.12 ID:n6/LwjNL0.net]
- (*this)
↑ 自己参照
- 459 名前:デフォルトの名無しさん [2024/09/11(水) 12:19:01.05 ID:n6/LwjNL0.net]
- 木のノードはstd::vector<>で確保する
と言われて、だよねってなる人はnewもほとんど必要ない
- 460 名前:デフォルトの名無しさん [2024/09/11(水) 12:22:29.60 ID:n6/LwjNL0.net]
- 木の巡回は、巡回方向別にアダプタとしてイテレータを用意することが出来る
良くある行きがかり順のイテレータはスタックを使って作る
- 461 名前:デフォルトの名無しさん mailto:sage [2024/09/11(水) 15:12:04.16 ID:1n/VD1trM.net]
- でvectorの拡張で破綻すんだろ?
- 462 名前:デフォルトの名無しさん [2024/09/13(金) 16:29:50.66 ID:bblj+c3pa.net]
- move禁止
- 463 名前:デフォルトの名無しさん mailto:sage [2024/09/13(金) 19:59:43.80 ID:2C9M8qgO0.net]
- move禁止したらvector使えないし
- 464 名前:デフォルトの名無しさん mailto:sage [2024/09/17(火) 12:59:42.12 ID:TMGdiCOOa.net]
- それならオブジェクトを保持するためのオブジェクトと
moveためだけのインデックスを分けるかな
- 465 名前:デフォルトの名無しさん mailto:sage [2024/09/17(火) 16:24:30.60 ID:DN+X/Cyr0.net]
- 何がしたい
あほでしょ
- 466 名前:447 mailto:sage [2024/09/21(土) 20:05:42.93 ID:FUSKAHoo0.net]
- 何やら集中砲火を浴びている>>442 やが
マルチスレッド状況でshared_ptr<T>を超有効活用できる手が一つあったわ;;; スレッド間の共有オブジェクトをポインタpで保持する際の問題点は、 そのポインタを知っている複数スレッドの間でpが指すオブジェクト*pへのアクセスを悉く排他制御せなばならない点やが 逆にpを知っているスレッドが任意の時刻につき1つだけなら、オブジェクトのアクセスに対して排他の必要が無い それでいてスレッドへのデータの受け渡しに関してコピーの手間は減らせる 例: なんちゃらWorkerスレッドオブジェクトをshared_ptr<Worker>のキューで保持しておく スレッドfooが使うときWorker1をshared_ptr<Worker>としてpopする(←これは排他が要る スレッドbarが使うときWorker2をshared_ptr<Worker>としてpopする(←これは排他が要る ... (スレッドfooやbarはWorker1、2をそれぞれ独占的に使用できる) ←重要 ... スレッドfooが使い終わったWorker1をキューにpushする(←これは排他が要る スレッドbarが使い終わったWorker2をキューにpushする(←これは排他が要る
- 467 名前:447 mailto:sage [2024/09/21(土) 20:13:25.63 ID:FUSKAHoo0.net]
- ていうか2週間ぐらい前から作っていたやつが今さっき完動すた、
- 468 名前:デフォルトの名無しさん mailto:sage [2024/09/21(土) 20:35:47.52 ID:FUSKAHoo0.net]
- std::vector<TreeNode> nodes;
ならnodesを拡張したとき破綻するかもしれんが(nodeをnodesのindexで管理するならその限りではない std::vector<std::shared_ptr<TreeNode> > apNodes; ならapNodesを拡張しても破綻しないYO!(要素の実アドレスは保たれる
- 469 名前:デフォルトの名無しさん mailto:sage [2024/09/22(日) 08:21:05.99 ID:e5FZYjui0.net]
- それ何のためのshared_ptrなの?unique_ptrでいいというか横からコピーされないようにそうすべきでは
- 470 名前:デフォルトの名無しさん mailto:sage [2024/09/25(水) 13:57:54.93 ID:N5yN4IuU0.net]
- >>466
>>442 を書いたのおれだけど、なんでおれが集中砲火浴びてることになってんだよ 生ポとか意味不明なこといってる>>447は一見してわかるクソレスだろ おまえはそれ以上のクソレスにクソコード でもお前の勝ちだ クソコードに2週間かけた情熱に免じて親切におしえてやるわ shared_ptrはpに誰かがアクセスしている可能性がある間は決してdeleteされないことを保証できるのが肝 (pの先の排他ではこれは実現できない) もちろんこれも正しく使わないと保証できない よくあるミスは知ったかぶって参照カウントを操作しないようにshared_ptrを参照渡しとかにするやつな その間に絶対deleteされない保証がないならやってはいけない
- 471 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 03:21:09.01 ID:5BtHXQaO0.net]
- あーなるほど、一貫してshared_ptrの実体を渡してればそういう保証も出来るのか
自分の場合自前で排他処理や生存保証作ってたけど確かに大きなメリットだね (オブジェクト内部の排他は別に必要だとしても)
- 472 名前:デフォルトの名無しさん [2024/09/26(木) 10:52:52.31 ID:R5lWYvWFa.net]
- そんなあなたにRust
- 473 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 11:26:35.22 ID:r0pzUHiv0.net]
- >>472
c++コードと混在できるようになってからの話だな。 既存c++を捨てなきゃならんのなら要らん。
- 474 名前:デフォルトの名無しさん [2024/09/26(木) 11:37:49.48 ID:R5lWYvWFa.net]
- もちろんRustをやるにはC++を捨てる覚悟が必要
C++コード(特にテンプレやclass)とは相性最悪
- 475 名前:デフォルトの名無しさん [2024/09/26(木) 11:38:22.04 ID:R5lWYvWFa.net]
- >c++コードと混在できるようになって
Rustについて言うなら おそらくそんな未来は永久に来ない
- 476 名前:デフォルトの名無しさん [2024/09/26(木) 11:39:08.38 ID:R5lWYvWFa.net]
- 誤解の無いように言っておくと
(一部機能に限れば今でも混在出来るけど) 基本的にはC++とは相いれない
- 477 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 18:22:32.63 ID:sl+cfKHN0.net]
- ならc++にRustの機能が取り込まれるのを待つ。
Rustが大人気になったら、さすがに標準委員の連中も初心者・コーダー向けの"Safe c++"をやる気になるだろ。
- 478 名前:はちみつ餃子 mailto:sage [2024/09/26(木) 18:52:53.17 ID:B+Au+yIB0.net]
- >>477
もう Rust を使えばよくない……?
- 479 名前:デフォルトの名無しさん mailto:sage [2024/09/26(木) 19:43:24.82 ID:sl+cfKHN0.net]
- >>478
>>473だっつうの。 Kotlinみたいなのが欲しいのであって、Clojureみたいなのは要らん。
- 480 名前:はちみつ餃子 mailto:sage [2024/09/26(木) 20:25:47.69 ID:B+Au+yIB0.net]
- >>165
C++ のコードを Rust から呼び出したりするくらいのことは簡単に出来るよ。 たぶん (Java に対する) Kotlin みたいなこととして思い浮かべているようなことは出来る。 Rust がやってるような安全性の保障を自動では受けられない。 当然だが安全ではない (安全性が検証されていない) C++ のコードが Rust から呼び出すことで安全になったりはしない。 大抵の場合に Rust の都合に合わせてラッパーを書くことになる。
- 481 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 10:23:27.00 ID:n6BA5joS0.net]
- >>480
KotlinとJavaみたいにソースコードを混在できるレベルの相互運用性てあったっけ? Rustとc++では無理だと思うけど。
- 482 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 10:44:00.51 ID:02Aq/BhWM.net]
- cxxとかあるけど個人的には中途半端だから使わない
普通に共有ライブラリにして呼び出す方が素直で汎用的で良い
- 483 名前:デフォルトの名無しさん [2024/09/27(金) 12:33:43.81 ID:6/1p1gGO0.net]
- スマートポインターを使うように強制できる機能とかなら必要ないなあ
- 484 名前:デフォルトの名無しさん [2024/09/27(金) 16:51:52.33 ID:pgg/4VuRa.net]
- >>473 のような未来は永遠に来ない
- 485 名前:デフォルトの名無しさん [2024/09/27(金) 16:54:13.57 ID:pgg/4VuRa.net]
- >>482
結局Cが正解なんよ C++のスレで言うのもなんだけど
- 486 名前:デフォルトの名無しさん [2024/09/27(金) 16:54:31.95 ID:pgg/4VuRa.net]
- >>481
同意
- 487 名前:デフォルトの名無しさん [2024/09/27(金) 16:54:58.40 ID:pgg/4VuRa.net]
- >>480
嘘つくな 出鱈目言うな
- 488 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 17:14:28.28 ID:n6BA5joS0.net]
- >>483
コーダー向けので考えるなら、スマポ強制は最優先だろ。 生ポインタを(コーダーが)保存できなくするだけでも随分安全になる。あと生ポインタdelete禁止とか。
- 489 名前:デフォルトの名無しさん (ワッチョイ 728c-rNKn) mailto:sage [2024/09/27(金) 18:24:18.27 ID:dg7IL8lg0.net]
- 極限のパフォーマンスは別に要らないから安全にしたいという要件なら GC が既に解決しているし
今更生ポインタを禁止したところで C# や Java と同じ方向性のナニカにしかならんじゃろ
- 490 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 18:46:28.46 ID:EoeiRCVP0.net]
- gcがあったらメモリリークしないなんて幻想未だに信じてるとはね
- 491 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 18:59:34.32 ID:RwmUzOsi0.net]
- リークの話なの?
- 492 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 19:07:06.62 ID:n6BA5joS0.net]
- >>489
ライブラリとかフレームワークを使う側のコーダーと作る側のライブラリアンは性能要件が全然別。 コーダーに対してライブラリアンが「コーダーのコードに極限のパフォーマンスは別に要らないから安全に「させたい」」というのはあるだろ。
- 493 名前:デフォルトの名無しさん mailto:sage [2024/09/27(金) 23:12:04.55 ID:cfj6fT7K0.net]
- >>492
それならライブラリ側でメモリ周りを隠蔽するような作り方も出来ると思うけど ユーザー(コーダー)にはインスタンス使わせるけど内部では参照カウントなりスマポなり使ってるみたいな それですら問題が起きるようならユーザーがクソ
- 494 名前:デフォルトの名無しさん mailto:sage [2024/09/28(土) 10:42:06.28 ID:swed/tX60.net]
- C++はどんな安全策敷いてもユーザー側がその気になればいくらでもぶち壊せるからね
ライブラリがあんまりそこ頑張っても仕方ない
- 495 名前:デフォルトの名無しさん (アウアウエー Saaa-rNKn) [2024/09/28(土) 12:39:39.83 ID:gf2/NL3ha.net]
- Rustなら壊れないみたいな言い草だな
- 496 名前:デフォルトの名無しさん (ワッチョイ 77ba-vp5J) [2024/09/28(土) 13:06:22.71 ID:ZP4SxDa50.net]
- C++で書かれたChrome V8エンジンをRustから扱えるRusty V8というライブラリがリリースされたというニュースを見た
メモリ安全性を確保して呼び出しオーバーヘッドもゼロなんだって ほんとかな? ただのラッパーじゃないの? C++側でメモリアクセス違反があれば落ちそうだけど
- 497 名前:デフォルトの名無しさん mailto:sage [2024/09/28(土) 14:26:57.72 ID:yW35cSECM.net]
- その手の話はMICROSOFTの新機能ぐらいい思っておけば
腹も立たない
- 498 名前:はちみつ餃子 mailto:sage [2024/09/30(月) 22:26:30.09 ID:JxqgGnHQ0.net]
- >>496
Rust の標準ライブラリだって内部は unsafe だらけだぞ。 unsafe は Rust のメモリ安全性検査の例外とする指定で、検査はされないが安全であることはプログラマが保証しないといけない。 ただ、 unsafe な部分を慎重に押し込めて (押し込めるのが正しく出来ていれば) あとは Rust のメモリ安全性検査に頼ることが出来る。 ずっと気を付けなきゃならない C++ よりは面倒ごとを基盤に押し込めたら後は機械が検査してくれるほうがマシという程度の話。 押し込めた中に問題があればそりゃ当然駄目だよ。
- 499 名前:デフォルトの名無しさん mailto:sage [2024/10/01(火) 02:05:59.60 ID:J7GPtKrz0.net]
- V8エンジンてCVE脆弱性で毎月アップデートの口実にされる迷惑なやつだからさっさとRustで書き直せよ
- 500 名前:デフォルトの名無しさん [2024/10/01(火) 15:19:57.32 ID:KXGxeTHwM.net]
- >>498
>押し込めた中に問題があればそりゃ当然駄目だよ。 当然分かっているだろうが、unsafeの中だけでなく、 それが外側に及ぼす影響にも問題が生じないように作らなければなら ないが、それにはunsafeとRustの両方に対する深い理解が 必要となるだろうな。
- 501 名前:デフォルトの名無しさん mailto:sage [2024/10/01(火) 18:36:21.46 ID:al1nAqGBM.net]
- >>500
unsafeの中を通過する時には問題ないが、 戻り値などや、連携する他のメソッドなどが 関係した結果、どこかで分かりにくいメモリーエラー になるようなことも避ける必要が有るが、 それにはかなりRustの内部構造(?)に対する深い知識 と理解が必要となりそうだ。
- 502 名前:デフォルトの名無しさん (ワッチョイ 1fb1-/QnX) mailto:sage [2024/10/17(木) 11:01:19.65 ID:P7X9/HPx0.net]
- >>422
これ、static_assertだけ修正してもしょうがない気がするんだけどなぁ 他にも実体化しないはずの分岐でチェックされてエラーにされることあるし まぁ条件式に無理矢理テンプレート入れて回避は出来るけど
- 503 名前:デフォルトの名無しさん mailto:sage [2024/10/19(土) 17:30:35.94 ID:vb3IsOJN0.net]
- >>491
Rustのオブジェクトの所有権管理の強制はコンパイラに従う限りリークしない (病的な反例があるかどうかは知らん からリークの話ではないが、GC付き言語で解決という香具師が現れたから
- 504 名前:デフォルトの名無しさん mailto:sage [2024/10/19(土) 17:31:10.99 ID:vb3IsOJN0.net]
- >>490な発言になったんじゃないの
知らんけど
- 505 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 07:19:50.64 ID:ThoL8xQh0.net]
- >>503
RustはRcの循環参照解決できたの? 公式ソースある?
- 506 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 14:54:46.51 ID:WHCxApN50.net]
- C++派だが、Rustをもってしても、相互参照みたいなものは、人類には早いらしい
(設計段階で)無理しないこったな。。
- 507 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 15:57:11.21 ID:Hhc6wfX80.net]
- そもそも静的解析で解決できる問題か?
- 508 名前:はちみつ餃子 mailto:sage [2024/10/21(月) 16:03:29.88 ID:6JU3cZPt0.net]
- 循環参照をしたいときに出来ないのも困るしな。
なるべくやらないに越したことはないが、やるなら後始末は人が考えないと仕方ないわ。
- 509 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 22:48:14.20 ID:XvJERuqr0.net]
- 食事する哲学者の問題……
Rustだと循環参照するコードを書きにくくなっているから 循環参照によるリークとか病的な反例のうちなんじゃないの 知らんけど ノードNode同士が論理的には循環参照し得るんだけど その所有権をスーパーバイザ的な配列superArray: Node[]が持っていて、
- 510 名前:デフォルトの名無しさん mailto:sage [2024/10/21(月) 22:53:33.76 ID:XvJERuqr0.net]
- Node間の参照はsuperArrayのindexで済ませるというのもRustではすんなり通してくれな
いんだっけどうだっけ…… Node& node1 = superArray[0]; Node& node2 = superArray[1]; node1.next = 1; superArray[node1.next].value = 123; // node2.valueに書く node1.nextがsuperArray[]の添え字範囲内であることを機械的に保証するためにRustはどんな魔法を使ってくれる のか
- 511 名前:はちみつ餃子 mailto:sage [2024/10/22(火) 11:28:00.82 ID:UXnTPhGj0.net]
- >>510
Rust では実行時にチェックされて範囲から外れていたら panic (C/C++ で言うところの abort みたいなもの) する。 https://doc.rust-lang.org/std/ops/trait.Index.html#tymethod.index C/C++ のように配列がポインタになるということはなく、スライス (C++ で言うところの span みたいなもの) が基本型として組み込まれているので範囲チェック出来る。 コンパイル時に範囲内であることがわかる状況なら最適化で消えることもあるみたいだけど 実行時に外部から入ってくる値に依存することもあるので実行時にチェックしないとどうしようもない。
- 512 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 13:44:32.71 ID:A9ortPvu0.net]
- enum、
文字列への変換、 大変すぎて、ビックリした
- 513 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 14:06:10.17 ID:/lht/Ba/0.net]
- 俺はenumの機能を拡張するクラスを自分で定義してるな
それで文字列変換も文字列からの変換も出来る
- 514 名前:デフォルトの名無しさん mailto:sage [2024/10/28(月) 15:41:01.09 ID:xcgYWtNU0.net]
- autogenerated.txt.c みたいなの使うのも手だぞ 急がば回れ
そしてCよりはうまく書ける
- 515 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 08:22:28.04 ID:XRXAB2XQ0.net]
- >>514
うーん、どんなもの?それ
- 516 名前:デフォルトの名無しさん mailto:sage [2024/10/29(火) 13:58:12.41 ID:WYOK+g300.net]
- 好きなように書いて、好きなように変換して、途中でincludeする
簡単に書くもよし、ガッチガチにチェックするもよし
- 517 名前:デフォルトの名無しさん mailto:sage [2024/10/30(水) 23:11:10.17 ID:x0G86HEF0.net]
- HAGE(CAUWA1)
HAGE(CAUWA2) HAGE(CAUWA3) : みたいなテキスト作っといて 手コキストを#includeする手前でHAGEの意味を変えてやるとうまいこと一元化できる
- 518 名前: mailto:sage [2024/10/31(木) 00:43:29.18 ID:ET2RcGMR0.net]
- カウワ?
- 519 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 01:08:33.55 ID:gisW4Gdb0.net]
- magic_enum教えてやれや
じじいは感度低いから知らんか
- 520 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 05:43:35.79 ID:J4xtBqBy0.net]
- みてきた それが人気の実装か
やりたいこと次第だが、オーバスペック感はある ちょうどほしかったんなら止めないけどね
- 521 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 10:56:16.92 ID:++2hP8JV0.net]
- 横からなるほどー!
__PRETTY_FUNCTION__ / __FUNCSIG__
- 522 名前:デフォルトの名無しさん mailto:sage [2024/10/31(木) 15:32:14.58 ID:IcW65SaY0.net]
- あのー、アメリカグーグルで、検索すれば、良いのがでてきた
日本は、でてこない これは、やっぱり、レベルなんだろうね
- 523 名前:デフォルトの名無しさん [2024/11/01(金) 19:53:27.66 ID:TgBKHsuNa.net]
- >>518
あさひ奈央
- 524 名前:デフォルトの名無しさん mailto:sage [2024/11/02(土) 09:17:27.71 ID:KpOoS8wa0.net]
- >>522
アメリカグーグルって言い方からして頭悪そう
- 525 名前:デフォルトの名無しさん (ワッチョイ 5910-fVPo) mailto:sage [2024/11/05(火) 08:04:39.53 ID://VVBUiD0.net]
- magic_enumは個数制限がきついんだよな・・256くらいが限度じゃなかったっけ
- 526 名前:青木康善 mailto:sage [2024/11/06(水) 17:05:23.05 ID:vfgxFq1Ya.net]
- c plus plusとjava、電子音楽作成にどっちが向いてるかな?早いのは無論c plus plusだろうけど。
- 527 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 17:09:08.31 ID:jrSvpMvx0.net]
- 作成というが、記述したいのか、波形合成したいのか、はたまた生成(AI等)したいのか。。
- 528 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 17:14:36.09 ID:P7rcAaD30.net]
- なんでjava?
- 529 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 20:06:37.45 ID:TrFjb6KE0.net]
- >>526
C++ね 記号の入れ方知らないのかな
- 530 名前:青木康善 mailto:sage [2024/11/06(水) 20:56:51.96 ID:XG1hV+N8a.net]
- C soundというのはかつてありましたが。javaでやろうかな。C++は自分にはハードル高すぎます。
- 531 名前:はちみつ餃子 mailto:sage [2024/11/06(水) 21:37:08.81 ID:O6Mhx+Gj0.net]
- 相談スレなんだから相談しなさいよ。
独り言を書きたいなら X で。
- 532 名前:デフォルトの名無しさん mailto:sage [2024/11/06(水) 22:48:47.88 ID:tlKINjNQr.net]
- 5ちゃん初めてなんでしょ。浮いてるのはほっとこう、じきに慣れてくれる
コンパイラがCらしいね。でもjavaからも操作できる実績があるって こういうときは、「やってみて脳汁が出そうなほう」でいいとおもう 結局モチベなんで
- 533 名前:はちみつ餃子 mailto:sage [2024/11/07(木) 03:05:44.48 ID:LEgJ6Wm00.net]
- Csound は公式に Python や Java 用のラッパーは用意してるみたいだから得意なのでやればよさそう。
ところで固有名詞は正確に表記してくれないと探しにくいやで。
- 534 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 17:26:41.87 ID:k0cYSKPq0.net]
- g++とclang++が混ざった環境なのですが、g++でコンパイルしたバイナリはstd::stringとか
名前に__cx11というプレフィックスが付き、一方clang++の方は__1というものが付くようです とりあえず、clang++の方で__cx11が付くようなバイナリを生成するにはどうしたら いいでしょうか?
- 535 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 17:28:48.87 ID:k0cYSKPq0.net]
- すみません、__cx11じゃなくて__cxx11でした
- 536 名前:はちみつ餃子 mailto:sage [2024/11/08(金) 17:41:34.61 ID:Me1tPYCI0.net]
- 名前だけ合わせても具体的な実装方法が違えばどうせクラッシュするから意図的にマングルルールを違えている。
https://gcc.gnu.org/onlinedocs/gcc/Interoperation.html#Interoperation
- 537 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 17:52:36.03 ID:k0cYSKPq0.net]
- >>536
なるほど、要は「C++コンパイラ、混ぜるな危険」ということでしょうか?
- 538 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 18:12:15.75 ID:6Qfff3nN0.net]
- 例外とか互換性があるんかいな?
- 539 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 18:14:37.25 ID:6Qfff3nN0.net]
- C++コンパイラでコンパイルするにしても
ソースコードをCの範囲に留めて 関数プロトタイプを extern "C" すれば大丈夫だよ
- 540 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 18:18:53.42 ID:k0cYSKPq0.net]
- >>539
なるほど、例えばこんな感じなら大丈夫なんですかね? g++でコンパイルされたバイナリのグループAとclang++でコンパイルされたバイナリの グループBがあったとき、AからB(またはその逆)を呼ぶときは必ずCリンケージの関数 経由にする、とか....
- 541 名前:はちみつ餃子 mailto:sage [2024/11/08(金) 18:25:46.25 ID:Evz7xgHe0.net]
- >>540
OK。 C インターフェイスの範囲ではどちらも同じ ABI (Application Binary Interface) に従ってるはず。
- 542 名前:デフォルトの名無しさん mailto:sage [2024/11/08(金) 18:35:59.90 ID:k0cYSKPq0.net]
- >>541
なるほど 皆さんどうもありがとうございます
- 543 名前:デフォルトの名無しさん mailto:sage [2024/11/09(土) 19:08:22.86 ID:djyKk80a0.net]
- 昔std::vector<T>とかstd::stringを前のコンパイラでビルドしたDLLに渡したら以下略
やっぱコンパイラを混ぜるときはextern "C" な関数にプリミティブな型のみを渡すインターフェース設計にするパティーンが安牌 文字列とか渡したかったらあくまでchar[]にすべき……
- 544 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 16:10:22.46 ID:ck6aMoNGM.net]
- >>536
この場合は別々に標準ライブラリがリンクされる、つまり2つ動くのかな?
- 545 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 17:48:03.99 ID:cLh8//6O0.net]
- 単にリンクするだけではどっちかのライブラリのスタートアップしか呼ばれないから
呼ばれてない方のライブラリの初期化がされなくてまともに動作しない問題が残ると思う
- 546 名前:はちみつ餃子 mailto:sage [2024/11/10(日) 18:18:05.60 ID:R/A45v0+0.net]
- 仮にどうにか辻褄合わせが出来てちゃんと動いたとしても将来の開発環境・実行環境でどうなるか予想しづらいというのもある。
- 547 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 18:55:50.75 ID:g8WH2rn90.net]
- こういう感じの実装を見かけたんだけど、ptrって解放済みの領域を指してないよね?
int *ptr = NULL; std::map<char, int> m; m.insert(std::make_pair('a', 30)); { std::map<char, int>::iterator itr = m.find('a'); if (itr != m.end()) ptr = &(itr->second); // ここでitrは解放される } if (ptr) printf("*ptr = %d\n", *ptr); // 大丈夫?
- 548 名前:はちみつ餃子 ◆8X2XSCHEME (ワッチョイ cd32-bar5) mailto:sage [2024/11/10(日) 19:59:53.20 ID:a6nPaG4v0.net]
- >>547
itr が指してる先は m の一部なのでまだ生きてる。 問題ない。
- 549 名前:デフォルトの名無しさん mailto:sage [2024/11/10(日) 20:31:11.60 ID:g8WH2rn90.net]
- >>548
あざっす!なるほど、よかった〜
- 550 名前:デフォルトの名無しさん mailto:sage [2024/11/11(月) 00:36:44.76 ID:6qsu0cnY0.net]
- >>545
ヤヴァイやん>>539しても全然OKじゃないやん……
- 551 名前:デフォルトの名無しさん mailto:sage [2024/11/11(月) 00:38:49.39 ID:6qsu0cnY0.net]
- ただしウィンドーズのDLLの呼び出し場合は>>539に従っていれば問題無いはず……
ランタイムの初期化エントリはDLL毎に_DllMainCRTStartup が用意されてDLL初期化時に呼ばれる
- 552 名前:デフォルトの名無しさん (ワッチョイ 759b-NX7e) mailto:sage [2024/11/11(月) 16:46:00.51 ID:XlNa4SSE0.net]
- https://www.openwork.jp/company.php?m_id=a0910000000FrzY
- 553 名前:青木康善 mailto:sage [2024/11/12(火) 22:22:32.82 ID:svwbS+Oga.net]
- 独習C++を図書館で借りました。よく、こんな、難しく、エグい言語が出来ますねみなさん。
- 554 名前:デフォルトの名無しさん (ワッチョイ 1d1f-hYHe) mailto:sage [2024/11/12(火) 22:26:44.98 ID:r67kfyB40.net]
- 他に選択肢がなかったんや😭
あと最近はobjective-cとかいう悪魔合体に比べたらなんでもマシな言語に思えてきてる
- 555 名前:デフォルトの名無しさん mailto:sage [2024/11/13(水) 01:53:29.63 ID:CoujH3FQ0.net]
- Objective-C++もよろしく
- 556 名前:はちみつ餃子 mailto:sage [2024/11/13(水) 02:14:12.02 ID:Gj2zjD3b0.net]
- >>553
汚いが、必要なものはある。 綺麗に整理されてても必要なものがないよりは良い。
- 557 名前:デフォルトの名無しさん mailto:sage [2024/11/13(水) 03:47:19.43 ID:rKuXlBFV0.net]
- そーだそーだ
C++は難しいからObject Pascalやろうぜ!
- 558 名前:デフォルトの名無しさん [2024/11/14(木) 07:49:57.71 ID:z8CYzrjO0.net]
- C++女学院の人々ってまだ読める所ある?
大好きだったんだけど。
- 559 名前:デフォルトの名無しさん (ワッチョイ a501-3n/g) mailto:sage [2024/11/14(木) 12:23:07.88 ID:DkukOutW0.net]
- >>554
C++と悪魔合体してObjective-C++とかなってるけど自分は実用的に感じた 全部それで書こうとは思わんけど、C++との共存のレベルが高くて鼻血出そうになったわ OSやその他Apple系APIとのやり取りはObjC++、それ以外のソースはC++のみ、とかも簡単だし
- 560 名前:デフォルトの名無しさん (アウアウエー Sa13-vkNS) [2024/11/14(木) 14:52:24.21 ID:a5xmyjQfa.net]
- >>553
若い人がCからC++の増築増築で可笑しくなって行った歴史をなぞるのは無意味ではない >>554-555 Objective-C や Objective-C++ の方がまし やる気は無いけどObjectPASCALはDelphiだっけ
- 561 名前:デフォルトの名無しさん [2024/11/19(火) 11:41:41.34 ID:1x1cv+pZH.net]
- 演算子のオーバーロードない言語はダメだ
- 562 名前:デフォルトの名無しさん mailto:sage [2024/11/19(火) 11:53:31.53 ID:5+FMYvHmM.net]
- 演算子オーバーロードがもたらす言語仕様の複雑性を理解してたら軽々しくそういうことは言えない
- 563 名前:デフォルトの名無しさん [2024/12/08(日) 01:45:50.04 ID:EhZF4lXKz]
- 5chの管理人がRustマンセー野郎でRustの悪口言ったらBBS規制になっちまった。
それでこっちに書いときます。eigenという行列演算、線形代数ライブラリが ありますが、これ列主順なんですね。なので、[]演算子のオーバーロードでは 行列Aのi行j列の要素にアクセスするときにA[j][i]という奇妙な順番でないと いけない。それでeigenでは行列に対してA[i][j]みたいなサポートはしていない。 だから[]ではなく[][]演算子みたいな拡張がほしいと思いました。
- 564 名前:デフォルトの名無しさん [2024/12/08(日) 02:15:01.21 ID:EhZF4lXKz]
- マトリックスクラスを宣言すると
matrix_<double> a[3][3];
で何の対策もせずに、a[0][1][2][3]=1; みたいなアクセスは問題なくできるんですよ。 サイズ宣言時にa[3][3](3,3);というダサい形に。でもこれはstdsize(3,3);とでもして おけば解決します。でも、列主順のときにはa[j][i]がネックに。()演算子なら列主順 だろが行主順だろが問題なくオーバーロードで解決できるんですが、A(i,j)の添字が0 から始まるのはfortran使っていた自分には違和感があります。
それでA[i,j]? C言語のA[i][j]の伝統を捨てるんですか? 感性の問題ですけど。
- 565 名前:デフォルトの名無しさん [2024/12/08(日) 17:15:54.70 ID:EhZF4lXKz]
- なるほど。C#に引っ張られたわけですね。a[i][j]の ][ を , に置き換えるプログラム
を作成すれば大きな影響もなく変換できそうですね。 でも、a[i][j]は残すんですよね?残さないと、ブーイングもしくはC++23もういいわ になりそう。
|

|