「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」
っていう雑談スレ。
・C/C++ <=> Rust いまさら聞けない移行質問なども適当にどぞ
・レスバはじめんのは勝手だけど、面白いこと・へぇなこと書いたヤツが優勝
・マな話は、マのスレもご活用ください↓
前スレ: 結局C++とRustってどっちが良いの? 7traits
http://mevius.5ch.net/test/read.cgi/tech/1693451813/
関連スレ(マ板): Google&Microsoft「セキュリティバグの70%はC/C++のメモリ管理ミス。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
探検
結局C++とRustってどっちが良いの? 8traits
■ このスレッドは過去ログ倉庫に格納されています
2023/10/28(土) 13:45:00.38ID:fh9BWjjr
686デフォルトの名無しさん
2023/11/25(土) 09:02:19.65ID:rKTwm3uz >他人の書いたC++ライブラリがめっちゃメモリリークする
某OSのAPIのことですね判ります
某OSのAPIのことですね判ります
687デフォルトの名無しさん
2023/11/25(土) 09:47:04.81ID:9BsUE7B+688デフォルトの名無しさん
2023/11/25(土) 21:29:31.59ID:1Ohowu9E 嘘オジと複オジは撃沈されたようだな
689デフォルトの名無しさん
2023/11/26(日) 15:19:59.23ID:06WEnIxy OSにバグがあって後処理をしてもOSがリソースを掴みっぱなしになるといった経験はないだろうか。
そういった場合そのリソースを使う箇所だけ子プロセスとして隔離し、使い終わったらそのプロセスを終了する事でリソースを完全に開放させることが可能だ。
このプロセスの隔離はかなり万能な解決方法で、納期が短くて怪しいと思っても修正が困難なケースにも応用可能だ。
まあ要するにリークを疑われる場合一旦別プロセスにすれば必ず開放されるからリークは必ずしも怖くないよって話。
そういった場合そのリソースを使う箇所だけ子プロセスとして隔離し、使い終わったらそのプロセスを終了する事でリソースを完全に開放させることが可能だ。
このプロセスの隔離はかなり万能な解決方法で、納期が短くて怪しいと思っても修正が困難なケースにも応用可能だ。
まあ要するにリークを疑われる場合一旦別プロセスにすれば必ず開放されるからリークは必ずしも怖くないよって話。
690デフォルトの名無しさん
2023/11/26(日) 15:30:13.25ID:qv9H5y0z と、御社の現お取引先ホームページにありますね。
弊社はRust採用実績十分、リークは原則としてありません
弊社はRust採用実績十分、リークは原則としてありません
691デフォルトの名無しさん
2023/11/26(日) 16:02:44.80ID:GTIMQwMH >>687
いい定義だな
いい定義だな
692デフォルトの名無しさん
2023/11/26(日) 16:21:23.35ID:8OjiBh4l Rustはモダンな言語の一つなので
その定義でもRustは実装継承を持たずきちんと排除している
その定義でもRustは実装継承を持たずきちんと排除している
693デフォルトの名無しさん
2023/11/26(日) 18:06:50.18ID:6qvbnksS 結局、c++が最狂ってことでいいな?
694デフォルトの名無しさん
2023/11/26(日) 18:08:00.70ID:Dq1p+inG >>618
c++が最凶最悪
c++が最凶最悪
695デフォルトの名無しさん
2023/11/26(日) 18:37:35.88ID:4YJKEDWv696デフォルトの名無しさん
2023/11/26(日) 18:49:55.09ID:o8qwwCxG >一旦別プロセスにすれば必ず開放される
doubt
doubt
697デフォルトの名無しさん
2023/11/26(日) 19:14:33.38ID:6NRjjzPt すくなくともWindowsは長期間起動し続けると空きメモリが減っていく
OSが意図的に開放せずにキャッシュしてるのかリークなのかは分からないが
OSが意図的に開放せずにキャッシュしてるのかリークなのかは分からないが
698デフォルトの名無しさん
2023/11/26(日) 19:39:37.59ID:AfiVlC9p >>689
それ本当にOSのバグ?w
それ本当にOSのバグ?w
699デフォルトの名無しさん
2023/11/26(日) 19:41:06.05ID:Lbe7PiAw700デフォルトの名無しさん
2023/11/26(日) 19:44:09.20ID:EBR4w0d/ >>689
きっしょ
きっしょ
701デフォルトの名無しさん
2023/11/26(日) 22:37:51.44ID:06WEnIxy 俺が遭遇したのは2件で、どちらもOSの不具合という結論だよ
MSのナレッジに残ってるかもしれないがどっちもプロセスを終了するしか解決策が示されなかった
>>699
こういう理不尽に遭遇して回避策が示されたなら大仕事でもやらざるを得ないと思うけどね
別に難しいって程でもないし
MSのナレッジに残ってるかもしれないがどっちもプロセスを終了するしか解決策が示されなかった
>>699
こういう理不尽に遭遇して回避策が示されたなら大仕事でもやらざるを得ないと思うけどね
別に難しいって程でもないし
702デフォルトの名無しさん
2023/11/26(日) 22:48:32.77ID:06WEnIxy そういや別件でOSが設定しているタイムアウト値を待てない場合も別プロセスにして回避した事がある
この板って年寄りばかりだろうしWindowsのプログラミング長年やってれば何度かそういう事に遭遇するんじゃないの
この板って年寄りばかりだろうしWindowsのプログラミング長年やってれば何度かそういう事に遭遇するんじゃないの
703デフォルトの名無しさん
2023/11/26(日) 23:01:37.86ID:iMOX0Yuj あのね、年寄りが真面目に答えてやるとOSの観点から言うと
windowsとLinuxじゃプロセスの考え方が結構違ってて
Linuxの場合、バックグラウンドプロセスっていうのは普通に使われまくってるの
いわゆるプロセスのクローンだから扱いが楽
シェルから作れるし
一方windowsではexeなんでクソ重い上に扱いが面倒
データ共有やプロセス間通信も一苦労だ
だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う
windowsにおいてスレッドの方が軽い
一方Linuxではスレッドもプロセスも本質的に同じ
(カーネルの構造体thread_structはプロセス生成の時も使う)
よってプログラミングモデルがだいぶ違うため
どうすべきか?はかなり違う
以上がwindowsでもLinuxでも並行処理を書いてきた俺の感想
windowsとLinuxじゃプロセスの考え方が結構違ってて
Linuxの場合、バックグラウンドプロセスっていうのは普通に使われまくってるの
いわゆるプロセスのクローンだから扱いが楽
シェルから作れるし
一方windowsではexeなんでクソ重い上に扱いが面倒
データ共有やプロセス間通信も一苦労だ
だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う
windowsにおいてスレッドの方が軽い
一方Linuxではスレッドもプロセスも本質的に同じ
(カーネルの構造体thread_structはプロセス生成の時も使う)
よってプログラミングモデルがだいぶ違うため
どうすべきか?はかなり違う
以上がwindowsでもLinuxでも並行処理を書いてきた俺の感想
704デフォルトの名無しさん
2023/11/26(日) 23:12:09.99ID:dlQxZ4PC Windowsはプロセスもスレッドも、互換性チェックみたいのが重厚らしく超高コスト
さらに、セキュリティソフトが走ってるのが当たり前の世界なので、ファイルハンドルも高コスト
なんでもWSL2でやったほうが軽い? らしい
てことで、コルーチンはいいぞw
さらに、セキュリティソフトが走ってるのが当たり前の世界なので、ファイルハンドルも高コスト
なんでもWSL2でやったほうが軽い? らしい
てことで、コルーチンはいいぞw
705デフォルトの名無しさん
2023/11/26(日) 23:30:18.11ID:EFSUb3PR Rustの東京を使えばデフォルトでCPUのコアスレッド数をフル活用してコルーチンを何万も同時に動かせますものね
706デフォルトの名無しさん
2023/11/27(月) 00:37:45.36ID:ggQuSpTQ Elixir は、10万もの小プロセスを起動できる
Go の並行処理も、mattn の本に書いてあるけど、
C で、100スレッドを起動したら、
CPU 使用率が高く、12秒も掛かったが、
Goで100 goroutine を起動したら、
6スレッドしか起動せず、9秒で済んだ
Goの方が、CPUコアを効率的に使える
Go の並行処理も、mattn の本に書いてあるけど、
C で、100スレッドを起動したら、
CPU 使用率が高く、12秒も掛かったが、
Goで100 goroutine を起動したら、
6スレッドしか起動せず、9秒で済んだ
Goの方が、CPUコアを効率的に使える
707706
2023/11/27(月) 00:48:36.74ID:ggQuSpTQ とにかく、スレッドを起動したらダメ!
CPU コアや時間の大半が、起動処理に使われるから
CPU コアや時間の大半が、起動処理に使われるから
708デフォルトの名無しさん
2023/11/27(月) 00:59:58.17ID:zZXu+dmb とはいえコルーチンって使い所が難しいのよ
流行りそうで流行らないのがその理由
結局「本当の並列性が必要ないようなすぐ終わる処理を大量にする」ユースケースにしか使えないから
こういう処理ってあまりないことに気がつく
まず真の並列性が必要となる数値計算では使えない
処理の中でブロックするとダメなのでその判断も難しい
よって普通の言語では使うのが難しい
流行りそうで流行らないのがその理由
結局「本当の並列性が必要ないようなすぐ終わる処理を大量にする」ユースケースにしか使えないから
こういう処理ってあまりないことに気がつく
まず真の並列性が必要となる数値計算では使えない
処理の中でブロックするとダメなのでその判断も難しい
よって普通の言語では使うのが難しい
709デフォルトの名無しさん
2023/11/27(月) 01:36:12.87ID:O2rw1r7K710デフォルトの名無しさん
2023/11/27(月) 01:38:37.07ID:AHLzaHDv >>706
>Goの方が、CPUコアを効率的に使える
そう主張したかったら根拠を示さないとね
例えば逆の根拠として
Go各のgoroutineは別々の各々のスタック領域を必要とするけど
Rustはスタックレスなコルーチンだから必要とせずその分だけ効率的だね
>Goの方が、CPUコアを効率的に使える
そう主張したかったら根拠を示さないとね
例えば逆の根拠として
Go各のgoroutineは別々の各々のスタック領域を必要とするけど
Rustはスタックレスなコルーチンだから必要とせずその分だけ効率的だね
711デフォルトの名無しさん
2023/11/27(月) 01:45:48.38ID:zZXu+dmb >>707
普通はスレッドプール使うやろ
普通はスレッドプール使うやろ
712デフォルトの名無しさん
2023/11/27(月) 06:31:05.54ID:klBkI3Ol おれの作成したソフトは起動時に64個のスレッドを立ち上げているが常にサクサクだ
713デフォルトの名無しさん
2023/11/27(月) 07:50:36.80ID:h6EdzCL7 >>712
言語は何?
言語は何?
714デフォルトの名無しさん
2023/11/27(月) 07:54:36.67ID:klBkI3Ol cppは光速
715デフォルトの名無しさん
2023/11/27(月) 09:19:45.20ID:7/k6/GSg717デフォルトの名無しさん
2023/11/27(月) 09:24:14.02ID:7/k6/GSg >>703
Windowsにforkがあれば良かったと思うことは何度かある
Windowsにforkがあれば良かったと思うことは何度かある
718デフォルトの名無しさん
2023/11/27(月) 09:26:12.71ID:7/k6/GSg ああでも
>>703
>一方windowsではexeなんでクソ重い上に扱いが面倒
>データ共有やプロセス間通信も一苦労だ
>だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う
ここは完全に間違ってるよ
>>703
>一方windowsではexeなんでクソ重い上に扱いが面倒
>データ共有やプロセス間通信も一苦労だ
>だからwindowsではLinuxっぽいバックグラウンド処理はスレッドを使う
ここは完全に間違ってるよ
719デフォルトの名無しさん
2023/11/27(月) 09:30:39.99ID:7/k6/GSg >>706
>C で、100スレッドを起動したら、
>CPU 使用率が高く、12秒も掛かったが、
>
>Goで100 goroutine を起動したら、
>6スレッドしか起動せず、9秒で済んだ
可笑しな理屈だな
スレッド数で比較するならgoでも100スレッド使って比較するか
Cの方でスレッド数増やさないCで描いたコルーチンで比較するべきだろ
>C で、100スレッドを起動したら、
>CPU 使用率が高く、12秒も掛かったが、
>
>Goで100 goroutine を起動したら、
>6スレッドしか起動せず、9秒で済んだ
可笑しな理屈だな
スレッド数で比較するならgoでも100スレッド使って比較するか
Cの方でスレッド数増やさないCで描いたコルーチンで比較するべきだろ
720デフォルトの名無しさん
2023/11/27(月) 10:19:10.91ID:bfNyVWtl プロセスを分けて独立したメモリ空間の単位で障害を切り離して耐障害性を高めるのは昔からよく使われる方法だけどこれはスレッドやコルーチンでは代用できない
並行性を高める目的ならコルーチン+スレッドプールが最も効率が良い
C++やRustはまだまだ使いにくいけどGoやC#やSwiftのように使いやすいAPIが用意されれば誰もが当たり前のように使うようになる
並行性を高める目的ならコルーチン+スレッドプールが最も効率が良い
C++やRustはまだまだ使いにくいけどGoやC#やSwiftのように使いやすいAPIが用意されれば誰もが当たり前のように使うようになる
721デフォルトの名無しさん
2023/11/27(月) 13:17:02.15ID:y1vsdTcE722デフォルトの名無しさん
2023/11/27(月) 13:22:19.90ID:y1vsdTcE723デフォルトの名無しさん
2023/11/27(月) 13:27:11.60ID:UqO8a829 fork移植されてると思うけどそういう話ではなく?
724デフォルトの名無しさん
2023/11/27(月) 13:40:29.77ID:y1vsdTcE >>723
pythonじゃ使えないぞ
pythonじゃ使えないぞ
725デフォルトの名無しさん
2023/11/27(月) 14:04:14.09ID:l+s92lQ4 遅くともcygwinとかで、なんちゃってforkは実装されてるけど、コレジャナイ感は付きまとうんだよな(個人の感想です
726デフォルトの名無しさん
2023/11/27(月) 14:10:54.29ID:O2rw1r7K execなしのforkなんて時代錯誤もいいところ
いまだに使ってるやついんのか?
さっさと引退するのが世のために
いまだに使ってるやついんのか?
さっさと引退するのが世のために
727デフォルトの名無しさん
2023/11/27(月) 14:17:35.21ID:zZXu+dmb RubyもNotImplementedError
Perlはエミュレーションしてるがすでに非推奨レベル
Perlはエミュレーションしてるがすでに非推奨レベル
728デフォルトの名無しさん
2023/11/27(月) 14:21:41.56ID:+D1aTXqp こんどはforkを取り囲んでフェルマータするターンか
729デフォルトの名無しさん
2023/11/27(月) 15:12:24.83ID:qB4qrVrI forkは同じページを(書き換えるまで)共有できるのが売りだと思うけどwin版は最初からコピーするのか
そんな実装でfork爆弾作れるの?
そんな実装でfork爆弾作れるの?
730デフォルトの名無しさん
2023/11/27(月) 15:12:35.28ID:l+s92lQ4 ま、雑談だからな おもしろければどうでもおっけー
731デフォルトの名無しさん
2023/11/27(月) 15:37:56.10ID:+D1aTXqp オジジジジジw
https://medaka.5ch.net/test/read.cgi/prog/1619943288/667
667: 仕様書無しさん 2023/11/24(金) 01:57:39.09
>>665
C++のスマポは機能が弱すぎてできないことが多すぎる
例えばヒープ領域しか指せないから
(L1キャッシュ効果と領域確保解放コスト無しで高速な)スタック領域の活用がスマポではできない
https://medaka.5ch.net/test/read.cgi/prog/1619943288/667
667: 仕様書無しさん 2023/11/24(金) 01:57:39.09
>>665
C++のスマポは機能が弱すぎてできないことが多すぎる
例えばヒープ領域しか指せないから
(L1キャッシュ効果と領域確保解放コスト無しで高速な)スタック領域の活用がスマポではできない
732デフォルトの名無しさん
2023/11/27(月) 15:50:29.33ID:UqO8a829 スタック領域をスマートポインタで指す必要はあるの?
733デフォルトの名無しさん
2023/11/27(月) 15:57:04.75ID:l+s92lQ4 先々で、うっかりfreeするような書き方してしまったときにコンパイルエラーで止まってほしい
実体としては生ポだけど、チェック用の何かにラップされてる…そういうスマポ
実体としては生ポだけど、チェック用の何かにラップされてる…そういうスマポ
734デフォルトの名無しさん
2023/11/27(月) 17:16:07.46ID:FscsMJtl いつものように誰かが書いてた受け売りで中身は理解してないんだろ
少し突っ込まれたら表面的なことを繰り返す壊れたレコードになる
少し突っ込まれたら表面的なことを繰り返す壊れたレコードになる
735デフォルトの名無しさん
2023/11/27(月) 17:19:29.35ID:ZLucLoet www.microsoft.com/en-us/research/uploads/prod/2019/04/fork-hotos19.pdf
736デフォルトの名無しさん
2023/11/27(月) 19:00:17.85ID:UqO8a829 >>733
実装すれば良いのでは?
実装すれば良いのでは?
737デフォルトの名無しさん
2023/11/27(月) 19:12:23.49ID:MloD+hDC >>731
スタック領域は勝手に解放されますが
スタック領域は勝手に解放されますが
738デフォルトの名無しさん
2023/11/27(月) 19:23:48.42ID:VTBvXWTh Rustはヒープ領域だけでなくスタック領域にまで所有権やムーブや参照の概念を拡張したことから
C++よりスタック領域の活用で効率的になってる話ではないか
C++よりスタック領域の活用で効率的になってる話ではないか
739デフォルトの名無しさん
2023/11/27(月) 19:41:50.12ID:4LX/kS4x740デフォルトの名無しさん
2023/11/27(月) 19:55:41.13ID:XLFtaca7741デフォルトの名無しさん
2023/11/27(月) 19:57:13.46ID:ceTrdy2T C++は書くのがしんどい
Rustもしんどいけど、生成AIに書かせたコードもコンパイルとテスト通ればメモリリークの心配なく使えるので気持ちは楽
Rustもしんどいけど、生成AIに書かせたコードもコンパイルとテスト通ればメモリリークの心配なく使えるので気持ちは楽
742デフォルトの名無しさん
2023/11/28(火) 03:07:58.34ID:iuwbNdCf Boxってヒープのメモリどうやって管理してんの?スコープ?
743デフォルトの名無しさん
2023/11/28(火) 06:19:45.83ID:fb4KLmhh744デフォルトの名無しさん
2023/11/28(火) 07:21:41.08ID:p7m/jx+j >>742
unique ptrみたいな感じじゃない?
unique ptrみたいな感じじゃない?
745デフォルトの名無しさん
2023/11/28(火) 07:38:03.63ID:OE19BKGq746デフォルトの名無しさん
2023/11/28(火) 08:32:49.65ID:t7+ip2Xg747デフォルトの名無しさん
2023/11/28(火) 08:34:53.09ID:4GFkN+H+ スタック使うってカーネルで使えるん?
748デフォルトの名無しさん
2023/11/28(火) 09:04:02.54ID:uB2ZO1/C Rustの所有権チェックって、(コンパイル時にコストを寄せてるから)実行時はゼロコストじゃないん
へたくそに書いたら効率が下がる(たいてい実装効率が上がった犠牲)のは、C/C++も同じ
へたくそに書いたら効率が下がる(たいてい実装効率が上がった犠牲)のは、C/C++も同じ
749デフォルトの名無しさん
2023/11/28(火) 10:10:56.04ID:pC50QOa+ 技術的選択というのは最終的には必ずトレードオフになるので
ある選択のプラス面だけしか見ない/考えない/認識できないやつは何やらせてもダメ
ある選択のプラス面だけしか見ない/考えない/認識できないやつは何やらせてもダメ
750デフォルトの名無しさん
2023/11/28(火) 12:14:38.37ID:0HFLSmnD 新人やお前らの前任の調子いいだけの奴がコンパイル通したコードで、rustとc++のどっちが安心できるかってことよ。
751デフォルトの名無しさん
2023/11/28(火) 12:37:00.84ID:zgX3htu8 c++に自動変数専用参照とかあるといいんだけどなぁ。
自動変数にあるスマートポインタは参照渡ししたい。
自動変数にあるスマートポインタは参照渡ししたい。
752デフォルトの名無しさん
2023/11/28(火) 14:34:16.09ID:5v5wYsOr 今更だけどNonNullクソ便利だな
753デフォルトの名無しさん
2023/11/28(火) 14:49:32.02ID:tbacT9e+ >>751
イマイチ分からんのだがコードで書ける?
イマイチ分からんのだがコードで書ける?
754デフォルトの名無しさん
2023/11/28(火) 15:14:43.92ID:zjrE05Ar >>632
と暇人が申しております
と暇人が申しております
755デフォルトの名無しさん
2023/11/28(火) 15:30:47.32ID:PhTWlmVC >>753
void foo(shared_ptr<T>&&& p)
でshared_ptr&&&が自動変数専用参照だとすると、
void main() {
shared_ptr<T> ptr;
foo(ptr); //スタックにあると合法
shared_ptr<shared_ptr<T>> pptr;
foo(*pptr); //ヒープにあるとエラー
shared_ptr<T>&&& pp = ptr;
foo(*pptr); //次のスタックフレームに渡すのも合法
}
void foo(shared_ptr<T>&&& p)
でshared_ptr&&&が自動変数専用参照だとすると、
void main() {
shared_ptr<T> ptr;
foo(ptr); //スタックにあると合法
shared_ptr<shared_ptr<T>> pptr;
foo(*pptr); //ヒープにあるとエラー
shared_ptr<T>&&& pp = ptr;
foo(*pptr); //次のスタックフレームに渡すのも合法
}
756デフォルトの名無しさん
2023/11/28(火) 15:32:05.10ID:PhTWlmVC757デフォルトの名無しさん
2023/11/28(火) 20:15:20.15ID:QlCOA+Xa メモリがスタックにあるかヒープにあるかはリンカのアドレスマップと連携すればわかる
つまり欲しいなら自作すればいいのでは
つまり欲しいなら自作すればいいのでは
758デフォルトの名無しさん
2023/11/28(火) 21:08:43.42ID:zgX3htu8759デフォルトの名無しさん
2023/11/28(火) 21:40:34.18ID:2tolr/zk さっぱり意味が分からんのだけど
もしかしてshared_ptr&&&なる存在に参照されたshared_ptr<T>だけはスタック上にTを保持する何者かに化けろと要求している??
もしかしてshared_ptr&&&なる存在に参照されたshared_ptr<T>だけはスタック上にTを保持する何者かに化けろと要求している??
760デフォルトの名無しさん
2023/11/28(火) 21:52:40.46ID:5v5wYsOr 何がやりたいのかさっぱりわからん
761デフォルトの名無しさん
2023/11/28(火) 23:17:43.17ID:Y2Vu8rdK クラスは必ずnewしないといけないと思いこんでいた昔のワイみたいな勘違いしてそう
762デフォルトの名無しさん
2023/11/28(火) 23:30:04.45ID:p7m/jx+j763デフォルトの名無しさん
2023/11/28(火) 23:38:15.09ID:2tolr/zk >>762
自動変数にあるshared_ptrは左辺値だが
自動変数にあるshared_ptrは左辺値だが
764デフォルトの名無しさん
2023/11/28(火) 23:41:06.97ID:2tolr/zk そもそも参照に対して行えるのは代入ではなく初期化だし
765デフォルトの名無しさん
2023/11/28(火) 23:43:48.38ID:QlCOA+Xa 無知ばっかりでここまで話が通じないと思わなんだ
スタックやヒープの開始アドレスがどこから始まるとか気にしたことないの?
rustの悪いとこ透けて見えたわ
スタックやヒープの開始アドレスがどこから始まるとか気にしたことないの?
rustの悪いとこ透けて見えたわ
766デフォルトの名無しさん
2023/11/28(火) 23:55:41.04ID:xnaKz8pj Rustならそんな複雑なことする必要もなく
Rustの方が優れている
ライフタイムさえ満たせば参照先がヒープかスタックか関係なく同一コードでその参照を安全に返す関数などを書くことができる
Rustの方が優れている
ライフタイムさえ満たせば参照先がヒープかスタックか関係なく同一コードでその参照を安全に返す関数などを書くことができる
767デフォルトの名無しさん
2023/11/29(水) 00:18:45.75ID:UMPQWy8o 言い訳ばかり達者で見苦しいスレだこと
768デフォルトの名無しさん
2023/11/29(水) 01:18:06.77ID:w45cg+MW769デフォルトの名無しさん
2023/11/29(水) 02:07:48.15ID:0GsI2ATG どっかで身に覚えがある流れだなと思った
たぶん要件定義の時点でなんかおかしいよ
https://mevius.5ch.net/test/read.cgi/tech/1542002113/504-523
たぶん要件定義の時点でなんかおかしいよ
https://mevius.5ch.net/test/read.cgi/tech/1542002113/504-523
770デフォルトの名無しさん
2023/11/29(水) 03:16:09.69ID:0jw/VZcC いまいちメリットがわからない
ヒープのオブジェクトなら渡す前に呼び出し側でチェックすべきなのではないのか
ヒープのオブジェクトなら渡す前に呼び出し側でチェックすべきなのではないのか
771デフォルトの名無しさん
2023/11/29(水) 03:26:29.12ID:nEUPDdEn バカ強制矯正共生強請言語Rust
772デフォルトの名無しさん
2023/11/29(水) 03:32:20.62ID:I6OxsG4L773デフォルトの名無しさん
2023/11/29(水) 06:13:09.34ID:n75oaT1g Rust推してる香具師はスタックとヒープの違いも判ってないのか
774デフォルトの名無しさん
2023/11/29(水) 06:15:55.34ID:n75oaT1g >>768 ←これはひどい
775デフォルトの名無しさん
2023/11/29(水) 07:33:14.16ID:Oshr4ESo 関数の定義で、shared ptr の参照を安全に受け付ける仮引数の定義方法とかあるの?
効率化のためにインスタンスのコピーは無しの方向で。
効率化のためにインスタンスのコピーは無しの方向で。
776デフォルトの名無しさん
2023/11/29(水) 08:59:38.65ID:w45cg+MW >>773
スタックの頭知りたかったらコマンドライン引数のアドレス取れば?ヒープの頭知りたかったら最初にsbrk(0)すれば?
スタックの頭知りたかったらコマンドライン引数のアドレス取れば?ヒープの頭知りたかったら最初にsbrk(0)すれば?
777デフォルトの名無しさん
2023/11/29(水) 09:22:10.12ID:cEfAMy5j >>765
それでコンパイル時にエラーにできるのかい?
それでコンパイル時にエラーにできるのかい?
778デフォルトの名無しさん
2023/11/29(水) 09:24:24.67ID:cEfAMy5j779デフォルトの名無しさん
2023/11/29(水) 09:29:15.22ID:w45cg+MW780デフォルトの名無しさん
2023/11/29(水) 10:51:01.40ID:I6OxsG4L rustはヒープとスタックを言語的に区別してライフタイムをトラックしてるだろ
それが欲しいならrust使えで終わり
c++では汎用的には無理
そういう要望は昔からある
それが欲しいならrust使えで終わり
c++では汎用的には無理
そういう要望は昔からある
781デフォルトの名無しさん
2023/11/29(水) 11:14:58.09ID:wOoUvEHR >>778
そりゃ、関数を実行している間は参照先が無効にならないことですな。
そりゃ、関数を実行している間は参照先が無効にならないことですな。
782デフォルトの名無しさん
2023/11/29(水) 11:26:21.99ID:JCtBk62y そもそもスタックに参照カウンタ必要か?
関数に対するスタックはプロセスに対するグローバル領域とライフタイムの考え方は同じ。
関数を抜けるまではスタックは有効だし、その関数以降に呼んだ関数が呼出元の関数を抜けた後も握り続ける状況は発生しえない
(別スレッドに共有したりヒープにCopy/Moveしない限りは)からshared_ptrにする必要がないと思うが。
つまり、
T x; // スタック
shared_ptr<T> x; // ヒープ
で型が異なるから、強引にCopy/Moveしなけりゃコンパイルエラーで検出できるし問題は起きない。
関数に対するスタックはプロセスに対するグローバル領域とライフタイムの考え方は同じ。
関数を抜けるまではスタックは有効だし、その関数以降に呼んだ関数が呼出元の関数を抜けた後も握り続ける状況は発生しえない
(別スレッドに共有したりヒープにCopy/Moveしない限りは)からshared_ptrにする必要がないと思うが。
つまり、
T x; // スタック
shared_ptr<T> x; // ヒープ
で型が異なるから、強引にCopy/Moveしなけりゃコンパイルエラーで検出できるし問題は起きない。
783デフォルトの名無しさん
2023/11/29(水) 11:39:18.60ID:I6OxsG4L >>755 はいまいちよくわからんが、ポインタを受け取る関数側でスタックかヒープを判別したいんだろ
かつてそれを解決するため手法としてregion based memory managementが開発された
rustのライフタイム管理の源流
かつてそれを解決するため手法としてregion based memory managementが開発された
rustのライフタイム管理の源流
784デフォルトの名無しさん
2023/11/29(水) 11:46:11.39ID:wioHB1Dg785デフォルトの名無しさん
2023/11/29(水) 12:57:35.03ID:/iUfnYRG 例が微妙だな。直しておくか。
void foo(shared_ptr<T>&&& p)
でshared_ptr&&&が自動変数専用参照だとすると、
shared_ptr<T> bar()
void main() {
shared_ptr<T> ptr;
foo(ptr); //自動変数だと合法
foo(bar()); //自動変数でないとエラー
}
void foo(shared_ptr<T>&&& p) {
baz(p); //次のスタックフレームに渡すのも合法
}
void foo(shared_ptr<T>&&& p)
でshared_ptr&&&が自動変数専用参照だとすると、
shared_ptr<T> bar()
void main() {
shared_ptr<T> ptr;
foo(ptr); //自動変数だと合法
foo(bar()); //自動変数でないとエラー
}
void foo(shared_ptr<T>&&& p) {
baz(p); //次のスタックフレームに渡すのも合法
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 俳優 高岡蒼佑「エジプト出身とかナイジェリア出身とかの人が、日本の代表顔して移民の事とか話してるの見るとなんか違う気がする」★2 [Anonymous★]
- 「稼ぐのよ!」高市総理が電話ガチャ切りで伝えたこと 鈴木憲和農林水産大臣が国政報告会に出席 自身が目指す農政の方針語る [煮卵★]
- 【悲報】台湾「中国にパンダ返還した馬鹿な国があるらしい🤭」 [616817505]
- 【高市悲報】片山さつき、円安進行を受けコメント「為替の変動を緊張感を持って見極める」 [888298477]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- 自民「高市の一言でこれまで積み上げてきた関係が駄目になる。言葉の重みを分かっていない。自分でまいた種は自分で刈り取ってもらう」 [256556981]
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
- 識者「『フリーパレスチナ』とかイキってる連中が台湾の話になると『中国を怒らせるな!』ってなる。ほんと左翼の正義って薄っぺらい」 [279254606]
