探検


オブジェクト指向はオワコン? part3

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2026/08/26(水) 11:55:23.86ID:JrGcaWVK
過去スレ
オブジェクト指向はオワコン (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/
2026/09/08(火) 11:01:25.06ID:Iabg88vo
>>435
この分類はオブジェクトのlifetimeの分類であって変数のextentの分類ではない
2026/09/08(火) 11:54:52.98ID:b8vgRvtH
>>446
じゃあ分類してみろよ
2026/09/08(火) 12:00:28.85ID:3MlPqms6
区別できないやつ多すぎじゃね?
2026/09/08(火) 12:09:50.57ID:8ho6urQA
クロージャに閉じ込めた変数のextentが尽きるタイミングが定まらないいい加減な言語とかもな
その状況だと分類は論外
2026/09/08(火) 12:41:58.32ID:yFsKA3wV
>>446
合致すると思います
2026/09/08(火) 13:25:04.65ID:VxjHi9wV
それは気のせいでしょう
2026/09/08(火) 13:30:11.96ID:VxjHi9wV
static char s[SIZE];

auto char *sp = s;

for (register char *p = s; p - s < SIZE; p++)
 *p = 'a';

Q: s, sp, p の lifetime は?
2026/09/08(火) 13:31:59.02ID:VxjHi9wV
static char *s = malloc(SIZE);

auto char *sp = s;

for (register char *p = s; p - s < SIZE; p++)
 *p = 'p';

Q: s, sp, p の lifetime は?
2026/09/08(火) 13:39:16.76ID:da1PZK75
Cの変数のlifetimeつまりextentは単純
グローバルとstaticはstatic lifetime
それ以外はautomatic lifetime
2026/09/08(火) 13:50:44.53ID:VxjHi9wV
>>454
ざっくりいうとそうとも言えるね
変数のextent(lifetime)が(基本的に)lexcal scopeに綺麗に対応するのがCの美点だったし
それまであった言語FORTRAN 66等からの大きな進化だった。

C,C++の「変数」にdynamic lifetimeというものはないの?
2026/09/08(火) 14:08:17.49ID:KHkfRTGT
変数のlifetimeは結論出てる通り
参照のlifetimeはmallocすればdynamic lifetime
2026/09/08(火) 14:10:16.36ID:VxjHi9wV
ID:KHkfRTGT 変数とメモリオブジェクトの混同 しつけぇw
2026/09/08(火) 14:11:53.93ID:VxjHi9wV
>>456
>>445
2026/09/08(火) 14:23:23.46ID:mXB/BTDc
>>453
変数sのlifetimeはプログラム終了まで存続するstatic lifetime
参照sのlifetimeはfreeで解放すれば消えるdynamic lifetime
2026/09/08(火) 14:55:25.74ID:VxjHi9wV
>>459
じゃあ>>453の最後に数行追加してsを下記のように使いまわしたらsはdynamic?

static char *s = malloc(SIZE);

auto char *sp = s;

for (register char *p = s; p - s < SIZE; p++)
 *p = 'p';

static char t[SIZE];
s = t;
s[…] = …
2026/09/08(火) 14:56:27.93ID:VxjHi9wV
sはstatic変数のpinterなのにdynamicとはこれ如何に
2026/09/08(火) 15:02:01.73ID:4P3fhcMj
既に何度も出てきただろ
参照(ポインタ)は関数へ受け渡したり他の変数へ格納することができる
格納する変数側も別の参照へ切り替えることができる
別の参照に切り替えれば参照のlifetimeは変わる
2026/09/08(火) 15:07:21.70ID:VxjHi9wV
static変数のlifetimeが何をpointしているかによって変化する?
こらまた陳説が飛び出してきたな
2026/09/08(火) 15:11:04.60ID:VxjHi9wV
そしたらGC言語ではメモリオブジェクトのlifetimeがreference0になるかそのあとGCで回収されるまでのpermanentなので
メモリオブジェクトにbindする変数はすべからくpermanentということになってしまうぞ
どうすんのこの矛盾w
2026/09/08(火) 15:12:08.69ID:5FqmB5Px
>>461
君だけ変数のlifetimeと参照のlifetimeの区別を理解してないようにみえる
2026/09/08(火) 15:12:56.39ID:VxjHi9wV
じゃあLispにはdynamic bindingなどというモノはなかったということになるなw
論文書けw 論文書いて世に出して世界中の笑いものになれw
2026/09/08(火) 15:14:31.84ID:VxjHi9wV
>>465
文もう?
混同してる人に区別すべきだと話をしてるんだが
2026/09/08(火) 15:15:52.61ID:VxjHi9wV
>>466
dynamic binding
↓
dynamic extent
2026/09/08(火) 15:24:32.77ID:O8bm+imt
>>466
Lispのdynamic bindingはスコープを超えてグローバルに作用するシャドーイングのことだぞ
混乱の元なので推奨されない
スコープに従うレキシカル・バインディングいわゆるシャドーイングが推奨される
2026/09/08(火) 15:31:47.44ID:O8bm+imt
入籍してなければ単に彼氏では
2026/09/08(火) 15:35:30.37ID:VxjHi9wV
>>469
だから誤記だって。
>>468で直したろ。bindingとextentの対比などに話がそれるともっと難しくなって凡百がついてこれなくなるので話そっちに向けたくない

>>468で話が出ちゃったけどshadowingは典型的なdynamic extentの一例。
そしてリスクも伴うため、言語によっては禁止またはwaringになるが、言語によっては許容している。

Common lispは許容している。Perl Pythonも。gcc,CLANGもデフォで許容(warnig optionつけると検出可)
Javaは確かWarningが出た希ガス。C#は禁止。Rustはshadowingの設定次第

Common lispが許容するにはチャント理由がある。マクロでのconlit回避や
関数型プログラミングにおける再定義上書き回避などの理由による
2026/09/08(火) 15:36:42.57ID:VxjHi9wV
>>471
warning
conflict

書きなぐると誤記増えるなスマソ
2026/09/08(火) 15:40:49.40ID:O8bm+imt
>>468
dynamic extent宣言するとlispコンパイラがその変数をスタック上に置く最適化ができるんだよ
言語によって意味が変わるから言語を超えた話で用いると混乱して難しいね
2026/09/08(火) 15:46:52.88ID:VxjHi9wV
うん。この辺の話は意外と難しいんだよね。
でもプログラミング言語の基礎であり原理
それを勉強しない、正しく理解せずに感覚や慣れで変な持論を信じたり
漫然とコーディングしている人、いかに多いかってことだよね。
そういう人たちがコンピューターサイエンスやソフトウエア工学の基礎をないがしろにした
不適切なオブジェクト指向の流行した土壌になっていたのかなと
最近では思っている
ま、ソフトウエアを作るってことのすそ野がそれだけ広がったともいえる。
でもそれも生成AIの発達で大きく様変わりしそうだが
2026/09/08(火) 15:51:00.55ID:redyKVFR
スタック上に置くということは
Lispのdynamic extentは>>435の分類だとautomatic lifetimeになるね
2026/09/08(火) 15:59:09.04ID:VxjHi9wV
いろいろな言語に話を展開すると、autoのextentは解釈としてdynamicにカテゴライズされるのが一般的だと思うけどそれがなにか

auto変数は本来Lispの様な言語に必須のものではないんだけれど、
lexcal変数を扱う処理のsemanticsが維持できればcomplierの最適化によって生成コードではstack上に(auto変数領域)に割り付けられる
こ・と・も ある
2026/09/08(火) 16:02:52.65ID:VxjHi9wV
>>476
厳密に言うと、auto変数というよりも、auto変数が割付られたメモリオブジェクトへのbindingというべきかな
マンドクセ
2026/09/08(火) 16:10:06.69ID:uOhR5RBi
広義ではどちらもdynamic lifetimeだけど区別すべき大きな違いがある
automatic lifetimeはブロックや関数を抜ける時に解放してよいメリットがある
狭義のdynamic lifetimeはいつ解放してよいのかわからないためGCに任せるかC言語のように手動管理になってしまうデメリットがある
2026/09/08(火) 16:12:28.54ID:VxjHi9wV
やっぱりlifetime(メモリm部ジェクト)とextent(変数・シンボルbingind)は分けて考えたほうが話が明快になると思うけどな
480デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:18:46.50ID:izi+QKQ6
レジスタに乗せる数値がどこから来たかって分ける必要あるもんなの?
アドレスとメモリならまだわかるが変数って広くない?
481デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:20:22.36ID:20+WkAnN
lifetime respect
2026/09/08(火) 16:20:42.70ID:VxjHi9wV
>>479
lifetime(メモリオジェクト)とextent(変数・シンボルbingind存続期間)
2026/09/08(火) 16:21:28.24ID:VxjHi9wV
>>480
値渡しか参照渡しかによるんじゃね?
484デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:23:40.42ID:izi+QKQ6
乱暴に言うけど言語仕様でスタックとかで引き回す値のことを変数とするみたいな感じ?
2026/09/08(火) 16:24:44.98ID:VxjHi9wV
に・日本語で…
486デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:26:37.70ID:izi+QKQ6
レジスタに何の値を入れたいか?を意識してるときメモリと変数は違うってことだよね?
487デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:27:59.18ID:izi+QKQ6
役割が違うから区別しましょうということ何だよね?
488デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:42:52.29ID:izi+QKQ6
グローバル変数Xの値とグローバル変数Y[]の配列
ここで区別つけなきゃいけないのはグローバル変数X ,Yのアドレスを収納してるメモリとそのアドレスがさすメモリ
これは区別つけなきゃならないもの
ってこと?
2026/09/08(火) 16:44:07.71ID:VxjHi9wV
っ 子ども電話相談室
490デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:44:48.87ID:izi+QKQ6
えー子供にも教えてよ
491デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:45:08.70ID:izi+QKQ6
なんで区別つけなきゃいけないのかがわからん
492デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:46:22.13ID:izi+QKQ6
小学校にもあるんじゃないの?プログラムの授業
493デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:48:29.97ID:izi+QKQ6
まあ教える気はないというのは伝わった
494デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:51:09.52ID:izi+QKQ6
とても重要と思ってるようだから気になるんだよなあ
2026/09/08(火) 16:53:07.32ID:VxjHi9wV
なに言ってんだかいまいちわかりにくいし
この人に教え始めると一から延々・長々色々説明にゃならなくなりそうで�_
しかも途中で頓珍漢な質問や反論喰らったり道草しそうだし
いつ果てるともない

そこまでの時間と労力を持ち合わせていない
496デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:55:34.29ID:izi+QKQ6
これ見てでもいいよ、短かったりAIに、要約してもらえるようなものだとありがたい
というか説明が大変な概念というのも伝わった
497デフォルトの名無しさん
垢版 |
2026/09/08(火) 16:59:57.69ID:izi+QKQ6
479って、何のことってAIに聞けばいいのかな、やってみるか
2026/09/08(火) 17:00:25.13ID:VxjHi9wV
せめて質問の内容を明確にしないと
何も言えないじゃん
2026/09/08(火) 17:04:50.09ID:VxjHi9wV
メモリオブジェクトのlifetimeとそれにbindする変数のextentは異なる概念なのか? - Google 検索
ttps://www.google.com/search?q=%E3%83%A1%E3%83%A2%E3%83%AA%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AElifetime%E3%81%A8%E3%81%9D%E3%82%8C%E3%81%ABbind%E3%81%99%E3%82%8B%E5%A4%89%E6%95%B0%E3%81%AEextent%E3%81%AF%E7%95%B0%E3%81%AA%E3%82%8B%E6%A6%82%E5%BF%B5%E3%81%AA%E3%81%AE%E3%81%8B%EF%BC%9F&&hl=ja&source=hp

はい、メモリオブジェクトの「ライフタイム(Lifetime:寿命)」と、それにバインドする(結びつく)変数の「エクステント(Extent:存続期間 / 記憶域期間)」は、異なる概念です。
これらは混同されがちですが、前者は「データ(メモリ領域)そのものがいつまで存在するか」を表し、後者は「変数名(識別子)がいつまでそのメモリを指し示しているか」を表します。
その違いと関係性を整理して解説します。
------------------------------
## 1. 二つの概念の定義

* 変数のエクステント (Extent / Storage Duration)
* プログラムの実行中、その変数名(識別子)がメモリ上の特定の場所(オブジェクト)に有効にバインドされている期間のことです。
* 例えば、関数のローカル変数は「関数が実行されている間」だけエクステントを持ちます(自動記憶域期間)。
* メモリオブジェクトのライフタイム (Lifetime)
* メモリ領域(オブジェクト)そのものが確保されてから、解放(破棄)されるまでの実際の期間のことです。
* この期間中、そのメモリは有効なデータとして保持され、アクセス可能です。
2026/09/08(火) 17:05:25.21ID:VxjHi9wV
------------------------------
## 2. なぜ異なる概念なのか(不一致が起こる例)
多くの場合、変数のエクステントとオブジェクトのライフタイムは一致しますが、これらがズレる(異なる)ケースを考えると違いがよく分かります。
## �@ エクステントが終わり、ライフタイムが続くケース(メモリリーク / 迷子オブジェクト)
C言語やC++の動的メモリ割り当て(malloc や new)でよく起こります。

void create_object() {
int* ptr = (int*)malloc(sizeof(int)); // メモリ(オブジェクト)を確保
*ptr = 42;
// ここで関数が終了する
}


* ポインタ変数 ptr のエクステント: 関数 create_object の実行終了とともに消滅します。
* オブジェクトのライフタイム: free() が呼ばれていないため、関数が終わった後もメモリ上に存在し続けます(ライフタイムは継続)。
* 結果: 変数(名前)がないのに、メモリ領域だけが残る「メモリリーク」が発生します。

## �A ライフタイムが終わり、エクステントが残るケース(ダングリングポインタ)
確保していたメモリが先に解放されたにもかかわらず、変数(ポインタ)がまだその場所を指している状態です。

int* ptr = new int(10);delete ptr; // オブジェクトのライフタイムはここで「終了」
// ptr という変数(名前)のエクステントはまだ続いているif (ptr != nullptr) {
// *ptr = 20; // ライフタイムが終了したメモリへのアクセス(未定義動作)
}

* 変数は存在しており、特定のメモリ番地を指し示し続けていますが(エクステント内)、その先にあるオブジェクトはすでに消滅(ライフタイム終了)しています。
2026/09/08(火) 17:05:46.41ID:VxjHi9wV
## �B 1つのライフタイムに、複数のエクステントが関わるケース
C++の参照(Reference)や、Pythonなどの参照カウント言語が分かりやすい例です。

def process():
a = [1, 2, 3] # オブジェクト(リスト)のライフタイム開始
b = a # 同じオブジェクトに別の変数 'b' をバインド
# 'a' や 'b' のエクステント(スコープ)が切れても、
# 参照がどこかに残っていればオブジェクトのライフタイムは続く

ひとつのメモリオブジェクトに対して、複数の変数名がそれぞれ異なるエクステント(存続期間)を持ってバインドされることがあります。
------------------------------
## 3. まとめ(比較表)

| 概念 | 焦点を当てている対象 | 意味 |
|---|---|---|
| 変数のエクステント | 変数(名前 / 識別子) | その変数名が、いつまでメモリと結びついているか(言語仕様・スコープに近い) |
| オブジェクトのライフタイム | メモリ(データ実体) | そのメモリ領域が、いつからいつまで有効に確保されているか(システム・実行時の状態) |

Rustなどのモダンな言語では、この2つのズレ(ダングリングポインタやメモリリーク)を防ぐために、コンパイラが「所有権(Ownership)」や「ライフタイム(Lifetime)」を厳密にチェックする仕組みが導入されています。
------------------------------
さらに具体的なプログラミング言語(C++、Rust、Java、Pythonなど)における挙動の違いや、「スコープ(Scope)」との違いなど、詳しく知りたい部分はありますか?
502デフォルトの名無しさん
垢版 |
2026/09/08(火) 17:06:38.53ID:izi+QKQ6
AIさん子供電話相談室としても優秀だなあ
全てが理解できたわ
503デフォルトの名無しさん
垢版 |
2026/09/08(火) 17:06:56.85ID:izi+QKQ6
あ、ありがとう
2026/09/08(火) 17:07:17.22ID:VxjHi9wV
次からは金取ろうかな…w
505デフォルトの名無しさん
垢版 |
2026/09/08(火) 17:13:33.87ID:izi+QKQ6
479側の「概念を分離しないから議論が混乱している」という指摘は正しい。
特に、
pointer変数
≠
pointerが指しているobject
なのに両方を「参照のlifetime」「変数のlifetime」などと曖昧に呼んでいる部分への批判は妥当です。
ただし479自身の
lifetime → メモリオブジェクト
extent → 変数・symbol binding
という二分法も、普遍的な正式定義として採用するには少し単純化しすぎています。
より安全なのは、
┌─ scope
名前 / binding ──┤
└─ extent

storage ─────────── storage duration

object ──────────── lifetime

reference / borrow ─ Rust等では独自のlifetime概念
とすることです。
506デフォルトの名無しさん
垢版 |
2026/09/08(火) 17:14:25.75ID:izi+QKQ6
このスレを読むための「翻訳機」
今後このスレで誰かが、
「変数のlifetimeが~」
と言ったら、頭の中で即座に、
「変数の何? 名前のscope? bindingのextent? 変数objectのlifetime? storage duration?」
と問い直してください。
また、
「参照のlifetime」
なら、
「pointer変数自身? pointer value? 指されているobject? Rustのborrow?」
と分解します。
507デフォルトの名無しさん
垢版 |
2026/09/08(火) 17:15:05.67ID:izi+QKQ6
翻訳機ありがたい
2026/09/08(火) 17:16:31.81ID:VxjHi9wV
なんだ、結構わかってんじゃn坊ちゃん。
つかAIの回答抜粋?
509デフォルトの名無しさん
垢版 |
2026/09/08(火) 17:17:16.63ID:izi+QKQ6
そうだよ子供電話相談室に聞いたよ
2026/09/08(火) 17:18:51.86ID:VxjHi9wV
よし、いい子だ。小遣い上げる。
っ �I
2026/09/08(火) 17:42:31.30ID:yE6BrO3k
>>499
>変数のエクステント (Extent / Storage Duration)
Storage Durationはメモリオブジェクトのライフタイム (Lifetime)のほうだろ
512デフォルトの名無しさん
垢版 |
2026/09/08(火) 17:47:05.07ID:izi+QKQ6
RUSTの借用中は所有権をmoveできないという仕様を知って謎は全て解決したわ
2026/09/08(火) 17:47:54.06ID:yE6BrO3k
※複おじ流の使い分け
「変数pのlifetimeが〜」と言ったらbindingのextent
「ポインタpのlifetimeが〜」と言ったらポインタが指すオブジェクトの存続期間

無理があるわな
2026/09/08(火) 18:18:21.64ID:yE6BrO3k
ポインタじゃなくてRustの参照になるとまた話が変わるのか
ややこしいな
2026/09/08(火) 18:33:48.84ID:zAP4If0F
Rustは公式に変数のlifetimeと参照のlifetimeの2つしか出て来ないからシンプルだよ
しかも参照のlifetimeは参照先を所有している変数のlifetimeと同じ

それがRustがGC使わずに安全に自動解放できる理由だよ
つまり静的に参照のライフタイムを追うことができて
所有者の変数のlifetimeが終わる時に所有している領域が解放されるためlifetimeが同じになる
(正確にはRc/Arc使用時に他の共同所有者がいれば全員いなくなるまで解放が先延ばしされる)
2026/09/08(火) 18:50:28.04ID:VxjHi9wV
それってreference countとどう違う?
2026/09/08(火) 19:09:47.66ID:VxjHi9wV
CGとreference contに頼らず頑張りましたっ!!!
ってところが違うんだろうな。

Javaも
基本データ型(プリミティブ型):int, double, boolean, char などの変数は
スタック領域に割り付けられるが

参照型:String、クラス、配列、インターフェースなどについては
データの実体はヒープ領域に作られ、変数にはその場所が記録される

したがってメモリ安全性という観点からみると、
C,C++あたりを除けばみんなどの言語も大差ないんよ
2026/09/08(火) 19:14:57.04ID:zAP4If0F
>>516
そのままreference countの略だよ
ただしreference countのGCとは二つの点で異なってる

1つ目は所有者が複数必要になる時のみ使う
一番わかりやすい例だとマルチスレッドで共有する場合どのスレッドが先に終えるか保証できない時に各スレッドに所有者が必要
全ての所有者がいなくなると解放

2つ目は所有者が増減する時しかカウンタが増減しない
各所有者から参照を得る時は通常と同じでカウンタは増減しない
つまり付加コストは最小限
2026/09/08(火) 19:15:00.37ID:VxjHi9wV
フラグメントを解消する手段がなさそうなので、
領域の作成や解法を繰り返すとメモリ使用効率が劣るんだろうな
2026/09/08(火) 19:25:25.69ID:vKcBdVnk
C++もRustもベクタなど長さが大きくなる時はヒープ領域上で使用領域をお引越しするぜ
ちゃんとアドレスが変わる
2026/09/08(火) 19:26:41.88ID:VxjHi9wV
じゃあ実質GCと同じようなもんじゃん
522デフォルトの名無しさん
垢版 |
2026/09/08(火) 19:27:38.91ID:izi+QKQ6
それはそういうコンテナを使用したらだよね
言語仕様とは別の話じゃない?
2026/09/08(火) 19:30:30.92ID:VxjHi9wV
だよな、坊ちゃん
524デフォルトの名無しさん
垢版 |
2026/09/08(火) 19:31:31.15ID:izi+QKQ6
仮想アドレス+ページングと小規模メモリアロケーターで解決できない断片化はそっちでなんとかしてってことで
フラグメントを解消するという重い処理はやらないよってところが特徴なんだし
2026/09/08(火) 19:32:50.43ID:CZPdm29b
ベクタは各言語の規格書相当に存在するから言語仕様でしょ
526デフォルトの名無しさん
垢版 |
2026/09/08(火) 19:34:57.96ID:izi+QKQ6
まあ言語仕様でもいいけどコンテナも色々アルゴリズムがあるからまあアロケーターも色々アルゴリズムがあるしおんなじもんか
527デフォルトの名無しさん
垢版 |
2026/09/08(火) 19:35:47.17ID:TqYhbzz9
しょうがないよ旧日本軍は中国人を3500万人虐殺したんだからさ
528デフォルトの名無しさん
垢版 |
2026/09/08(火) 19:36:22.89ID:izi+QKQ6
全くだ世の中ママならんね
2026/09/08(火) 19:40:15.06ID:CZPdm29b
ベクタ等の確保領域移動はメモリのバルク転送だけだからGCと違ってコストもかからないね
2026/09/08(火) 19:43:05.43ID:VxjHi9wV
※大きい領域が少数個数の場合はね
531デフォルトの名無しさん
垢版 |
2026/09/08(火) 19:44:57.45ID:izi+QKQ6
Vectorは使わない!絶対にだ!
ぐらいの勢いで作れば大丈夫だよ実際必要なことはない
パフォーマンス第一なら
2026/09/08(火) 19:45:58.77ID:VxjHi9wV
そいや数年前のJava18の話だけど
24365運用のシステムでずっと実行中のJavaプログラム、
まれに停止したようになってた希ガス
2026/09/08(火) 19:51:53.88ID:+hxehDby
ベクタの移動コストはO(1)なので無視できる
2^nが満員になると2^(n+1)へ転送するだけ
高は
534デフォルトの名無しさん
垢版 |
2026/09/08(火) 19:53:11.15ID:izi+QKQ6
まあお願いベクターでメモリ見積もり誤魔化すときはあるけど
罪悪感はある
2026/09/08(火) 20:09:21.81ID:N2qx73sr
ベクターでヤバいのはC++のこれ
こんな単純なコードでも大変なことが起きてしまう

void vector_test() {
std::vector<int> v{0, 1, 2, 3, 4, 5, 6, 7};
int& fifth = v[5];
v.push_back(100);
std::vector<int> w{8, 8, 8, 8, 8, 8, 8, 8};
fifth = 555;
std::cout << "v[5] = " << v[5] << std::endl;
std::cout << "w[5] = " << w[5] << std::endl;
}
2026/09/08(火) 23:44:20.91ID:zAP4If0F
Rustなら大丈夫だよ
2026/09/08(火) 23:55:55.88ID:VxjHi9wV
だれかRustの弱点晒したれや!!
2026/09/09(水) 07:36:38.40ID:QWnrMzzu
>>537
RustとAIは信者の絡みがキツい時がある
539デフォルトの名無しさん
垢版 |
2026/09/09(水) 20:29:29.89ID:uogCQMa3
基地外がいなくなるだけで過疎w
2026/09/09(水) 20:33:03.54ID:g2JoL7a8
>>535が指摘されたら消えたな
541デフォルトの名無しさん
垢版 |
2026/09/09(水) 21:49:25.28ID:/Y1DRB2x
真のオブジェクト指向言語Javaなら問題ないよ
542デフォルトの名無しさん
垢版 |
2026/09/09(水) 22:02:10.31ID:8fPjClGL
Javaが何故、多重継承をサポートしていないのかを考えたことがあるのか?

>>541
>真のオブジェクト指向言語Javaなら問題ないよ

親子は別人なので銀行口座を明確に分離する——こうした「責任と境界をはっきりさせる必要があるシステム」では、多重継承を排したJava的な設計が適しています。曖昧さを許さず、単一の責任と明確な所有関係を強制する方が、安全で運用しやすい。
一方で、クリントンの「不適切な関係」はまったく異なる構造を示しています。
同一人物の中に「別のクリントン」が暴れている、という状況です。社会的・公的なクリントンと、ムスコ(チンポ)を通じて勝手に振る舞いを決めてしまうクリントンが、同じ身体の中に共存している。上位の意志がどれほど強くても、その内部オブジェクトの自律的な動きを完全には止められない。
543デフォルトの名無しさん
垢版 |
2026/09/09(水) 22:32:17.22ID:/Y1DRB2x
>>542
荒らすなカス
2026/09/09(水) 23:22:20.55ID:7TP/BvCl
>>541
Javaはそのオブジェクト指向でどう解決しているの?

>>535はベクタvに新たな要素がpushされたら確保していたヒープ領域を超えたので大きなヒープ領域を新たに取り直してそこへ移動した
その後にベクタwが作られて旧ベクタvの領域が割り当てられた

参照fifthの立場としてはベクタvの5番目を指していたのに知らぬ間にベクタwの5番目を指していた
545デフォルトの名無しさん
垢版 |
2026/09/09(水) 23:34:37.10ID:/Y1DRB2x
>>544
ポインタを無くした
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況