!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
探検
C++相談室 part165
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ efda-9b8G)
2023/10/31(火) 07:37:38.52ID:+ZyYyqMO0448デフォルトの名無しさん (ワッチョイ 8763-0xUn)
2024/09/07(土) 20:21:44.33ID:Ci+xhqlU0 んまー前方宣言が必須というのは言い杉やったかもしれんorz
TreeNodeみたいなクラスはノード毎にヒープを確保するなんてことはやめて専用のアロケーターを設けて
専用の領域をまとめて確保して、
木全体がいらなくなったら木をトラバースすることなく一気に解放するのが本当やが
その場合m_pLeftやm_pRightにあたるのはポインタではなくて専用の領域(配列)のindexとかにすれば
前方宣言は不要、
TreeNodeみたいなクラスはノード毎にヒープを確保するなんてことはやめて専用のアロケーターを設けて
専用の領域をまとめて確保して、
木全体がいらなくなったら木をトラバースすることなく一気に解放するのが本当やが
その場合m_pLeftやm_pRightにあたるのはポインタではなくて専用の領域(配列)のindexとかにすれば
前方宣言は不要、
449デフォルトの名無しさん (ワッチョイ 27ea-60ma)
2024/09/07(土) 21:38:34.24ID:lSV8lU690450デフォルトの名無しさん (ワッチョイ 069a-KwgP)
2024/09/08(日) 00:33:39.65ID:vgBqrjWA0 shared_ptrの内部的な参照カウンタとかはともかく
保持しているオブジェクト自体はアトミックでもなんでもないでしょ
ってなんか勘違いしてる?
保持しているオブジェクト自体はアトミックでもなんでもないでしょ
ってなんか勘違いしてる?
451デフォルトの名無しさん (ワッチョイ 91ea-IbtD)
2024/09/08(日) 01:27:17.93ID:6Lpw1aoe0 持ってるポインタの指す先のオブジェクトがアトミックになるとか言ってると思ってんの?アホかw
452デフォルトの名無しさん (ワッチョイ b501-I4rH)
2024/09/08(日) 01:32:50.82ID:TMvzCbR60 そこでRustですよ!
453デフォルトの名無しさん (ワッチョイ eaf0-8qrK)
2024/09/08(日) 12:52:42.06ID:Lw7YNDXG0 でたw
布教マソw
布教マソw
454デフォルトの名無しさん (ブーイモ MM0a-bJfQ)
2024/09/10(火) 11:29:59.05ID:v6KS9t6sM >>447
お前の理解はshared_ptrの一面だけだな
ようするにunique_ptrの延長でしか見てない
shared_ptrがどうしても欲しくなるのは
オブジェクトのリリースタイミングが非決定的であるとき
これは一般的にマルチスレッド環境
お前のTreeNodeの例はそれこそ生ポで実装しても対して苦労しないが
例えば動的可変multi producerなqueueの場合確実に安全なqueueの解放タイミングを知るにはリファレンスカウントのような制御が必要となる
当然この場合コピーすれば安全なんて寝ぼけたことにはならない
お前の理解はshared_ptrの一面だけだな
ようするにunique_ptrの延長でしか見てない
shared_ptrがどうしても欲しくなるのは
オブジェクトのリリースタイミングが非決定的であるとき
これは一般的にマルチスレッド環境
お前のTreeNodeの例はそれこそ生ポで実装しても対して苦労しないが
例えば動的可変multi producerなqueueの場合確実に安全なqueueの解放タイミングを知るにはリファレンスカウントのような制御が必要となる
当然この場合コピーすれば安全なんて寝ぼけたことにはならない
455デフォルトの名無しさん (アウアウエー Sa52-t/33)
2024/09/10(火) 13:20:49.36ID:KGjTz1X0a x 対して
456デフォルトの名無しさん (ワッチョイ 8a48-/VPw)
2024/09/10(火) 15:36:50.97ID:+l9ylb2n0 それで自己参照ってのは結局何のことを指して言っていたんだい
457デフォルトの名無しさん (ワッチョイ 8a48-/VPw)
2024/09/10(火) 15:39:03.70ID:+l9ylb2n0 あ、相互参照が先か
>>435>>436の言うところの
>>435>>436の言うところの
458デフォルトの名無しさん (ワッチョイ 1ede-2PHd)
2024/09/11(水) 12:14:54.12ID:n6/LwjNL0 (*this)
↑
自己参照
↑
自己参照
459デフォルトの名無しさん (ワッチョイ 1ede-2PHd)
2024/09/11(水) 12:19:01.05ID:n6/LwjNL0 木のノードはstd::vector<>で確保する
と言われて、だよねってなる人はnewもほとんど必要ない
と言われて、だよねってなる人はnewもほとんど必要ない
460デフォルトの名無しさん (ワッチョイ 1ede-2PHd)
2024/09/11(水) 12:22:29.60ID:n6/LwjNL0 木の巡回は、巡回方向別にアダプタとしてイテレータを用意することが出来る
良くある行きがかり順のイテレータはスタックを使って作る
良くある行きがかり順のイテレータはスタックを使って作る
461デフォルトの名無しさん (ブーイモ MM45-bJfQ)
2024/09/11(水) 15:12:04.16ID:1n/VD1trM でvectorの拡張で破綻すんだろ?
462デフォルトの名無しさん (アウアウエー Sa52-t/33)
2024/09/13(金) 16:29:50.66ID:bblj+c3pa move禁止
463デフォルトの名無しさん (ワッチョイ 5ef4-bJfQ)
2024/09/13(金) 19:59:43.80ID:2C9M8qgO0 move禁止したらvector使えないし
464デフォルトの名無しさん (アウアウエー Sadf-N1Zj)
2024/09/17(火) 12:59:42.12ID:TMGdiCOOa それならオブジェクトを保持するためのオブジェクトと
moveためだけのインデックスを分けるかな
moveためだけのインデックスを分けるかな
465デフォルトの名無しさん (ワッチョイ bf84-GITO)
2024/09/17(火) 16:24:30.60ID:DN+X/Cyr0 何がしたい
あほでしょ
あほでしょ
466447 (ワッチョイ d763-HdVQ)
2024/09/21(土) 20:05:42.93ID:FUSKAHoo0 何やら集中砲火を浴びている>>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する(←これは排他が要る
マルチスレッド状況で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する(←これは排他が要る
467447 (ワッチョイ d763-HdVQ)
2024/09/21(土) 20:13:25.63ID:FUSKAHoo0 ていうか2週間ぐらい前から作っていたやつが今さっき完動すた、
468デフォルトの名無しさん (ワッチョイ d763-HdVQ)
2024/09/21(土) 20:35:47.52ID:FUSKAHoo0 std::vector<TreeNode> nodes;
ならnodesを拡張したとき破綻するかもしれんが(nodeをnodesのindexで管理するならその限りではない
std::vector<std::shared_ptr<TreeNode> > apNodes;
ならapNodesを拡張しても破綻しないYO!(要素の実アドレスは保たれる
ならnodesを拡張したとき破綻するかもしれんが(nodeをnodesのindexで管理するならその限りではない
std::vector<std::shared_ptr<TreeNode> > apNodes;
ならapNodesを拡張しても破綻しないYO!(要素の実アドレスは保たれる
469デフォルトの名無しさん (ワッチョイ e37c-C1Jv)
2024/09/22(日) 08:21:05.99ID:e5FZYjui0 それ何のためのshared_ptrなの?unique_ptrでいいというか横からコピーされないようにそうすべきでは
470デフォルトの名無しさん (ワッチョイ 1e52-VArp)
2024/09/25(水) 13:57:54.93ID:N5yN4IuU0 >>466
>>442 を書いたのおれだけど、なんでおれが集中砲火浴びてることになってんだよ
生ポとか意味不明なこといってる>>447は一見してわかるクソレスだろ
おまえはそれ以上のクソレスにクソコード
でもお前の勝ちだ
クソコードに2週間かけた情熱に免じて親切におしえてやるわ
shared_ptrはpに誰かがアクセスしている可能性がある間は決してdeleteされないことを保証できるのが肝
(pの先の排他ではこれは実現できない)
もちろんこれも正しく使わないと保証できない
よくあるミスは知ったかぶって参照カウントを操作しないようにshared_ptrを参照渡しとかにするやつな
その間に絶対deleteされない保証がないならやってはいけない
>>442 を書いたのおれだけど、なんでおれが集中砲火浴びてることになってんだよ
生ポとか意味不明なこといってる>>447は一見してわかるクソレスだろ
おまえはそれ以上のクソレスにクソコード
でもお前の勝ちだ
クソコードに2週間かけた情熱に免じて親切におしえてやるわ
shared_ptrはpに誰かがアクセスしている可能性がある間は決してdeleteされないことを保証できるのが肝
(pの先の排他ではこれは実現できない)
もちろんこれも正しく使わないと保証できない
よくあるミスは知ったかぶって参照カウントを操作しないようにshared_ptrを参照渡しとかにするやつな
その間に絶対deleteされない保証がないならやってはいけない
471デフォルトの名無しさん (ワッチョイ cb41-LUcV)
2024/09/26(木) 03:21:09.01ID:5BtHXQaO0 あーなるほど、一貫してshared_ptrの実体を渡してればそういう保証も出来るのか
自分の場合自前で排他処理や生存保証作ってたけど確かに大きなメリットだね
(オブジェクト内部の排他は別に必要だとしても)
自分の場合自前で排他処理や生存保証作ってたけど確かに大きなメリットだね
(オブジェクト内部の排他は別に必要だとしても)
472デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 10:52:52.31ID:R5lWYvWFa そんなあなたにRust
473デフォルトの名無しさん (ワッチョイ 3224-jZWQ)
2024/09/26(木) 11:26:35.22ID:r0pzUHiv0474デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 11:37:49.48ID:R5lWYvWFa もちろんRustをやるにはC++を捨てる覚悟が必要
C++コード(特にテンプレやclass)とは相性最悪
C++コード(特にテンプレやclass)とは相性最悪
475デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 11:38:22.04ID:R5lWYvWFa >c++コードと混在できるようになって
Rustについて言うなら
おそらくそんな未来は永久に来ない
Rustについて言うなら
おそらくそんな未来は永久に来ない
476デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/26(木) 11:39:08.38ID:R5lWYvWFa 誤解の無いように言っておくと
(一部機能に限れば今でも混在出来るけど)
基本的にはC++とは相いれない
(一部機能に限れば今でも混在出来るけど)
基本的にはC++とは相いれない
477デフォルトの名無しさん (ワッチョイ 77da-jZWQ)
2024/09/26(木) 18:22:32.63ID:sl+cfKHN0 ならc++にRustの機能が取り込まれるのを待つ。
Rustが大人気になったら、さすがに標準委員の連中も初心者・コーダー向けの"Safe c++"をやる気になるだろ。
Rustが大人気になったら、さすがに標準委員の連中も初心者・コーダー向けの"Safe c++"をやる気になるだろ。
478はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-Pvcq)
2024/09/26(木) 18:52:53.17ID:B+Au+yIB0 >>477
もう Rust を使えばよくない……?
もう Rust を使えばよくない……?
479デフォルトの名無しさん (ワッチョイ 77da-jZWQ)
2024/09/26(木) 19:43:24.82ID:sl+cfKHN0480はちみつ餃子 ◆8X2XSCHEME (ワッチョイ e332-Pvcq)
2024/09/26(木) 20:25:47.69ID:B+Au+yIB0 >>165
C++ のコードを Rust から呼び出したりするくらいのことは簡単に出来るよ。
たぶん (Java に対する) Kotlin みたいなこととして思い浮かべているようなことは出来る。
Rust がやってるような安全性の保障を自動では受けられない。
当然だが安全ではない (安全性が検証されていない) C++ のコードが Rust から呼び出すことで安全になったりはしない。
大抵の場合に Rust の都合に合わせてラッパーを書くことになる。
C++ のコードを Rust から呼び出したりするくらいのことは簡単に出来るよ。
たぶん (Java に対する) Kotlin みたいなこととして思い浮かべているようなことは出来る。
Rust がやってるような安全性の保障を自動では受けられない。
当然だが安全ではない (安全性が検証されていない) C++ のコードが Rust から呼び出すことで安全になったりはしない。
大抵の場合に Rust の都合に合わせてラッパーを書くことになる。
481デフォルトの名無しさん (ワッチョイ e39c-jZWQ)
2024/09/27(金) 10:23:27.00ID:n6BA5joS0482デフォルトの名無しさん (ブーイモ MMe3-VArp)
2024/09/27(金) 10:44:00.51ID:02Aq/BhWM cxxとかあるけど個人的には中途半端だから使わない
普通に共有ライブラリにして呼び出す方が素直で汎用的で良い
普通に共有ライブラリにして呼び出す方が素直で汎用的で良い
483デフォルトの名無しさん (ワッチョイ 5e79-w5sm)
2024/09/27(金) 12:33:43.81ID:6/1p1gGO0 スマートポインターを使うように強制できる機能とかなら必要ないなあ
484デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/27(金) 16:51:52.33ID:pgg/4VuRa >>473 のような未来は永遠に来ない
485デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/27(金) 16:54:13.57ID:pgg/4VuRa486デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/27(金) 16:54:31.95ID:pgg/4VuRa >>481
同意
同意
487デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/27(金) 16:54:58.40ID:pgg/4VuRa488デフォルトの名無しさん (ワッチョイ e39c-jZWQ)
2024/09/27(金) 17:14:28.28ID:n6BA5joS0489デフォルトの名無しさん (ワッチョイ 728c-rNKn)
2024/09/27(金) 18:24:18.27ID:dg7IL8lg0 極限のパフォーマンスは別に要らないから安全にしたいという要件なら GC が既に解決しているし
今更生ポインタを禁止したところで C# や Java と同じ方向性のナニカにしかならんじゃろ
今更生ポインタを禁止したところで C# や Java と同じ方向性のナニカにしかならんじゃろ
490デフォルトの名無しさん (ワッチョイ 1e02-VArp)
2024/09/27(金) 18:46:28.46ID:EoeiRCVP0 gcがあったらメモリリークしないなんて幻想未だに信じてるとはね
491デフォルトの名無しさん (ワッチョイ a778-KU+G)
2024/09/27(金) 18:59:34.32ID:RwmUzOsi0 リークの話なの?
492デフォルトの名無しさん (ワッチョイ e39c-jZWQ)
2024/09/27(金) 19:07:06.62ID:n6BA5joS0 >>489
ライブラリとかフレームワークを使う側のコーダーと作る側のライブラリアンは性能要件が全然別。
コーダーに対してライブラリアンが「コーダーのコードに極限のパフォーマンスは別に要らないから安全に「させたい」」というのはあるだろ。
ライブラリとかフレームワークを使う側のコーダーと作る側のライブラリアンは性能要件が全然別。
コーダーに対してライブラリアンが「コーダーのコードに極限のパフォーマンスは別に要らないから安全に「させたい」」というのはあるだろ。
493デフォルトの名無しさん (ワッチョイ cb9e-LUcV)
2024/09/27(金) 23:12:04.55ID:cfj6fT7K0 >>492
それならライブラリ側でメモリ周りを隠蔽するような作り方も出来ると思うけど
ユーザー(コーダー)にはインスタンス使わせるけど内部では参照カウントなりスマポなり使ってるみたいな
それですら問題が起きるようならユーザーがクソ
それならライブラリ側でメモリ周りを隠蔽するような作り方も出来ると思うけど
ユーザー(コーダー)にはインスタンス使わせるけど内部では参照カウントなりスマポなり使ってるみたいな
それですら問題が起きるようならユーザーがクソ
494デフォルトの名無しさん (ワッチョイ e37c-C1Jv)
2024/09/28(土) 10:42:06.28ID:swed/tX60 C++はどんな安全策敷いてもユーザー側がその気になればいくらでもぶち壊せるからね
ライブラリがあんまりそこ頑張っても仕方ない
ライブラリがあんまりそこ頑張っても仕方ない
495デフォルトの名無しさん (アウアウエー Saaa-rNKn)
2024/09/28(土) 12:39:39.83ID:gf2/NL3ha Rustなら壊れないみたいな言い草だな
496デフォルトの名無しさん (ワッチョイ 77ba-vp5J)
2024/09/28(土) 13:06:22.71ID:ZP4SxDa50 C++で書かれたChrome V8エンジンをRustから扱えるRusty V8というライブラリがリリースされたというニュースを見た
メモリ安全性を確保して呼び出しオーバーヘッドもゼロなんだって
ほんとかな?
ただのラッパーじゃないの?
C++側でメモリアクセス違反があれば落ちそうだけど
メモリ安全性を確保して呼び出しオーバーヘッドもゼロなんだって
ほんとかな?
ただのラッパーじゃないの?
C++側でメモリアクセス違反があれば落ちそうだけど
497デフォルトの名無しさん (ブーイモ MMde-7TYI)
2024/09/28(土) 14:26:57.72ID:yW35cSECM その手の話はMICROSOFTの新機能ぐらいい思っておけば
腹も立たない
腹も立たない
498はちみつ餃子 ◆8X2XSCHEME (ワッチョイ b332-XD+R)
2024/09/30(月) 22:26:30.09ID:JxqgGnHQ0 >>496
Rust の標準ライブラリだって内部は unsafe だらけだぞ。
unsafe は Rust のメモリ安全性検査の例外とする指定で、検査はされないが安全であることはプログラマが保証しないといけない。
ただ、 unsafe な部分を慎重に押し込めて (押し込めるのが正しく出来ていれば) あとは Rust のメモリ安全性検査に頼ることが出来る。
ずっと気を付けなきゃならない C++ よりは面倒ごとを基盤に押し込めたら後は機械が検査してくれるほうがマシという程度の話。
押し込めた中に問題があればそりゃ当然駄目だよ。
Rust の標準ライブラリだって内部は unsafe だらけだぞ。
unsafe は Rust のメモリ安全性検査の例外とする指定で、検査はされないが安全であることはプログラマが保証しないといけない。
ただ、 unsafe な部分を慎重に押し込めて (押し込めるのが正しく出来ていれば) あとは Rust のメモリ安全性検査に頼ることが出来る。
ずっと気を付けなきゃならない C++ よりは面倒ごとを基盤に押し込めたら後は機械が検査してくれるほうがマシという程度の話。
押し込めた中に問題があればそりゃ当然駄目だよ。
499デフォルトの名無しさん (ワッチョイ 6f79-uMZa)
2024/10/01(火) 02:05:59.60ID:J7GPtKrz0 V8エンジンてCVE脆弱性で毎月アップデートの口実にされる迷惑なやつだからさっさとRustで書き直せよ
500デフォルトの名無しさん (オイコラミネオ MMa7-Pc8v)
2024/10/01(火) 15:19:57.32ID:KXGxeTHwM >>498
>押し込めた中に問題があればそりゃ当然駄目だよ。
当然分かっているだろうが、unsafeの中だけでなく、
それが外側に及ぼす影響にも問題が生じないように作らなければなら
ないが、それにはunsafeとRustの両方に対する深い理解が
必要となるだろうな。
>押し込めた中に問題があればそりゃ当然駄目だよ。
当然分かっているだろうが、unsafeの中だけでなく、
それが外側に及ぼす影響にも問題が生じないように作らなければなら
ないが、それにはunsafeとRustの両方に対する深い理解が
必要となるだろうな。
501デフォルトの名無しさん (オイコラミネオ MMa7-Pc8v)
2024/10/01(火) 18:36:21.46ID:al1nAqGBM >>500
unsafeの中を通過する時には問題ないが、
戻り値などや、連携する他のメソッドなどが
関係した結果、どこかで分かりにくいメモリーエラー
になるようなことも避ける必要が有るが、
それにはかなりRustの内部構造(?)に対する深い知識
と理解が必要となりそうだ。
unsafeの中を通過する時には問題ないが、
戻り値などや、連携する他のメソッドなどが
関係した結果、どこかで分かりにくいメモリーエラー
になるようなことも避ける必要が有るが、
それにはかなりRustの内部構造(?)に対する深い知識
と理解が必要となりそうだ。
502デフォルトの名無しさん (ワッチョイ 1fb1-/QnX)
2024/10/17(木) 11:01:19.65ID:P7X9/HPx0 >>422
これ、static_assertだけ修正してもしょうがない気がするんだけどなぁ
他にも実体化しないはずの分岐でチェックされてエラーにされることあるし
まぁ条件式に無理矢理テンプレート入れて回避は出来るけど
これ、static_assertだけ修正してもしょうがない気がするんだけどなぁ
他にも実体化しないはずの分岐でチェックされてエラーにされることあるし
まぁ条件式に無理矢理テンプレート入れて回避は出来るけど
503デフォルトの名無しさん (ワッチョイ 2b63-4umj)
2024/10/19(土) 17:30:35.94ID:vb3IsOJN0504デフォルトの名無しさん (ワッチョイ 2b63-4umj)
2024/10/19(土) 17:31:10.99ID:vb3IsOJN0 >>490な発言になったんじゃないの
知らんけど
知らんけど
505デフォルトの名無しさん (ワッチョイ 8593-t4Y2)
2024/10/21(月) 07:19:50.64ID:ThoL8xQh0506デフォルトの名無しさん (ワッチョイ 1907-zDHq)
2024/10/21(月) 14:54:46.51ID:WHCxApN50 C++派だが、Rustをもってしても、相互参照みたいなものは、人類には早いらしい
(設計段階で)無理しないこったな。。
(設計段階で)無理しないこったな。。
507デフォルトの名無しさん (ワッチョイ c60f-zhf3)
2024/10/21(月) 15:57:11.21ID:Hhc6wfX80 そもそも静的解析で解決できる問題か?
508はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0d32-zDHq)
2024/10/21(月) 16:03:29.88ID:6JU3cZPt0 循環参照をしたいときに出来ないのも困るしな。
なるべくやらないに越したことはないが、やるなら後始末は人が考えないと仕方ないわ。
なるべくやらないに越したことはないが、やるなら後始末は人が考えないと仕方ないわ。
509デフォルトの名無しさん (ワッチョイ e963-f5bJ)
2024/10/21(月) 22:48:14.20ID:XvJERuqr0 食事する哲学者の問題……
Rustだと循環参照するコードを書きにくくなっているから
循環参照によるリークとか病的な反例のうちなんじゃないの
知らんけど
ノードNode同士が論理的には循環参照し得るんだけど
その所有権をスーパーバイザ的な配列superArray: Node[]が持っていて、
Rustだと循環参照するコードを書きにくくなっているから
循環参照によるリークとか病的な反例のうちなんじゃないの
知らんけど
ノードNode同士が論理的には循環参照し得るんだけど
その所有権をスーパーバイザ的な配列superArray: Node[]が持っていて、
510デフォルトの名無しさん (ワッチョイ e963-f5bJ)
2024/10/21(月) 22:53:33.76ID:XvJERuqr0 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はどんな魔法を使ってくれる
のか
いんだっけどうだっけ……
Node& node1 = superArray[0];
Node& node2 = superArray[1];
node1.next = 1;
superArray[node1.next].value = 123; // node2.valueに書く
node1.nextがsuperArray[]の添え字範囲内であることを機械的に保証するためにRustはどんな魔法を使ってくれる
のか
511はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 0d32-zDHq)
2024/10/22(火) 11:28:00.82ID:UXnTPhGj0 >>510
Rust では実行時にチェックされて範囲から外れていたら panic (C/C++ で言うところの abort みたいなもの) する。
https://doc.rust-lang.org/std/ops/trait.Index.html#tymethod.index
C/C++ のように配列がポインタになるということはなく、スライス (C++ で言うところの span みたいなもの) が基本型として組み込まれているので範囲チェック出来る。
コンパイル時に範囲内であることがわかる状況なら最適化で消えることもあるみたいだけど
実行時に外部から入ってくる値に依存することもあるので実行時にチェックしないとどうしようもない。
Rust では実行時にチェックされて範囲から外れていたら panic (C/C++ で言うところの abort みたいなもの) する。
https://doc.rust-lang.org/std/ops/trait.Index.html#tymethod.index
C/C++ のように配列がポインタになるということはなく、スライス (C++ で言うところの span みたいなもの) が基本型として組み込まれているので範囲チェック出来る。
コンパイル時に範囲内であることがわかる状況なら最適化で消えることもあるみたいだけど
実行時に外部から入ってくる値に依存することもあるので実行時にチェックしないとどうしようもない。
512デフォルトの名無しさん (ワッチョイ 8901-1CwD)
2024/10/28(月) 13:44:32.71ID:A9ortPvu0 enum、
文字列への変換、
大変すぎて、ビックリした
文字列への変換、
大変すぎて、ビックリした
513デフォルトの名無しさん (ワッチョイ 1901-2Yr6)
2024/10/28(月) 14:06:10.17ID:/lht/Ba/0 俺はenumの機能を拡張するクラスを自分で定義してるな
それで文字列変換も文字列からの変換も出来る
それで文字列変換も文字列からの変換も出来る
514デフォルトの名無しさん (ワッチョイ 4907-+Yhf)
2024/10/28(月) 15:41:01.09ID:xcgYWtNU0 autogenerated.txt.c みたいなの使うのも手だぞ 急がば回れ
そしてCよりはうまく書ける
そしてCよりはうまく書ける
515デフォルトの名無しさん (ワッチョイ 8901-1CwD)
2024/10/29(火) 08:22:28.04ID:XRXAB2XQ0516デフォルトの名無しさん (ワッチョイ 4907-+Yhf)
2024/10/29(火) 13:58:12.41ID:WYOK+g300 好きなように書いて、好きなように変換して、途中でincludeする
簡単に書くもよし、ガッチガチにチェックするもよし
簡単に書くもよし、ガッチガチにチェックするもよし
517デフォルトの名無しさん (ワッチョイ fb79-fQm0)
2024/10/30(水) 23:11:10.17ID:x0G86HEF0 HAGE(CAUWA1)
HAGE(CAUWA2)
HAGE(CAUWA3)
:
みたいなテキスト作っといて
手コキストを#includeする手前でHAGEの意味を変えてやるとうまいこと一元化できる
HAGE(CAUWA2)
HAGE(CAUWA3)
:
みたいなテキスト作っといて
手コキストを#includeする手前でHAGEの意味を変えてやるとうまいこと一元化できる
519デフォルトの名無しさん (ワッチョイ 7b4d-XqAs)
2024/10/31(木) 01:08:33.55ID:gisW4Gdb0 magic_enum教えてやれや
じじいは感度低いから知らんか
じじいは感度低いから知らんか
520デフォルトの名無しさん (ワッチョイ 4907-+Yhf)
2024/10/31(木) 05:43:35.79ID:J4xtBqBy0 みてきた それが人気の実装か
やりたいこと次第だが、オーバスペック感はある
ちょうどほしかったんなら止めないけどね
やりたいこと次第だが、オーバスペック感はある
ちょうどほしかったんなら止めないけどね
521デフォルトの名無しさん (ワッチョイ 1901-2Yr6)
2024/10/31(木) 10:56:16.92ID:++2hP8JV0 横からなるほどー!
__PRETTY_FUNCTION__ / __FUNCSIG__
__PRETTY_FUNCTION__ / __FUNCSIG__
522デフォルトの名無しさん (ワッチョイ 8901-1CwD)
2024/10/31(木) 15:32:14.58ID:IcW65SaY0 あのー、アメリカグーグルで、検索すれば、良いのがでてきた
日本は、でてこない
これは、やっぱり、レベルなんだろうね
日本は、でてこない
これは、やっぱり、レベルなんだろうね
523デフォルトの名無しさん (アウアウエー Sae3-07nO)
2024/11/01(金) 19:53:27.66ID:TgBKHsuNa >>518
あさひ奈央
あさひ奈央
524デフォルトの名無しさん (ワッチョイ 1395-VVnD)
2024/11/02(土) 09:17:27.71ID:KpOoS8wa0 >>522
アメリカグーグルって言い方からして頭悪そう
アメリカグーグルって言い方からして頭悪そう
525デフォルトの名無しさん (ワッチョイ 5910-fVPo)
2024/11/05(火) 08:04:39.53ID://VVBUiD0 magic_enumは個数制限がきついんだよな・・256くらいが限度じゃなかったっけ
526青木康善 (アウアウウー Sacd-P7MY)
2024/11/06(水) 17:05:23.05ID:vfgxFq1Ya c plus plusとjava、電子音楽作成にどっちが向いてるかな?早いのは無論c plus plusだろうけど。
527デフォルトの名無しさん (ワッチョイ 6107-Q1tn)
2024/11/06(水) 17:09:08.31ID:jrSvpMvx0 作成というが、記述したいのか、波形合成したいのか、はたまた生成(AI等)したいのか。。
528デフォルトの名無しさん (ワッチョイ f618-UxC2)
2024/11/06(水) 17:14:36.09ID:P7rcAaD30 なんでjava?
529デフォルトの名無しさん (ワッチョイ a901-jwtj)
2024/11/06(水) 20:06:37.45ID:TrFjb6KE0530青木康善 (アウアウウー Sacd-P7MY)
2024/11/06(水) 20:56:51.96ID:XG1hV+N8a C soundというのはかつてありましたが。javaでやろうかな。C++は自分にはハードル高すぎます。
531はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-Q1tn)
2024/11/06(水) 21:37:08.81ID:O6Mhx+Gj0 相談スレなんだから相談しなさいよ。
独り言を書きたいなら X で。
独り言を書きたいなら X で。
532デフォルトの名無しさん (オッペケ Sr79-Q1tn)
2024/11/06(水) 22:48:47.88ID:tlKINjNQr 5ちゃん初めてなんでしょ。浮いてるのはほっとこう、じきに慣れてくれる
コンパイラがCらしいね。でもjavaからも操作できる実績があるって
こういうときは、「やってみて脳汁が出そうなほう」でいいとおもう
結局モチベなんで
コンパイラがCらしいね。でもjavaからも操作できる実績があるって
こういうときは、「やってみて脳汁が出そうなほう」でいいとおもう
結局モチベなんで
533はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-JeGG)
2024/11/07(木) 03:05:44.48ID:LEgJ6Wm00 Csound は公式に Python や Java 用のラッパーは用意してるみたいだから得意なのでやればよさそう。
ところで固有名詞は正確に表記してくれないと探しにくいやで。
ところで固有名詞は正確に表記してくれないと探しにくいやで。
534デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 17:26:41.87ID:k0cYSKPq0 g++とclang++が混ざった環境なのですが、g++でコンパイルしたバイナリはstd::stringとか
名前に__cx11というプレフィックスが付き、一方clang++の方は__1というものが付くようです
とりあえず、clang++の方で__cx11が付くようなバイナリを生成するにはどうしたら
いいでしょうか?
名前に__cx11というプレフィックスが付き、一方clang++の方は__1というものが付くようです
とりあえず、clang++の方で__cx11が付くようなバイナリを生成するにはどうしたら
いいでしょうか?
535デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 17:28:48.87ID:k0cYSKPq0 すみません、__cx11じゃなくて__cxx11でした
536はちみつ餃子 ◆8X2XSCHEME (ワッチョイ f532-JeGG)
2024/11/08(金) 17:41:34.61ID:Me1tPYCI0 名前だけ合わせても具体的な実装方法が違えばどうせクラッシュするから意図的にマングルルールを違えている。
https://gcc.gnu.org/onlinedocs/gcc/Interoperation.html#Interoperation
https://gcc.gnu.org/onlinedocs/gcc/Interoperation.html#Interoperation
537デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 17:52:36.03ID:k0cYSKPq0 >>536
なるほど、要は「C++コンパイラ、混ぜるな危険」ということでしょうか?
なるほど、要は「C++コンパイラ、混ぜるな危険」ということでしょうか?
538デフォルトの名無しさん (ワッチョイ a901-7tmY)
2024/11/08(金) 18:12:15.75ID:6Qfff3nN0 例外とか互換性があるんかいな?
539デフォルトの名無しさん (ワッチョイ a901-7tmY)
2024/11/08(金) 18:14:37.25ID:6Qfff3nN0 C++コンパイラでコンパイルするにしても
ソースコードをCの範囲に留めて
関数プロトタイプを
extern "C"
すれば大丈夫だよ
ソースコードをCの範囲に留めて
関数プロトタイプを
extern "C"
すれば大丈夫だよ
540デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 18:18:53.42ID:k0cYSKPq0 >>539
なるほど、例えばこんな感じなら大丈夫なんですかね?
g++でコンパイルされたバイナリのグループAとclang++でコンパイルされたバイナリの
グループBがあったとき、AからB(またはその逆)を呼ぶときは必ずCリンケージの関数
経由にする、とか....
なるほど、例えばこんな感じなら大丈夫なんですかね?
g++でコンパイルされたバイナリのグループAとclang++でコンパイルされたバイナリの
グループBがあったとき、AからB(またはその逆)を呼ぶときは必ずCリンケージの関数
経由にする、とか....
541はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 71e8-JeGG)
2024/11/08(金) 18:25:46.25ID:Evz7xgHe0542デフォルトの名無しさん (ワッチョイ 7e9a-NsVU)
2024/11/08(金) 18:35:59.90ID:k0cYSKPq0543デフォルトの名無しさん (ワッチョイ b163-+nMC)
2024/11/09(土) 19:08:22.86ID:djyKk80a0 昔std::vector<T>とかstd::stringを前のコンパイラでビルドしたDLLに渡したら以下略
やっぱコンパイラを混ぜるときはextern "C" な関数にプリミティブな型のみを渡すインターフェース設計にするパティーンが安牌
文字列とか渡したかったらあくまでchar[]にすべき……
やっぱコンパイラを混ぜるときはextern "C" な関数にプリミティブな型のみを渡すインターフェース設計にするパティーンが安牌
文字列とか渡したかったらあくまでchar[]にすべき……
544デフォルトの名無しさん (ブーイモ MM43-QLv+)
2024/11/10(日) 16:10:22.46ID:ck6aMoNGM >>536
この場合は別々に標準ライブラリがリンクされる、つまり2つ動くのかな?
この場合は別々に標準ライブラリがリンクされる、つまり2つ動くのかな?
545デフォルトの名無しさん (ワッチョイ 1b79-b0Xs)
2024/11/10(日) 17:48:03.99ID:cLh8//6O0 単にリンクするだけではどっちかのライブラリのスタートアップしか呼ばれないから
呼ばれてない方のライブラリの初期化がされなくてまともに動作しない問題が残ると思う
呼ばれてない方のライブラリの初期化がされなくてまともに動作しない問題が残ると思う
546はちみつ餃子 ◆8X2XSCHEME (ワッチョイ 95cf-bar5)
2024/11/10(日) 18:18:05.60ID:R/A45v0+0 仮にどうにか辻褄合わせが出来てちゃんと動いたとしても将来の開発環境・実行環境でどうなるか予想しづらいというのもある。
547デフォルトの名無しさん (ワッチョイ 9bad-6tcr)
2024/11/10(日) 18:55:50.75ID:g8WH2rn90 こういう感じの実装を見かけたんだけど、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); // 大丈夫?
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)
2024/11/10(日) 19:59:53.20ID:a6nPaG4v0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 【実況】博衣こよりのえちえち朝こよ🧪
- 「これが完成された醜い姿である>>1」←これなに?
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
- 🏡
- 安倍晋三の遺産、日銀ETF売却終了予定は2138年 [115996789]
- 【高市刺客】 自民党「公明党の斉藤代表と闘う! 衆議院広島3区に公認候補を立てるぞ😤」 [485983549]
