過去スレ
オブジェクト指向はオワコン (2023/08/26〜)
https://mevius.5ch.io/test/read.cgi/tech/1721393540/
オブジェクト指向はオワコン? (2024/07/19〜)
https://mevius.5ch.io/test/read.cgi/tech/1721393540/
オブジェクト指向はオワコン? part2 (2026/08/13〜)
https://mevius.5ch.io/test/read.cgi/tech/1786599483/
オブジェクト指向はオワコン? part3 (2026/08/26〜)
https://mevius.5ch.io/test/read.cgi/tech/1787712923/
オブジェクト指向はオワコン? part4
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2026/09/24(木) 21:48:24.69ID:R0E4hCxI685デフォルトの名無しさん
2026/10/19(月) 09:19:07.40ID:AZ76nU8n 動的ディスパッチをインライン化できないと思っているのはRustを使っている人たちのあいだでだけ蔓延しているガセネタだよねってこと
686デフォルトの名無しさん
2026/10/19(月) 09:20:10.31ID:NzcVQ0bS >>683
アセンブラでやってたことを高級言語で使いやすくしただけだからな。
アセンブラでやってたことを高級言語で使いやすくしただけだからな。
687デフォルトの名無しさん
2026/10/19(月) 09:21:10.14ID:EzvDGDeE688デフォルトの名無しさん
2026/10/19(月) 09:25:37.98ID:r87HkvPw689デフォルトの名無しさん
2026/10/19(月) 09:27:30.95ID:eXYhdXMm690デフォルトの名無しさん
2026/10/19(月) 09:35:32.41ID:fE/cMKur PGO(profile guided optimization)って、たとえば仮想関数テーブルの飛び先がA, B, Cの3つで実行時に90%とか95%はAに飛ぶみたいな偏りがある場合に、BやCのケースについては条件分岐でガードした上で、Aの飛び先のコードをインラインで埋め込むみたいなイメージでしょ。
部分的なインライン化ではあるのでインライン化による最適化の概念に含まれるといってもいいとは思うが、条件分岐が追加される点でインライン化といったときにばっと思いつくイメージとはちょっと違うかな。
部分的なインライン化ではあるのでインライン化による最適化の概念に含まれるといってもいいとは思うが、条件分岐が追加される点でインライン化といったときにばっと思いつくイメージとはちょっと違うかな。
691デフォルトの名無しさん
2026/10/19(月) 09:43:36.42ID:y+tk1iRY 分岐後の部分には動的ディスパッチが存在しないからインライン最適化できるのは当たり前
それを動的ディスパッチでもインライン最適化できると主張するのはペテン師
それを動的ディスパッチでもインライン最適化できると主張するのはペテン師
692デフォルトの名無しさん
2026/10/19(月) 09:47:08.02ID:DD5Zt42z Rust は struct+Trait でオブジェクト指向するより
enum でオブジェクト指向した方が良い
class指向ではなくenum指向言語
どうせ部分コンパイル分割コンパイルしたくても
ほとんどのケースで全体再コンパイルになる糞言語Rust
enum でオブジェクト指向した方が良い
class指向ではなくenum指向言語
どうせ部分コンパイル分割コンパイルしたくても
ほとんどのケースで全体再コンパイルになる糞言語Rust
693デフォルトの名無しさん
2026/10/19(月) 10:07:23.43ID:BFIs/Alg694デフォルトの名無しさん
2026/10/19(月) 10:37:50.32ID:P4W9+pa1 性的ディスパッチと書くと途端に椎名林檎臭が漂うな
695デフォルトの名無しさん
2026/10/19(月) 10:41:10.02ID:EzvDGDeE696デフォルトの名無しさん
2026/10/19(月) 11:36:54.90ID:AZ76nU8n >>691
深呼吸して冷静になって聞いてもらいたいんだけど、最適化うんぬんいぜんに君が言ってることは論理的に間違ってる
> 分岐後の部分には動的ディスパッチが存在しないからインライン最適化できるのは当たり前
> それを動的ディスパッチでもインライン最適化できると主張するのはペテン師
・動的ディスパッチが存在することをDと置く
・インライン最適化できることをOと置く
> 動的ディスパッチが存在しないからインライン最適化できる
¬D⇒O
> 動的ディスパッチでもインライン最適化できると主張するのはペテン師
D⇒¬O
¬D⇒Oが真であってもD⇒¬Oが真になるとは限らないので
推論として妥当ではないんよ
¬D⇒OとD⇒¬Oの関係は一般に「裏」と言われる
「元の命題が真でも、裏が真とは限らない」
と覚えて帰ってください
プログラマで論理が苦手な人は珍しいね
深呼吸して冷静になって聞いてもらいたいんだけど、最適化うんぬんいぜんに君が言ってることは論理的に間違ってる
> 分岐後の部分には動的ディスパッチが存在しないからインライン最適化できるのは当たり前
> それを動的ディスパッチでもインライン最適化できると主張するのはペテン師
・動的ディスパッチが存在することをDと置く
・インライン最適化できることをOと置く
> 動的ディスパッチが存在しないからインライン最適化できる
¬D⇒O
> 動的ディスパッチでもインライン最適化できると主張するのはペテン師
D⇒¬O
¬D⇒Oが真であってもD⇒¬Oが真になるとは限らないので
推論として妥当ではないんよ
¬D⇒OとD⇒¬Oの関係は一般に「裏」と言われる
「元の命題が真でも、裏が真とは限らない」
と覚えて帰ってください
プログラマで論理が苦手な人は珍しいね
697デフォルトの名無しさん
2026/10/19(月) 12:55:51.86ID:xRbtBnLz いや動的ディスパッチでもインライン化できるはペテン師じゃん
誇大広告じゃん
誇大広告じゃん
698デフォルトの名無しさん
2026/10/19(月) 12:58:30.57ID:PABToVeY プログラム言語上は(1)動的ディスパッチであってもJITを含むコンパイラでインライン化されたものは「静的ディスパッチ化」されてるので(2)動的ディスパッチではないってことになってんだろ
ペテン師は(1)と(2)をわざと区別しない
ペテン師は(1)と(2)をわざと区別しない
699デフォルトの名無しさん
2026/10/19(月) 13:02:57.93ID:EzvDGDeE やっぱり静的ディスパッチに書き換えられるんだなw
700デフォルトの名無しさん
2026/10/19(月) 13:13:01.14ID:AZ76nU8n >>698
1. 静的ディスパッチ→インライン化 (Rustがコンパイル時に行う最適化)
2. 動的ディスパッチ→インライン化 (JITが実行時に行う最適化)
3. 動的ディスパッチ→静的ディスパッチ化 (JITが実行時に行う最適化)
の3つがあってRustでは1.しかできないから
インライン化には静的ディスパッチ化が必要なんだと思ってるんでしょ?
君の認識は完全に間違ってる
1. 静的ディスパッチ→インライン化 (Rustがコンパイル時に行う最適化)
2. 動的ディスパッチ→インライン化 (JITが実行時に行う最適化)
3. 動的ディスパッチ→静的ディスパッチ化 (JITが実行時に行う最適化)
の3つがあってRustでは1.しかできないから
インライン化には静的ディスパッチ化が必要なんだと思ってるんでしょ?
君の認識は完全に間違ってる
701デフォルトの名無しさん
2026/10/19(月) 13:14:57.91ID:AZ76nU8n 動的ディスパッチはインライン化できないことのソースを示すことはできる?
何を根拠に君がそう言ってるのか教えてもらえればコメントするよ
何を根拠に君がそう言ってるのか教えてもらえればコメントするよ
702デフォルトの名無しさん
2026/10/19(月) 13:51:16.13ID:AZ76nU8n703デフォルトの名無しさん
2026/10/19(月) 14:03:49.18ID:1JszpLqv >>699
動的ディスパッチを静的ディスパッチに書き換えることは絶対にできない
動的ディスパッチを静的ディスパッチに書き換えることは絶対にできない
704デフォルトの名無しさん
2026/10/19(月) 14:05:26.15ID:1JszpLqv705デフォルトの名無しさん
2026/10/19(月) 14:05:28.53ID:AZ76nU8n ああ、人間ハルシネーションの人とは別人か
706デフォルトの名無しさん
2026/10/19(月) 14:31:33.79ID:EzvDGDeE 型が決定すればいいんでしょ?
707デフォルトの名無しさん
2026/10/19(月) 14:49:57.80ID:xRbtBnLz RUSTもPGO使えば1,2,3できない?
708デフォルトの名無しさん
2026/10/19(月) 14:53:52.58ID:xRbtBnLz 動的ディスパッチ自体は必要だけど使い方次第ではコストがかかるんだから
オブジェクト指向のために使うってよりはどこで動的ディスパッチをすると最も効率よい処理ができるかで考えたいわ
だからクラスは嫌い
オブジェクト指向のために使うってよりはどこで動的ディスパッチをすると最も効率よい処理ができるかで考えたいわ
だからクラスは嫌い
709デフォルトの名無しさん
2026/10/19(月) 15:03:34.85ID:D50Be/3i PGO(profile guided optimization)を用いても
どんな言語でも動的ディスパッチを静的ディスパッチにすることはできません
動的ディスパッチを跨がるインライン最適化もできません
どんな言語でも動的ディスパッチを静的ディスパッチにすることはできません
動的ディスパッチを跨がるインライン最適化もできません
710デフォルトの名無しさん
2026/10/19(月) 15:10:40.90ID:xRbtBnLz まあif文もだめよってことならそうだろう
インライン化ならif文は許されるイメージが一般的なんじゃないか、俺はif文も少なくしたいけど、少ないに越したことはない
インライン化ならif文は許されるイメージが一般的なんじゃないか、俺はif文も少なくしたいけど、少ないに越したことはない
711デフォルトの名無しさん
2026/10/19(月) 15:13:43.35ID:xRbtBnLz そもそもif文すら許されないなら否ディスパッチじゃない?
712デフォルトの名無しさん
2026/10/19(月) 15:24:04.10ID:xRbtBnLz 動的か静的化さかってvtable見るか見ないかの違いじゃないの?
713デフォルトの名無しさん
2026/10/19(月) 15:28:26.07ID:xRbtBnLz そもそもメソッドを呼ぶごときにいちいち選択を強いるオブジェクト指向ってどうなのよ?ってのがデータ指向派の主張だけど
714デフォルトの名無しさん
2026/10/19(月) 15:35:38.26ID:auTjdiUX715デフォルトの名無しさん
2026/10/19(月) 15:53:34.67ID:xRbtBnLz716デフォルトの名無しさん
2026/10/19(月) 16:03:19.34ID:xRbtBnLz 選択をさせないなら関数のオーバーロードでええやん
クラスなんていらん構造体でよい
クラスなんていらん構造体でよい
717デフォルトの名無しさん
2026/10/19(月) 16:07:18.05ID:xRbtBnLz 型判定はしかるべきタイミングで行う
それはコントロールが必要なことだから
それはコントロールが必要なことだから
718デフォルトの名無しさん
2026/10/19(月) 16:38:11.23ID:EzvDGDeE 静的に決まらない型を使うからいけないんだろ?
719デフォルトの名無しさん
2026/10/19(月) 17:53:55.96ID:NzcVQ0bS オブジェクト指向ってプログラムコード量を減らして可読性を上げるためのもので実装はいろいろあって良いんだよ。
ただそれでメモリバカ食いで爆遅になったら嫌だという人のためにC++とかの中途半端な言語が存在してる。
ただそれでメモリバカ食いで爆遅になったら嫌だという人のためにC++とかの中途半端な言語が存在してる。
720デフォルトの名無しさん
2026/10/19(月) 18:19:34.57ID:zfrBjjFY >>709
動的ディスパッチでもインライン化できるということは納得したみたいだね
動的ディスパッチでもインライン化できるということは納得したみたいだね
721デフォルトの名無しさん
2026/10/19(月) 18:33:08.27ID:jKHy1HDW JITコンパイラがインライン展開後の分岐除去とか定数伝播まで面倒見てくれるならOK
静的ポリモーフィズムでコンパイル時に時間使った方がいいとは思うけど
静的ポリモーフィズムでコンパイル時に時間使った方がいいとは思うけど
722デフォルトの名無しさん
2026/10/19(月) 18:35:46.66ID:p4vPN8wR723デフォルトの名無しさん
2026/10/19(月) 19:54:33.44ID:EzvDGDeE まだやってらw
動的ディスパッチも分解して分岐にしたらいいんだろ?
動的ディスパッチも分解して分岐にしたらいいんだろ?
724デフォルトの名無しさん
2026/10/19(月) 20:36:38.73ID:xRbtBnLz 静的だろうが動的だろうがメソッドの呼び出しと何のメソッドを呼び出すかの判定は別の話
そこを一緒にまとめようとするのはよくないねえ
そこを一緒にまとめようとするのはよくないねえ
725デフォルトの名無しさん
2026/10/19(月) 21:27:26.84ID:NzcVQ0bS 分岐先アドレスをプログラムコードから取得するのとメモリから取得するのとでどれだけ速度差が出るのかねえ。
特にx86プロセッサは高いメモリアクセス頻度に対応した造りになってるから。
特にx86プロセッサは高いメモリアクセス頻度に対応した造りになってるから。
726デフォルトの名無しさん
2026/10/19(月) 21:35:14.18ID:E2obgzGt >>723
動的ディスパッチは大量分岐が起こるから各型用のメソッド関数アドレステーブルを見に行く仕組み
動的ディスパッチは大量分岐が起こるから各型用のメソッド関数アドレステーブルを見に行く仕組み
727デフォルトの名無しさん
2026/10/19(月) 22:37:25.09ID:PUvDprgA メリヤスパッチの股引を履いてそうだな
728デフォルトの名無しさん
2026/10/19(月) 23:01:14.23ID:PIQY2XkO729デフォルトの名無しさん
2026/10/20(火) 06:24:38.05ID:5977swaw >>695
i に 0 と 1 が入ってるとき
let hoge = if i == 0 { false } else { true }; が条件分岐
let hoge = [false, true][i]; が関数ディスパッチ
i に 0 と 1 が入ってるとき
let hoge = if i == 0 { false } else { true }; が条件分岐
let hoge = [false, true][i]; が関数ディスパッチ
730デフォルトの名無しさん
2026/10/20(火) 06:35:28.12ID:fIXXkyXJ 現実には多数の候補があるから
オブジェクトにvtableへのポインタを持たせてる
vtableは各メソッド関数のアドレスの配列テーブル
そうすることで各オブジェクト毎にポリモーフィズムの正しいメソッド関数が呼ばれる
オブジェクトにvtableへのポインタを持たせてる
vtableは各メソッド関数のアドレスの配列テーブル
そうすることで各オブジェクト毎にポリモーフィズムの正しいメソッド関数が呼ばれる
731デフォルトの名無しさん
2026/10/20(火) 07:33:27.66ID:1NCZKuW0 データとしてくるからデータキャッシュを汚す
732デフォルトの名無しさん
2026/10/20(火) 07:37:55.86ID:1NCZKuW0 そもそもメモリを読むってのはクソ重い
733デフォルトの名無しさん
2026/10/20(火) 08:04:55.35ID:Df8PDXeH お前らなんで最適化の話しかしてないんだw
早計な最適化は諸悪の根源だぞと
早計な最適化は諸悪の根源だぞと
734デフォルトの名無しさん
2026/10/20(火) 08:15:35.92ID:1NCZKuW0 最適化というより構造的弱点
俺はメソッドの選択はデータ側の都合に合わせるのがプログラムでは良いというデータ指向派
俺はメソッドの選択はデータ側の都合に合わせるのがプログラムでは良いというデータ指向派
735デフォルトの名無しさん
2026/10/20(火) 08:17:59.48ID:1NCZKuW0 あと抽象化はプログラム言語にはもういらないというイーロン・マスク派
736デフォルトの名無しさん
2026/10/20(火) 08:38:45.96ID:Df8PDXeH たしかにねえ、抽象化は人間が物事を理解した気になるためのものでしかない気がするわ、抽象化に拘ると伸びしろがなくなるような気はしている
737デフォルトの名無しさん
2026/10/20(火) 09:12:35.89ID:aaHA5wR4738デフォルトの名無しさん
2026/10/20(火) 10:02:39.64ID:5cvTI10t 抽象化がいらないってことはないが、まあその手のモジュールはもうそろってるって状況ではあるかもね
739デフォルトの名無しさん
2026/10/20(火) 11:12:17.43ID:6/sDIAhC 抽象化なんて、動いた気になるだけの危うい技法だもの
740デフォルトの名無しさん
2026/10/20(火) 11:37:32.21ID:PrvnUlyT741デフォルトの名無しさん
2026/10/20(火) 12:05:34.01ID:rUOPfdsj コンパイラのために人間が頑張る言語
それがRust
それがRust
742デフォルトの名無しさん
2026/10/20(火) 12:24:07.74ID:nm2sc+yQ743デフォルトの名無しさん
2026/10/20(火) 12:35:18.14ID:aaHA5wR4 両方ともしんどい言語だろ
人間には優しくない
人間には優しくない
744デフォルトの名無しさん
2026/10/20(火) 12:53:04.91ID:5aGvvaf/ Rustはめっちゃ楽
745デフォルトの名無しさん
2026/10/20(火) 13:22:32.09ID:B7Mvj7nE class原理主義プログラマーにとってclassのない言語はどれも難しく感じるらしいよ
class継承が使えないとプログラミングできない重症な人たちまでいるみたい
class継承が使えないとプログラミングできない重症な人たちまでいるみたい
746デフォルトの名無しさん
2026/10/20(火) 13:37:06.04ID:Df8PDXeH Rustは参照カウントとか循環参照とかを知っていて慎重にプログラムを組まないとListを安全に実装できないがJavaは何も考えずに実装してもメモリリークすることがない、そういう意味ではRustはしんどい
Javaでネイティブメモリを使うコードのメモリ管理をやろうとするとtry-with-resourceを使って慎重に実装しないといけないがRustは何も考えずに実装しても解放漏れがない
何事も一長一短
Javaでネイティブメモリを使うコードのメモリ管理をやろうとするとtry-with-resourceを使って慎重に実装しないといけないがRustは何も考えずに実装しても解放漏れがない
何事も一長一短
747デフォルトの名無しさん
2026/10/20(火) 13:37:46.81ID:Df8PDXeH >>745
クラスとかそういうの関係なく君は何かプログラム書ける人なの?
クラスとかそういうの関係なく君は何かプログラム書ける人なの?
748デフォルトの名無しさん
2026/10/20(火) 14:25:36.16ID:aXmAoNpB 構造化すら無いイニシエのBASICユーザーだけど
クラスあんのは本当に書きやすいよ
クラスあんのは本当に書きやすいよ
749デフォルトの名無しさん
2026/10/20(火) 15:06:24.23ID:rSxA0oNf750デフォルトの名無しさん
2026/10/20(火) 16:34:50.28ID:llWwDBBC >>749
pollすれば進むから他より自然に理解しやすい
pollすれば進むから他より自然に理解しやすい
751デフォルトの名無しさん
2026/10/20(火) 16:41:05.39ID:SDZwkMLh >>745
javascriptのprototypeもあれはあれで良かったが結局class導入されちゃったし馬鹿しか使わないんだろうな
javascriptのprototypeもあれはあれで良かったが結局class導入されちゃったし馬鹿しか使わないんだろうな
752デフォルトの名無しさん
2026/10/20(火) 16:58:30.80ID:Suu8369r ダメなプログラマーかどうか判別しやすい
クラスを持たない言語が多数派だけどそれらを使えない患者
クラスを持たない言語が多数派だけどそれらを使えない患者
753デフォルトの名無しさん
2026/10/20(火) 20:02:31.10ID:Df8PDXeH そんなの判別してどうすんだよ──
754デフォルトの名無しさん
2026/10/20(火) 20:20:15.87ID:aaHA5wR4 オナニーのオカズにでもすんだろ
変態の考えは理解できん
変態の考えは理解できん
755デフォルトの名無しさん
2026/10/20(火) 20:32:20.52ID:/Lex0iQ1 クラス継承が問題児なだけであってクラス自体は中立なんだよ
756デフォルトの名無しさん
2026/10/20(火) 21:56:56.91ID:vNTgioPr 自分は悪くない道具が悪い!
757デフォルトの名無しさん
2026/10/20(火) 22:19:22.16ID:aQwBwJAA >>746
Rustでも循環リストはもちろん循環グラフも簡単に安全に扱えてメモリリークしないですよ
例えば有向グラフ
fn main() {
let nodes = Arena::new();
let node0 = nodes.new_node(123); // ノード作成
node0.add_adj(node0); // 自分自身を指して自己循環
let node1 = nodes.new_node(456);
node0.add_adj(node1);
let node2 = nodes.new_node(789);
node1.add_adj(node2);
node2.add_adj(node0); // node0 - node1 - node2 - node0 長さ3循環
}
Rustでも循環リストはもちろん循環グラフも簡単に安全に扱えてメモリリークしないですよ
例えば有向グラフ
fn main() {
let nodes = Arena::new();
let node0 = nodes.new_node(123); // ノード作成
node0.add_adj(node0); // 自分自身を指して自己循環
let node1 = nodes.new_node(456);
node0.add_adj(node1);
let node2 = nodes.new_node(789);
node1.add_adj(node2);
node2.add_adj(node0); // node0 - node1 - node2 - node0 長さ3循環
}
758デフォルトの名無しさん
2026/10/21(水) 06:33:08.37ID:ZcobccRE なんでそんなにRust推しするのか
不思議な心理だ
不思議な心理だ
759デフォルトの名無しさん
2026/10/21(水) 07:19:32.43ID:ffTu/Fyf 読み書きしやすくて速いからでしょ
760デフォルトの名無しさん
2026/10/21(水) 07:28:44.03ID:Pfwo+u4r >>757
AIによるとその実装はメモリがArenaで管理されてArenaが破棄されるまですべてのノードのメモリがアリーナで保持されるからノードの追加と削除を繰り返すとメモリ使用量が増え続けるそうだよ、ノードを削除してもメモリが解放されないならそれはもう緩いリークなんじゃないかな安全とは思えないな
AIによるとその実装はメモリがArenaで管理されてArenaが破棄されるまですべてのノードのメモリがアリーナで保持されるからノードの追加と削除を繰り返すとメモリ使用量が増え続けるそうだよ、ノードを削除してもメモリが解放されないならそれはもう緩いリークなんじゃないかな安全とは思えないな
761デフォルトの名無しさん
2026/10/21(水) 07:57:40.87ID:B7mr9koB762デフォルトの名無しさん
2026/10/21(水) 08:02:13.00ID:Pfwo+u4r763デフォルトの名無しさん
2026/10/21(水) 08:05:13.57ID:Pfwo+u4r > まとめてメモリ解放する
> そして解放されることをメモリリークと呼ぶ人はいない
程度によるんじゃないかな、プロセスが終了したらメモリは解放されるわけだし
まとめて解放されるからメモリリークじゃないと言い出したら
メモリリークはこの世に存在しなくなる
不要になったメモリが意図せず残り続けることをメモリリークというなら
>>757は緩いメモリリークだよね
> そして解放されることをメモリリークと呼ぶ人はいない
程度によるんじゃないかな、プロセスが終了したらメモリは解放されるわけだし
まとめて解放されるからメモリリークじゃないと言い出したら
メモリリークはこの世に存在しなくなる
不要になったメモリが意図せず残り続けることをメモリリークというなら
>>757は緩いメモリリークだよね
764デフォルトの名無しさん
2026/10/21(水) 08:10:12.32ID:CrS9Elv0 なぜGC言語はメモリ使用量が多いのかというと
そういう意味でのメモリリークをし続けているためだよ
たまに掃除GCするけど掃除のためにも余分にメモリを消費して使っていないメモリ領域が残る
そういう意味でのメモリリークをし続けているためだよ
たまに掃除GCするけど掃除のためにも余分にメモリを消費して使っていないメモリ領域が残る
765デフォルトの名無しさん
2026/10/21(水) 08:11:21.78ID:3MCUKmM0 不要になったメモリーが解放されない事をメモリーリークって言う
の間違いだよね?
の間違いだよね?
766デフォルトの名無しさん
2026/10/21(水) 08:16:06.02ID:Pfwo+u4r767デフォルトの名無しさん
2026/10/21(水) 08:17:54.95ID:8pXXxRGr おまえらアホだな
メモリはOSに返却しない限りメモリ管理ランタイムが保持し続けるんだぞ
解放したと思い込んでるだけで現実には未使用中フラグが付けられるだけだ
メモリはOSに返却しない限りメモリ管理ランタイムが保持し続けるんだぞ
解放したと思い込んでるだけで現実には未使用中フラグが付けられるだけだ
768デフォルトの名無しさん
2026/10/21(水) 08:20:28.93ID:TH7WhfzJ クラスと型の違いって何かな?
Rustにもスーパートレイトといった継承みたいなものがあるし、何を持ってクラスと型の違いとするんかな?
Rustにもスーパートレイトといった継承みたいなものがあるし、何を持ってクラスと型の違いとするんかな?
769デフォルトの名無しさん
2026/10/21(水) 08:23:25.26ID:Pfwo+u4r Rustではslabを使えば良いんだが
https://github.com/GallagherCommaJack/linked-slab/blob/master/src/lib.rs
> 慎重にプログラムを組まないとListを安全に実装できない
な、このとおりだろ
https://github.com/GallagherCommaJack/linked-slab/blob/master/src/lib.rs
> 慎重にプログラムを組まないとListを安全に実装できない
な、このとおりだろ
770デフォルトの名無しさん
2026/10/21(水) 08:24:29.14ID:3MCUKmM0 同じだよ
771デフォルトの名無しさん
2026/10/21(水) 08:30:35.57ID:yHSaSITY >>766
GCの有無に関係なくArenaをサポートしているプログラミング言語が多い理由は効率が非常に良いためです
Arenaでは部分返却はせずに使い終えるときに一気にメモリを解放します
GCよりもとても効率的なのでGC言語でもArenaをサポートしているのはそのためです
GCの有無に関係なくArenaをサポートしているプログラミング言語が多い理由は効率が非常に良いためです
Arenaでは部分返却はせずに使い終えるときに一気にメモリを解放します
GCよりもとても効率的なのでGC言語でもArenaをサポートしているのはそのためです
772デフォルトの名無しさん
2026/10/21(水) 08:46:25.27ID:Pfwo+u4r >>767
話を整理しよう
・OSのメモリ
・ランタイムのメモリ
・オブジェクトのメモリ
これらがあって
・OSのメモリがランタイムに割り当てられる
・ランタイムのメモリがオブジェクトに割り当てられる
という関係のときに
(A)オブジェクトのメモリがランタイムに返却されないこと
(B)ランタイムのメモリがOSに返却されないこと
があって
私は(A)をメモリリークと呼んでいる
話を整理しよう
・OSのメモリ
・ランタイムのメモリ
・オブジェクトのメモリ
これらがあって
・OSのメモリがランタイムに割り当てられる
・ランタイムのメモリがオブジェクトに割り当てられる
という関係のときに
(A)オブジェクトのメモリがランタイムに返却されないこと
(B)ランタイムのメモリがOSに返却されないこと
があって
私は(A)をメモリリークと呼んでいる
773デフォルトの名無しさん
2026/10/21(水) 08:50:08.76ID:dFxB7Ozh サーバー系もArenaと相性良いんだよ
リクエストが来たらArena作ってそこで色んなメモリ使いながら色んな処理
最後にレスポンス返したらArenaまとめて解放がどの言語でも最も高速なの
リクエストが来たらArena作ってそこで色んなメモリ使いながら色んな処理
最後にレスポンス返したらArenaまとめて解放がどの言語でも最も高速なの
774デフォルトの名無しさん
2026/10/21(水) 08:56:41.35ID:Pfwo+u4r >>771
RustになぜArenaがあるのかを私は疑問に思っていないのでArenaがサポートされている理由を説明されても「お、おぅ!」としか私は言えないわけですが、RustにはArenaもあればSlab、SlotMap、Rcもありますね、選択肢は多い、しかし、その選択肢の多さがRustにおいてListの実装を難しくしている面がありますね、プログラマが知識を持ってユースケースを適切に判断して正しい選択をしないと安全なプログラムを書くことができない
それがRustのしんどいところということです
RustになぜArenaがあるのかを私は疑問に思っていないのでArenaがサポートされている理由を説明されても「お、おぅ!」としか私は言えないわけですが、RustにはArenaもあればSlab、SlotMap、Rcもありますね、選択肢は多い、しかし、その選択肢の多さがRustにおいてListの実装を難しくしている面がありますね、プログラマが知識を持ってユースケースを適切に判断して正しい選択をしないと安全なプログラムを書くことができない
それがRustのしんどいところということです
775デフォルトの名無しさん
2026/10/21(水) 09:05:58.54ID:v5Cazw2u ListはPythonでは伸び縮みする配列のことだけど自作するモノ好きはいないよ
Python以外でもライブラリにあるでしょ
Python以外でもライブラリにあるでしょ
776デフォルトの名無しさん
2026/10/21(水) 09:14:53.12ID:Pfwo+u4r Listはしんどいところがあることを説明するための例としてあげただけ
Listがあると言われても今日は気温が30℃になるそうだからみなさま体調にお気をつけてお過ごしくださいとしか思わないわ
Listがあると言われても今日は気温が30℃になるそうだからみなさま体調にお気をつけてお過ごしくださいとしか思わないわ
777デフォルトの名無しさん
2026/10/21(水) 10:09:17.52ID:9/lW9A9e778デフォルトの名無しさん
2026/10/21(水) 10:16:01.91ID:Q4ky+K/W 些細なことで揉めてるな
ガベージコレクションが始まるまでゴミ溜めたまま解放しない言語もあるんだぜ
ガベージコレクションが始まるまでゴミ溜めたまま解放しない言語もあるんだぜ
779デフォルトの名無しさん
2026/10/21(水) 11:31:35.49ID:IUaCnPcw >>761
人それをガベージコレクションと言う。
人それをガベージコレクションと言う。
780デフォルトの名無しさん
2026/10/21(水) 12:04:18.34ID:R04NUakO781デフォルトの名無しさん
2026/10/21(水) 15:24:05.29ID:J+nCWCUK C言語ではアリーナ方式のメモリ管理が20世紀から使われてきていてメモリをまとめて確保して一気にまとめて解放は常識なんだが
782デフォルトの名無しさん
2026/10/21(水) 15:26:28.52ID:dbAxtFxp 人材にもガベージコレクションが必要ですよね
783デフォルトの名無しさん
2026/10/21(水) 15:38:57.98ID:IUaCnPcw まともにメモリ管理のできないMS-DOSなんか使ってたらランタイムの方で何とかしないとまともに動かないからな。
784デフォルトの名無しさん
2026/10/21(水) 16:20:24.89ID:a4Bkl7iF >>780
アリーナ方式やリージョン方式と呼ばれるメモリの一括解放方式はRustが生まれる何十年も前から行なわれてる定番の方式ですよ
アリーナ方式やリージョン方式と呼ばれるメモリの一括解放方式はRustが生まれる何十年も前から行なわれてる定番の方式ですよ
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【野球】侍ジャパン、韓国に快勝し優勝! 大会3連覇 西川先制弾、正木4戦連発、先発の高橋は7回1失点と好投 アジアCS [冬月記者★]
- 安倍晋三元首相の銅像建立 東郷神社で除幕式 昭恵さんら参列 福岡・福津 (産経) [少考さん★]
- 消費減税、効果小さい63% 財源、支援金説明必要85%-共同通信世論調査 ★2 [蚤の市★]
- 【音楽】スピッツのドラム・﨑山龍男、交通事故で救急搬送 「命に別状はないものの、全身を強く打っており」 [Ailuropoda melanoleuca★]
- 【芸能】40代男性が選ぶ『顔がかわいい女性芸能人』 5位「生見愛瑠」4位「浜辺美波」3位「綾瀬はるか」2位「広瀬すず」 1位は…? [冬月記者★]
- iDeCo加入率1割に満たず NISAより仕組み難解、金融機関も敬遠 [えりにゃん★]