前スレ
C++相談室 part160
https://mevius.5ch.net/test/read.cgi/tech/1649979572/
C++相談室 part161
■ このスレッドは過去ログ倉庫に格納されています
2022/05/21(土) 21:23:29.59ID:kYXfaM+5
510デフォルトの名無しさん
2022/08/17(水) 10:06:28.08ID:JpVQLN3v スマポすなわち所有権を使ってるC++プログラマーならRustは簡単で楽勝
まともな案件ならばスマポ使っているし、急にではないけど、より安全なRustへ徐々に少しずつ移っていくんだと思うよ
まともな案件ならばスマポ使っているし、急にではないけど、より安全なRustへ徐々に少しずつ移っていくんだと思うよ
511デフォルトの名無しさん
2022/08/17(水) 10:18:24.59ID:T2QftTg0512デフォルトの名無しさん
2022/08/17(水) 10:27:35.49ID:tNGd1WjN 学習障壁でユーザー規模が縮小って
なんかCOBOL臭えな
アホフィルタを外すより待遇を改善すべきだろ
マ板でやるべき内容だな
なんかCOBOL臭えな
アホフィルタを外すより待遇を改善すべきだろ
マ板でやるべき内容だな
513デフォルトの名無しさん
2022/08/17(水) 10:30:15.50ID:VIybtmpa rustはアホでも書ける言語ではないよな
良いか悪いかはさておき
良いか悪いかはさておき
514デフォルトの名無しさん
2022/08/17(水) 10:41:14.61ID:tNGd1WjN は? 「C++が使える」アホは俺でも知ってるが
それがこの話と何か関係あるのか?
それがこの話と何か関係あるのか?
515デフォルトの名無しさん
2022/08/17(水) 10:45:01.06ID:ysQxp/zr お前が知ってるかどうかなんか知るかよ
荒らしたいだけなら少し黙ってろ
荒らしたいだけなら少し黙ってろ
516デフォルトの名無しさん
2022/08/17(水) 11:20:40.84ID:ijLXutEl きみらはなぜ些細なことですぐ喧嘩するのか・・・
517デフォルトの名無しさん
2022/08/17(水) 12:01:52.68ID:75soL8XV >>509
Rust++ですね判ります
Rust++ですね判ります
518デフォルトの名無しさん
2022/08/17(水) 12:03:04.79ID:tNGd1WjN 都合が悪くなると荒らしたいだけとか全く
C++相談室でRustを連呼するやつに言われたかねえな
C++相談室でRustを連呼するやつに言われたかねえな
519デフォルトの名無しさん
2022/08/17(水) 12:06:02.53ID:tNGd1WjN 相談者はチームで突然、Rustに変えようと言い出せば
解決につながるとでも言うのか
そんな力のあるやつが相談に来るとでも?
解決につながるとでも言うのか
そんな力のあるやつが相談に来るとでも?
520デフォルトの名無しさん
2022/08/17(水) 12:31:04.58ID:GcPebzMx シンプルで現代的なZig言語、RustやC++が複雑すぎると嘆く人の福音となるか
https://news.mynavi.jp/techplus/article/programinglanguageoftheworld-44/
https://news.mynavi.jp/techplus/article/programinglanguageoftheworld-44/
521デフォルトの名無しさん
2022/08/17(水) 12:50:49.80ID:hpgzuSC5 手動メモリ管理のZigでは無理だよ
手動メモリ管理で複雑化したときにどうしても発生している穴を防ぐことがどのIT企業でも課題となっている
手動メモリ管理で複雑化したときにどうしても発生している穴を防ぐことがどのIT企業でも課題となっている
522デフォルトの名無しさん
2022/08/17(水) 13:33:15.30ID:GcPebzMx 自動にしてもjavaみたいにメモリバカ食いしてるのも大概だけどな
523デフォルトの名無しさん
2022/08/17(水) 13:46:04.27ID:0xu2lUBy shared_ptrやunique_ptrで特に問題ないと思うが?
手動メモリ管理ってパフォーマンスでも気にしてるの?
手動メモリ管理ってパフォーマンスでも気にしてるの?
524デフォルトの名無しさん
2022/08/17(水) 14:31:54.15ID:VIybtmpa shared_ptrはほんとに良いものなのかちょっと疑問だわ
525デフォルトの名無しさん
2022/08/17(水) 15:14:20.93ID:ka8BV2dl526デフォルトの名無しさん
2022/08/17(水) 15:36:27.49ID:0xu2lUBy shared_ptrやunique_ptrで何か問題があるかな?
527デフォルトの名無しさん
2022/08/17(水) 15:37:16.76ID:DQ38VMyq いらんわ
まさかそんなくだらん話だったとは
買い被らせやがって
まさかそんなくだらん話だったとは
買い被らせやがって
528デフォルトの名無しさん
2022/08/17(水) 15:53:30.62ID:RcTU5KfW >>523
正確にはスタックフレームに積む or スマートポインタを使ってヒープに置く、だな。
shared ptrは関数呼び出し時の値渡しのインクリメントデクリメントコストが気になるところ。
スタックフレームに存在するかどうかで参照渡しか値渡しかを自動で切り替えると便利そうだけど、最適化で上手く処理してくれたっけ?
正確にはスタックフレームに積む or スマートポインタを使ってヒープに置く、だな。
shared ptrは関数呼び出し時の値渡しのインクリメントデクリメントコストが気になるところ。
スタックフレームに存在するかどうかで参照渡しか値渡しかを自動で切り替えると便利そうだけど、最適化で上手く処理してくれたっけ?
529デフォルトの名無しさん
2022/08/17(水) 15:54:04.11ID:aLEYi9j0 >>526
使い忘れと使い方ミスを常に完全にゼロにできるならばunique_ptrとshared_ptrでOK
しかし複雑化した時にミスを常にゼロにすることは不可能だと判明している
一方でC++からRustにすると以下のようなメリットが山のようにある
・Rustでは使い忘れや使い方ミスをするとコンパイラが必ず指摘してエラーとしてくれる
・Rustでは何も指定しない標準状態でC++のunique_ptrより高機能であるため記述がスッキリそして分かりやすい
・複数の参照があるとC++では参照カウントコストのかかるshared_ptrを使う必要があるがRustではそのコストを必要としない
などなど
使い忘れと使い方ミスを常に完全にゼロにできるならばunique_ptrとshared_ptrでOK
しかし複雑化した時にミスを常にゼロにすることは不可能だと判明している
一方でC++からRustにすると以下のようなメリットが山のようにある
・Rustでは使い忘れや使い方ミスをするとコンパイラが必ず指摘してエラーとしてくれる
・Rustでは何も指定しない標準状態でC++のunique_ptrより高機能であるため記述がスッキリそして分かりやすい
・複数の参照があるとC++では参照カウントコストのかかるshared_ptrを使う必要があるがRustではそのコストを必要としない
などなど
530デフォルトの名無しさん
2022/08/17(水) 16:16:02.25ID:DQ38VMyq 殺虫剤のパラドックスてやつ
531デフォルトの名無しさん
2022/08/17(水) 16:31:22.99ID:1pPRcFoT こんなとこで Rustの宣伝されてもな・・・
532デフォルトの名無しさん
2022/08/17(水) 17:56:04.99ID:IlAVLAST この手の議論って「全てのプログラマがポインタを直に操作する必要に迫られている」という詭弁に基いていて辟易するんだよな
533デフォルトの名無しさん
2022/08/17(水) 18:05:51.06ID:T2QftTg0 RustなんかやめてDelphiにしようぜ
534デフォルトの名無しさん
2022/08/17(水) 18:34:02.81ID:vS4IR+zA 最近ポインタ使わんよね
535デフォルトの名無しさん
2022/08/17(水) 18:40:18.95ID:JVW7ncQZ >>532
ある程度の大きなデータは抽象的な意味でcall by reference (pointer) により受け渡しすることになり実装的にはポインタを使わざるをえない気もする
ある程度の大きなデータは抽象的な意味でcall by reference (pointer) により受け渡しすることになり実装的にはポインタを使わざるをえない気もする
536デフォルトの名無しさん
2022/08/17(水) 19:39:41.85ID:/AaT26gR >>529
Rustの変数をunique ptrと比較している時点でRustの利点を理解出来ていない。
Rustの変数に対応するのはあくまで自動変数で、unique ptr に対応するのはBox<T>。
Rustは「高速化と自動化のためにできるだけスタックフレームを活用する」という基本的な考え方があって、そのためにあの窮屈なルールで自動変数を高機能化している。
Rustの変数がデフォルトムーブだからといって、Rustの変数はunique ptr みたいなものとするのは理解の足りない粗忽者のやることだわ。
Rustの変数をunique ptrと比較している時点でRustの利点を理解出来ていない。
Rustの変数に対応するのはあくまで自動変数で、unique ptr に対応するのはBox<T>。
Rustは「高速化と自動化のためにできるだけスタックフレームを活用する」という基本的な考え方があって、そのためにあの窮屈なルールで自動変数を高機能化している。
Rustの変数がデフォルトムーブだからといって、Rustの変数はunique ptr みたいなものとするのは理解の足りない粗忽者のやることだわ。
537デフォルトの名無しさん
2022/08/17(水) 19:59:51.79ID:07u67rxx >>536
ある意味それも正しいが現実問題じゃないな
例えばi32を10個返す関数を作るとして
その型を[i32; 10]、Box<[i32; 10]>、Vec<i32>のそれぞれにした場合に生成コードはどうなりどれを選ぶべきか考えるとBoxの意義がなああ
結局Rustではもっと最適なものを選ぶからunique_ptr相当すら使うことがレアだよな
ある意味それも正しいが現実問題じゃないな
例えばi32を10個返す関数を作るとして
その型を[i32; 10]、Box<[i32; 10]>、Vec<i32>のそれぞれにした場合に生成コードはどうなりどれを選ぶべきか考えるとBoxの意義がなああ
結局Rustではもっと最適なものを選ぶからunique_ptr相当すら使うことがレアだよな
538デフォルトの名無しさん
2022/08/17(水) 20:32:26.88ID:k/cupzFM539デフォルトの名無しさん
2022/08/17(水) 21:07:14.75ID:0xu2lUBy >>529
>・複数の参照があるとC++では参照カウントコストのかかるshared_ptrを使う必要があるが
>Rustではそのコストを必要としない
本当にコストは必要ないのかな?
本当に参照カウントしないのかな?
>・複数の参照があるとC++では参照カウントコストのかかるshared_ptrを使う必要があるが
>Rustではそのコストを必要としない
本当にコストは必要ないのかな?
本当に参照カウントしないのかな?
540デフォルトの名無しさん
2022/08/17(水) 21:11:48.18ID:0xu2lUBy >>536
unique_ptrはmemory allocationとは全く関係ありません
unique_ptrはmemory allocationとは全く関係ありません
541デフォルトの名無しさん
2022/08/17(水) 21:31:24.12ID:3OxXdiqc unique_ptrなんて自動変数と変わらんじゃろ
542デフォルトの名無しさん
2022/08/17(水) 21:37:14.43ID:IDhwUS5q >>539
Rustは借用(とライフタイム)があるから、
複数の参照が同時に必要となっても、
所有者は一人のまま何も変わらず、
複数の借用を普通に使うだけで済んでしまい、
付加コストの発生は無し。
一方でC++は、
複数の参照が同時に必要となる場合、
unique_ptrではもちろんダメなので、
shared_ptrを使わざるを得ず、
参照カウンタ増減という付加コストが発生。
Rustは借用(とライフタイム)があるから、
複数の参照が同時に必要となっても、
所有者は一人のまま何も変わらず、
複数の借用を普通に使うだけで済んでしまい、
付加コストの発生は無し。
一方でC++は、
複数の参照が同時に必要となる場合、
unique_ptrではもちろんダメなので、
shared_ptrを使わざるを得ず、
参照カウンタ増減という付加コストが発生。
543デフォルトの名無しさん
2022/08/17(水) 21:39:05.15ID:bVkA6pax544デフォルトの名無しさん
2022/08/17(水) 21:40:11.05ID:GcPebzMx そんなん設計でどうにでもなる
ありきたりの道具使ってばっかいるからアタマが退化してんだろ
ありきたりの道具使ってばっかいるからアタマが退化してんだろ
545デフォルトの名無しさん
2022/08/17(水) 21:41:54.05ID:GcPebzMx >shared_ptrを使わざるを得ず
おまえがそう決め付けているだけで、ここら辺は設計でどうにでもなる
おまえがそう決め付けているだけで、ここら辺は設計でどうにでもなる
546デフォルトの名無しさん
2022/08/17(水) 21:46:20.33ID:IDhwUS5q547デフォルトの名無しさん
2022/08/17(水) 21:51:11.86ID:eXFNTowk 同じクラスが重複して定義されたとき、
そのクラスに変数が定義されていてもコンパイルエラーにならないのはなぜですか?
関数が定義されている場合、インライン展開されないとコンパイルエラーになると思います
変数にはそのような指定が無いと思いますが、なぜエラーにならないのでしょうか?
そのクラスに変数が定義されていてもコンパイルエラーにならないのはなぜですか?
関数が定義されている場合、インライン展開されないとコンパイルエラーになると思います
変数にはそのような指定が無いと思いますが、なぜエラーにならないのでしょうか?
548デフォルトの名無しさん
2022/08/17(水) 22:07:13.27ID:vZEBwtyc 言っている意味がちょっとわからないので最小のコードを提示してもらえるとありがたい
549デフォルトの名無しさん
2022/08/17(水) 22:09:46.76ID:wEP2ktHW 単純に、同じクラスを(同じ定義で)二回定義してもエラーにならんの
便利なようで不思議だよな
便利なようで不思議だよな
550デフォルトの名無しさん
2022/08/17(水) 22:10:56.50ID:6ShnCCAk >>542 「複数の参照」が借用で済むようなものなら C++ でも T& でコスト要らなくね?
551デフォルトの名無しさん
2022/08/17(水) 22:12:24.01ID:vZEBwtyc 大抵インクルードガードで1回しか通らないようにしてたけど
(クラス定義だけなら)インクルードガードなしで二重に読んでも通るってことなのか… それはしらんかった
(クラス定義だけなら)インクルードガードなしで二重に読んでも通るってことなのか… それはしらんかった
552デフォルトの名無しさん
2022/08/17(水) 22:14:06.17ID:MGAgUcBD スレタイ読めや
だからRust信者は嫌なんだよ
だからRust信者は嫌なんだよ
553デフォルトの名無しさん
2022/08/17(水) 22:17:02.42ID:IDhwUS5q554デフォルトの名無しさん
2022/08/17(水) 22:35:58.47ID:eXFNTowk 以下のコードをヘッダに記述して複数のソースでインクルードすると、
関数fooは重複定義でコンパイルエラーになります
inline指定にすると、コンパイルは通るようになります
class myClass {
public:
void foo();
int i;
};
void myClass::foo() {
std::cout << "OK";
}
このとき変数iは何故重複定義にならないのでしょうか?
fooと同様に複数のソースで重複定義になる気がするのですが
関数fooは重複定義でコンパイルエラーになります
inline指定にすると、コンパイルは通るようになります
class myClass {
public:
void foo();
int i;
};
void myClass::foo() {
std::cout << "OK";
}
このとき変数iは何故重複定義にならないのでしょうか?
fooと同様に複数のソースで重複定義になる気がするのですが
555デフォルトの名無しさん
2022/08/17(水) 23:24:22.15ID:0xu2lUBy556はちみつ餃子 ◆8X2XSCHEME
2022/08/17(水) 23:28:24.67ID:ito9w61P >>554
int i; はメンバ宣言に該当するがそれ自体は定義ではない。
クラス定義の中にメンバ宣言があるってのがようわからん理屈だがその時点では実体が作られない、
逆に言えばその型のオブジェクトを生成するときになって初めて実体が作られるので
この段階では重複として排除する必要がない。
int i; はメンバ宣言に該当するがそれ自体は定義ではない。
クラス定義の中にメンバ宣言があるってのがようわからん理屈だがその時点では実体が作られない、
逆に言えばその型のオブジェクトを生成するときになって初めて実体が作られるので
この段階では重複として排除する必要がない。
557デフォルトの名無しさん
2022/08/17(水) 23:31:25.13ID:6ShnCCAk558デフォルトの名無しさん
2022/08/17(水) 23:51:08.75ID:eXFNTowk >>556
ありがとうございます
グローバルスコープに定義するときは、
int i;
この記述で定義になるので、複数のソースでインクルードすると当然重複定義になります
クラス内では宣言のみになるとは思いませんでした
そういうものと覚えるしかなさそうですね
ありがとうございます
グローバルスコープに定義するときは、
int i;
この記述で定義になるので、複数のソースでインクルードすると当然重複定義になります
クラス内では宣言のみになるとは思いませんでした
そういうものと覚えるしかなさそうですね
559はちみつ餃子 ◆8X2XSCHEME
2022/08/18(木) 00:07:40.00ID:KKIhvA0h560デフォルトの名無しさん
2022/08/18(木) 02:53:41.59ID:TJJ2kcCc561デフォルトの名無しさん
2022/08/18(木) 04:29:06.72ID:HNqVdbFt >>559
決定的な違い
Rustではダングリング参照するプログラムを絶対に作れない(コンパイラがエラーとする)
C++ではダングリング参照するプログラムがうっかり容易く生じてしまう(そしてコンパイラが通してしまう)
決定的な違い
Rustではダングリング参照するプログラムを絶対に作れない(コンパイラがエラーとする)
C++ではダングリング参照するプログラムがうっかり容易く生じてしまう(そしてコンパイラが通してしまう)
562デフォルトの名無しさん
2022/08/18(木) 04:53:19.13ID:X/mZUHYK >>561
話変わってるだろ
検査してくれるかどうかじゃなくて
> ・複数の参照があるとC++では参照カウントコストのかかるshared_ptrを使う必要があるがRustではそのコストを必要としない
の話だったと思うが?
話変わってるだろ
検査してくれるかどうかじゃなくて
> ・複数の参照があるとC++では参照カウントコストのかかるshared_ptrを使う必要があるがRustではそのコストを必要としない
の話だったと思うが?
563デフォルトの名無しさん
2022/08/18(木) 05:23:06.33ID:l0miaXwd >>562
それはC++で安全を保証しようとすると
複数の参照を用いるならば常にshared_ptrの使用を必須とするしか安全を保証できないのに対して
Rustは複数の参照だけなら借用のみで安全を保証できるという話ではないか
ちなみにRustでは複数の参照ではなくもっとレアケースである複数の所有が生じた時に初めてコンパイラがRcを要求する
つまりRustでは参照と所有が明白に分離されているところが大きな違いとなる
それはC++で安全を保証しようとすると
複数の参照を用いるならば常にshared_ptrの使用を必須とするしか安全を保証できないのに対して
Rustは複数の参照だけなら借用のみで安全を保証できるという話ではないか
ちなみにRustでは複数の参照ではなくもっとレアケースである複数の所有が生じた時に初めてコンパイラがRcを要求する
つまりRustでは参照と所有が明白に分離されているところが大きな違いとなる
564デフォルトの名無しさん
2022/08/18(木) 05:36:06.77ID:X/mZUHYK >>563
安全の保証をコンパイラがやるのかプログラマーがやるのかの違いなんて議論してないよ
安全の保証をコンパイラがやるのかプログラマーがやるのかの違いなんて議論してないよ
565デフォルトの名無しさん
2022/08/18(木) 07:06:14.45ID:DhI3ZTcW C++11以降のマナーでは、ダングリングは発生しない。
設計を見直すべきでは?
旧い規格、例えばDOMを実装する場合、設計を見直すことはできない。
ところで、DOMについて、C++によるGoogle Chromeの実装は素晴らしい洞察で問題を回避している。
後学のために読んでみるとよい。
設計を見直すべきでは?
旧い規格、例えばDOMを実装する場合、設計を見直すことはできない。
ところで、DOMについて、C++によるGoogle Chromeの実装は素晴らしい洞察で問題を回避している。
後学のために読んでみるとよい。
566デフォルトの名無しさん
2022/08/18(木) 07:10:02.07ID:DhI3ZTcW 如何にして安全なスパゲッティ・コードを書くかというのがRustのアプローチなら。
C++の方法論は、「安全なスパゲッティなど存在しない、素麺にしましょう」ということ。
旧式のスパゲッティ・コードを書きたい人にとってC++は役に立たない。
C++の方法論は、「安全なスパゲッティなど存在しない、素麺にしましょう」ということ。
旧式のスパゲッティ・コードを書きたい人にとってC++は役に立たない。
567デフォルトの名無しさん
2022/08/18(木) 08:09:28.79ID:ywzuYu7m まぁ、c++でももっと積極的にスタックフレームに限定するアプローチは欲しいよね。
以前にインスタンスがスタックフレームに存在することを保証するスマート変数を作ろうとしたけど、インスタンス変数をどうしても制限できなくて挫折したことがある。
スマートポインタが必ずスタックにあるのなら、スマートポインタの参照渡しとかもっと活用できるのにね。
以前にインスタンスがスタックフレームに存在することを保証するスマート変数を作ろうとしたけど、インスタンス変数をどうしても制限できなくて挫折したことがある。
スマートポインタが必ずスタックにあるのなら、スマートポインタの参照渡しとかもっと活用できるのにね。
568デフォルトの名無しさん
2022/08/18(木) 09:11:59.95ID:msbrE3Yp スタックかどうかなんてどうでもよくねえ?
機能の問題でしょ?
機能の問題でしょ?
569デフォルトの名無しさん
2022/08/18(木) 09:19:43.25ID:X/mZUHYK570デフォルトの名無しさん
2022/08/18(木) 09:41:11.96ID:zre7odKU 自動変数が嫌いな人一定数いるよね
571はちみつ餃子 ◆8X2XSCHEME
2022/08/18(木) 10:26:05.65ID:KKIhvA0h 大抵の環境でデフォルトのスタックサイズはそれほど大きくない。
数メガバイトというのは現代的な感覚では極端に小さいようにも見える。
でもまあだいたいこれで足りるし、足りるように書くのが普通なんじゃないの。
数メガバイトというのは現代的な感覚では極端に小さいようにも見える。
でもまあだいたいこれで足りるし、足りるように書くのが普通なんじゃないの。
572デフォルトの名無しさん
2022/08/18(木) 11:28:19.94ID:p/limWqp C > Nim > C++ > Rust
573デフォルトの名無しさん
2022/08/18(木) 11:29:37.71ID:p/limWqp >>569
GC要らなくなる
GC要らなくなる
574デフォルトの名無しさん
2022/08/18(木) 11:47:13.53ID:u9P7LJR3575デフォルトの名無しさん
2022/08/18(木) 11:47:44.39ID:u9P7LJR3 >>573
そりゃ全部スタック上で済むならね...
そりゃ全部スタック上で済むならね...
576はちみつ餃子 ◆8X2XSCHEME
2022/08/18(木) 12:03:37.12ID:KKIhvA0h >>574
割り当てが足りなくなれば拡張するが、その上限の設定がデフォルトでは 8MB になっている。
割り当てが足りなくなれば拡張するが、その上限の設定がデフォルトでは 8MB になっている。
577デフォルトの名無しさん
2022/08/18(木) 12:29:58.75ID:ywzuYu7m >>569
単にスタックフレームの入れ子のライフタイムを活用したいだけだな。
単にスタックフレームの入れ子のライフタイムを活用したいだけだな。
578デフォルトの名無しさん
2022/08/18(木) 12:35:06.23ID:R9m+Nq0X ポインタたくさん使う人っておじさんですよね?
実年齢か精神年齢かはともかく
実年齢か精神年齢かはともかく
579デフォルトの名無しさん
2022/08/18(木) 12:37:54.86ID:ywzuYu7m >>577
ちょっと補足。
スマートポインタがスタックにあるのなら、shared ptr の参照とかポインタみたいなヤバイのもそこそこ安全に扱える。余計なインクリメントデクリメントも発生しなくて良くなるし。
ちょっと補足。
スマートポインタがスタックにあるのなら、shared ptr の参照とかポインタみたいなヤバイのもそこそこ安全に扱える。余計なインクリメントデクリメントも発生しなくて良くなるし。
580デフォルトの名無しさん
2022/08/18(木) 12:41:39.14ID:cnxBrL/o なんでスタックである必要があるのかまったくわからん
581デフォルトの名無しさん
2022/08/18(木) 13:27:16.43ID:C4YsUD/k582デフォルトの名無しさん
2022/08/18(木) 13:29:45.98ID:KxsikMs2583デフォルトの名無しさん
2022/08/18(木) 13:34:11.90ID:AgenDKWc >>579
一見その通りだけど
関数で参照を返したい時に、その実体が呼び出し元(かそれ以前)のスタックフレーム上なのか、
それとも消え去る現在のスタック上なのか、安全を保証するために区別する情報が必要となる
そのためにはライフタイムをもっと明確化すればよく、参照が指す実体がスタック上でより深く(か同じ)ことを保証できればよい
すると更に大きな利点が生じる
実体がスタック上に無くてヒープ上に有っても、それを管理するスマポ相当がスタック上にあればライフタイムは同じとなるからだ
結局、スタック上かヒープ上かよりも、ライフタイムを明確化することが重要であると分かる
以上を言語仕様に組み込んだのがRust
一見その通りだけど
関数で参照を返したい時に、その実体が呼び出し元(かそれ以前)のスタックフレーム上なのか、
それとも消え去る現在のスタック上なのか、安全を保証するために区別する情報が必要となる
そのためにはライフタイムをもっと明確化すればよく、参照が指す実体がスタック上でより深く(か同じ)ことを保証できればよい
すると更に大きな利点が生じる
実体がスタック上に無くてヒープ上に有っても、それを管理するスマポ相当がスタック上にあればライフタイムは同じとなるからだ
結局、スタック上かヒープ上かよりも、ライフタイムを明確化することが重要であると分かる
以上を言語仕様に組み込んだのがRust
584デフォルトの名無しさん
2022/08/18(木) 13:54:28.67ID:cnxBrL/o585はちみつ餃子 ◆8X2XSCHEME
2022/08/18(木) 14:09:16.33ID:KKIhvA0h 私もそう思う。 C++ でも明確で、解釈の余地はほぼない。
その上で知ってても人は間違うというところは問題で、チェックを自動化できるように整理したという Rust の功績は大きくはある。
ルール自体の差は C++ と Rust でそれほど大きくはない。
その上で知ってても人は間違うというところは問題で、チェックを自動化できるように整理したという Rust の功績は大きくはある。
ルール自体の差は C++ と Rust でそれほど大きくはない。
586デフォルトの名無しさん
2022/08/18(木) 14:18:54.74ID:PTM9RcdX C++のライフタイムはプログラマーにとっては明確でもコンパイラにとっては明確でない
そのためC++では参照の安全性をコンパイラが保証することができない
そして複雑化した時に人間(プログラマー)はミスを無くすことが出来ない
そのためC++で書かれた多くのソフトウェアで常に穴が発生し続けている
そのためC++では参照の安全性をコンパイラが保証することができない
そして複雑化した時に人間(プログラマー)はミスを無くすことが出来ない
そのためC++で書かれた多くのソフトウェアで常に穴が発生し続けている
587デフォルトの名無しさん
2022/08/18(木) 15:34:56.12ID:KxsikMs2 unique_ptrやshared_ptrを使えば良いだけではないかな?
588はちみつ餃子 ◆8X2XSCHEME
2022/08/18(木) 16:15:40.31ID:KKIhvA0h >>587
C++ のスマートポインタはやっぱり後付け感はある。
Teratail とかの質問サイトを見てたら (コンパイル時にエラーに出来ない形で) 使い方を間違ってセグフォしてたりするのはちょくちょく有る。
コンパイラがガッツリと検査してくれる Rust はありがたいよ。
C++ のスマートポインタはやっぱり後付け感はある。
Teratail とかの質問サイトを見てたら (コンパイル時にエラーに出来ない形で) 使い方を間違ってセグフォしてたりするのはちょくちょく有る。
コンパイラがガッツリと検査してくれる Rust はありがたいよ。
589デフォルトの名無しさん
2022/08/18(木) 16:20:56.69ID:885GVGvO 無能な働き者の軌道修正には良いかもな
590デフォルトの名無しさん
2022/08/18(木) 16:27:29.27ID:9oKj6z2J 桐蔭トリプルプレーだよ
591デフォルトの名無しさん
2022/08/18(木) 16:37:31.46ID:AkD9iM7C たまにはweak_ptrのことも思い出して下さい
592デフォルトの名無しさん
2022/08/18(木) 16:59:01.63ID:4Dlj1ckV >>587
unique_ptrやshared_ptrの使い忘れや使い方ミスなどをしてもコンパイラはエラーとすることができないためC++は安全性を保証できない
他にもget()して得たポインタを関数などに渡した後にそのライフタイムを逸脱しないかなどの保証もできない
全ては人間頼みとなるため多数の穴が生じてきた
unique_ptrやshared_ptrの使い忘れや使い方ミスなどをしてもコンパイラはエラーとすることができないためC++は安全性を保証できない
他にもget()して得たポインタを関数などに渡した後にそのライフタイムを逸脱しないかなどの保証もできない
全ては人間頼みとなるため多数の穴が生じてきた
593デフォルトの名無しさん
2022/08/18(木) 19:33:28.16ID:74ku3J2B 性能厨としては何でもスタックフレームに置いて集積度を高くしたいところ。レジスタの効率とかキャッシュヒット率とか変わるだろうし。
Rustのスタックへのこだわりはいいんだけど、無駄に抽象化しているから余計に複雑になっている感じを受ける。
Rustのスタックへのこだわりはいいんだけど、無駄に抽象化しているから余計に複雑になっている感じを受ける。
594デフォルトの名無しさん
2022/08/18(木) 21:49:54.60ID:SUTQRi3H C++のスマポは言語機能じゃないから書き方長くてだるいし
外部ライブラリは当然ナマポ使ってるから結局その辺でセグフォの危険を排除できないし
オウムみたいにスマポでいいじゃん連呼してるやつは本当に使ったことあんのか?
外部ライブラリは当然ナマポ使ってるから結局その辺でセグフォの危険を排除できないし
オウムみたいにスマポでいいじゃん連呼してるやつは本当に使ったことあんのか?
595デフォルトの名無しさん
2022/08/18(木) 21:58:35.30ID:KxsikMs2 >>592
使えば?と私は提案してるので「使い忘れ」は論外として
「使い方ミス」はどんなミスでしょうか?
ミスのしようがないほど単純だと思います
Rustのコンパイル時にチェックしようという設計は
もちろん良いと思いますよ
使えば?と私は提案してるので「使い忘れ」は論外として
「使い方ミス」はどんなミスでしょうか?
ミスのしようがないほど単純だと思います
Rustのコンパイル時にチェックしようという設計は
もちろん良いと思いますよ
596デフォルトの名無しさん
2022/08/18(木) 22:02:08.08ID:KxsikMs2597デフォルトの名無しさん
2022/08/18(木) 22:07:53.92ID:0oaFEclW スマポにハンドルを突っ込む方法はないですかねえ‥‥
598デフォルトの名無しさん
2022/08/18(木) 22:12:02.34ID:3gZlWdNz >>596
君のような勘違い自信過剰な人がうっかりミスを起こして問題を引き起こしてきた
チェックを人間に依存している限りミスは必ず発生する
ソース記事
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
グーグルによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに起因するという。
同様にマイクロソフトも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関するバグに起因すると述べている。
C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と
君のような勘違い自信過剰な人がうっかりミスを起こして問題を引き起こしてきた
チェックを人間に依存している限りミスは必ず発生する
ソース記事
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
グーグルによればAndroidに存在した深刻なセキュリティー脆弱性の70%近くがメモリー安全に関するバグに起因するという。
同様にマイクロソフトも、同社製品に存在したセキュリティー脆弱性の70%がメモリー安全に関するバグに起因すると述べている。
C/C++を使う限りセキュリティー脆弱性を根絶するのは不可能と
599デフォルトの名無しさん
2022/08/18(木) 22:16:42.90ID:SUTQRi3H 使われないシステムってバグ出ないんだよね
600デフォルトの名無しさん
2022/08/18(木) 22:17:29.31ID:KxsikMs2601デフォルトの名無しさん
2022/08/18(木) 22:21:49.94ID:KxsikMs2 >>598
$ wget 'https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.19.1.tar.xz'
$ tar xJf linux-5.19.1.tar.xz
$ find linux-5.19.1 -name *.rs | wc -l
0
2021年4月30日の記事だけどまだコミットがないようだが?
Rustのsuffixってひょっとしてrsじゃない?
$ wget 'https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.19.1.tar.xz'
$ tar xJf linux-5.19.1.tar.xz
$ find linux-5.19.1 -name *.rs | wc -l
0
2021年4月30日の記事だけどまだコミットがないようだが?
Rustのsuffixってひょっとしてrsじゃない?
602デフォルトの名無しさん
2022/08/18(木) 22:29:53.88ID:6c/4Q98o >>600
それは貴方がアホだからミスに気付いていない可能性、使われないからバグが未発見なだけの可能性、単純なことしかしていないだけの可能性、…
複雑化すると、どんなにベテランでも、多数の人々がコードをチェックしていても、メモリ管理ミスが現実に起きている現実を受け入れましょ
それは貴方がアホだからミスに気付いていない可能性、使われないからバグが未発見なだけの可能性、単純なことしかしていないだけの可能性、…
複雑化すると、どんなにベテランでも、多数の人々がコードをチェックしていても、メモリ管理ミスが現実に起きている現実を受け入れましょ
603デフォルトの名無しさん
2022/08/18(木) 22:43:58.49ID:KxsikMs2604デフォルトの名無しさん
2022/08/18(木) 22:54:56.26ID:MfNSDyn2 誰もお前なんかに興味無い訳だが
605デフォルトの名無しさん
2022/08/18(木) 23:09:02.07ID:KxsikMs2606デフォルトの名無しさん
2022/08/18(木) 23:31:07.48ID:RTRtwr2z どんな複雑なケースでも一度もミスをしたことがない!今後も絶対にミスをしない!
と言ってる人を信頼できるわけがない
と言ってる人を信頼できるわけがない
607デフォルトの名無しさん
2022/08/18(木) 23:38:25.32ID:KxsikMs2608デフォルトの名無しさん
2022/08/18(木) 23:42:25.87ID:KxsikMs2 本当にunique_ptrやshared_ptrでミスするかい?
信じられないほど単純なクラスだと思うけど
>>592の「使い方ミス」って何なの?
getで中身取り出して云々は割とあり得るんだろーけど
それはunique_ptrやshared_ptrの外の出来事だし
信じられないほど単純なクラスだと思うけど
>>592の「使い方ミス」って何なの?
getで中身取り出して云々は割とあり得るんだろーけど
それはunique_ptrやshared_ptrの外の出来事だし
609デフォルトの名無しさん
2022/08/18(木) 23:58:49.20ID:B1ZNmtqG もちろんgetを使った時点でスマポ管轄外となり保証が全く無くなるが
スマポ自体における使い忘れや使い間違いなども色々とあるぜ
例えば
C++11スマートポインタで避けるべき過ち Top10
https://postd.cc/top-10-dumb-mistakes-avoid-c-11-smart-pointers/
スマポ自体における使い忘れや使い間違いなども色々とあるぜ
例えば
C++11スマートポインタで避けるべき過ち Top10
https://postd.cc/top-10-dumb-mistakes-avoid-c-11-smart-pointers/
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 【映画】『クレヨンしんちゃん』 中国で公開延期 対日報復、エンタメに波及 [冬月記者★]
- お前らってやっぱ一生底辺なの?
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- ワイ、ゴスロリ着るんだがどう? ★2
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- ウッドデッキで調子こいてたやついたじゃん
- 🦉エッホエッホ アンパンマンは猫舌って伝えなきゃ
