探検


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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2026/08/13(木) 14:38:03.02ID:pdAcKRXu
前スレ
オブジェクト指向はオワコン?
https://mevius.5ch.io/test/read.cgi/tech/1721393540/
2026/08/24(月) 02:32:03.86ID:YY0Bkc3V
c++のそれらの企画書では時間的な長さ(生存期間)をlifetimeまたはstorage durationとよび
std::dynamic_extent は空間的なサイズ(要素数)に用いて使い分けているな

C言語の標準規格(ISO/IEC 9899)においては、配列のサイズを extent とは呼んでいないようだな
2026/08/24(月) 02:32:52.68ID:YY0Bkc3V
>>796
意味は持っているよ
なんでさ、知らないことを「ない」っていうの?
変なあたましてるな
2026/08/24(月) 02:34:08.35ID:RtsQfhBt
>>797
そうだよ
時間的な方はlifetimeと呼ぶのが正しい
2026/08/24(月) 02:39:28.95ID:RtsQfhBt
英英辞典で調べてもextentに生存期間の意味はない
lengthやsizeの意味はある
だからC++のstd::dynamic_extentが配列などの長さやサイズの意味で用いてることは正しい
つまり動的extentは動的サイズ
2026/08/24(月) 02:41:42.77ID:YY0Bkc3V
英英辞典には載っていないだろうなw
2026/08/24(月) 02:53:04.24ID:RtsQfhBt
C/C++/C#の規格書はlifetimeなんだな
あとは規格や公式でextentを用いるプログラミング言語があるのかどうか
2026/08/24(月) 02:59:57.04ID:RtsQfhBt
Rustは規格書がないようだが公式でlifetimeと言ってるな
2026/08/24(月) 03:12:48.44ID:YY0Bkc3V
C++では、C++11以降の標準ライブラリや、C++20/C++23で追加された新しい機能において、
配列などの「(各次元の)要素数、あるいはデータの広がり(長さ)」を指す用語として extent という言葉を使っている。

とのことだ

なお、Cで配列などの空間サイズにextentというコトバを使うことはない
2026/08/24(月) 03:27:00.00ID:BSEHZD2k
なるほど
変数などの生存期間はlifetimeと呼んだほうが良いわけか
2026/08/24(月) 03:29:17.82ID:YY0Bkc3V
>>805
C++ではサイズにextentを使うようになっちゃったので、
時間の方はlifetimeを使い分けるのが無難ってことだな
2026/08/24(月) 03:34:14.48ID:YY0Bkc3V
時価だ空間だ書いているとまた場の理論のおじさんが
妄想を爆発させそうだなw
2026/08/24(月) 03:48:54.71ID:BSEHZD2k
>>806
使い分けはその通り
経緯は先にCの標準規格書としてlifetimeの用語が定まった
C++も同じく標準規格書としてlifetimeの用語が定まった
後にC++20の時にdynamic extentを動的なサイズの意味で配列などの要素数に用いた
std::dynamic_extent
2026/08/24(月) 03:51:14.54ID:YY0Bkc3V
>>808
サイズ面でextentをつかうよになったのは割と新しめのC++か
2026/08/24(月) 03:57:58.68ID:YY0Bkc3V
結局話の発端の

>659
>動的extentって何だ?
>例えばC++のdynamic_extentはオプション指向と関係ないように
>概念を話すときに特定の言語でのみ通用する用語は使わないでほしい

とは何だったのか。
2026/08/24(月) 04:00:23.52ID:YY0Bkc3V
相手する値打ちの無い輩だったということか…
2026/08/24(月) 04:18:02.26ID:/7yyHiO5
なぜC++で空間サイズに関してextentが使われるようになったか大体分かった
--
C++の標準ライブラリでは、配列のサイズや広がりを表現するために extent(複数形は extents)という言葉が使われるようになりました。

* std::extent (C++11〜)
* 配列型の「指定した次元の要素数(サイズ)」をコンパイル時に取得するための機能です。
* 例えば int arr[3][5]; に対座して、std::extent_v<decltype(arr), 1> とすると、2次元目の広がりである 5 が取得できます。 [2, 3]
* std::span (C++20〜)
* 連続したメモリ(配列や std::vector など)を指し示す軽量な覗き窓(ビュー)です。
* このクラスのテンプレート引数やメンバ定数として、要素数を表す extent が定義されています。ここで要素数が実行時になるものを std::dynamic_extent と呼びます。 [4, 5]
* std::mdspan / std::extents (C++23〜)
* 多次元配列を扱うための機能です。
* C++23からは、多次元配列の「次元の数」を rank、「各次元の要素数(サイズ・広がり)」を extent と明確に呼び分け、それを管理する std::extents というクラスも登場しました。 [1, 6, 7]

## 2. なぜ size や length ではなく extent なのか?
C++において size() や length() は、コンテナにある「すべての要素の総数(合計カウント)」を返すものとして長年使われてきました。 [8]
しかし、多次元配列(例えば、縦3 × 横5 の行列)を扱うようになると、以下のような混乱が生じます。

* 「この行列の size は?」と言われたとき、全体の個数である 15 なのか、縦の長さ 3 なのか、横の長さ 5 なのか区別がつきにくい。

そのため、近代C++では以下のように言葉を使い分けるようになりました。

* rank(階数・次元数): 配列が「何次元」あるか(例: 2次元配列なら 2)。
* extent(境界・広がり): 各次元における「要素の長さ・サイズ」(例: 1次元目の extent は 3、2次元目の extent は 5)。
* size(総サイズ): すべての次元の extent を掛け合わせた「全要素の総数」(例: $3 \times 5 = 15$)。 [1, 6, 7]

## 結論
C++では、配列の「要素の数」や「各次元のサイズ」といった空間的な広がりを公式に extent と呼びます。 [1, 2]
2026/08/24(月) 04:21:28.45ID:8dfHuOfg
extentはLisp用語
空間的なscopeと対比することでextentを時間的な意味でLisp用語にした
本来のextentは時間的ではなく一般的な範囲を示す
Lisp用語としてのみextentが生存期間の意味で使われている
それがLisperによって広まった

一方でC/C++など他の言語から見ると
Lisp用語extentは相応しい用語に見えない
わかりやすいlifetimeが採用された
それでもLisp用語extentを使う人が一部残った
一方でC++はextentを本来の意味で使うことにした
std::dynamic_extentはその本来の意味に沿っている
2026/08/24(月) 04:24:18.55ID:/7yyHiO5
>>813
sizeにを使う用になった言語は
0x11以降のc++の他になにかある?
2026/08/24(月) 04:25:13.82ID:/7yyHiO5
>>814 extentが抜けた

sizeにextentを使う用になった言語は
0x11以降のc++の他になにかある?
2026/08/24(月) 04:33:06.49ID:/7yyHiO5
そんな、必死で検索して探さなくていいよ
もう寝なよ
2026/08/24(月) 06:26:02.29ID:CNRXA6iN
>>744を使えばもめることも誤解されることもなくて平和だよん
2026/08/24(月) 07:54:25.67ID:0OmhbSEr
extentを時間的要素に用いるのはかなり一般的じゃ無いって事でOK
819デフォルトの名無しさん
垢版 |
2026/08/24(月) 08:32:51.10ID:m7Qyi1DS
オブジェクト指向でプログラム書いてるけどエクステントの言葉は知らなかった
スコープから外れたオブジェクトはいずれGCされるとだけ思ってプログラム書いてるしそれで問題ない
エクステントを意識して書かれたプログラムは何かが良くなるとかそういうのは別にないんでしょ
プログラムの動作を説明するときに役立ちそうではあるけどね
2026/08/24(月) 08:41:35.36ID:0OmhbSEr
>>819
GCも完璧じゃ無いんだよなぁ
まあ、完璧じゃないのは使う側の勘違いがほとんどだけどさw
821デフォルトの名無しさん
垢版 |
2026/08/24(月) 09:09:17.26ID:m7Qyi1DS
マネージドヒープで管理できないものはあるからね
ネイティブメモリはローンパターンとかリソースモナドっぽいものを拵えて管理してるわ
822デフォルトの名無しさん
垢版 |
2026/08/24(月) 09:09:45.80ID:++uoiV4H
誰も真のオブジェクト指向でプログラムできないからねぇ
それっぽい機能使ってるけどforループで回して手続き型プログラムやってる
関数や配列の強化版としてしか使えていない
823デフォルトの名無しさん
垢版 |
2026/08/24(月) 09:25:33.80ID:m7Qyi1DS
>>822
誰もできないなら真のオブジェクト指向があると考えてる人がバカなんじゃないの? 違うの?
2026/08/24(月) 10:06:50.63ID:9H+y+Lt4
CのlifetimeとLispのextentとRustのlifetimeは
何かしらの生存期間/有効期間を表現しているという意味では同じだけど
肝心の「何かしら」の中身が違うので同じものとして取り扱わないほうがいい
2026/08/24(月) 10:45:45.63ID:W8icJp64
>>783
エクステ爺さんは悪魔の証明の意味も知らんのかw
「例を出せ」と「無いと証明しろ」を同一視するとか頭おかしいだろ
2026/08/24(月) 10:56:41.85ID:0OmhbSEr
>>822
真のオブジェクト指向でプログラム出来ないとかw
道具を道具として使えない奴の言い訳にしか聞こえないなw
んなもん道具なんだから頭でウジウジ考えて真のオブジェクト指向目指すより
テキトーに道具として使った方が勝ちだ
827デフォルトの名無しさん
垢版 |
2026/08/24(月) 11:22:03.68ID:++uoiV4H
つまり用途がないんだよオブジェクト指向にはな

世の中の実業に求められてるのは手続き型プログラムってことよ
2026/08/24(月) 11:30:53.67ID:0OmhbSEr
機能分割くらいに考えて使えればいいんだよ
グダグダ屁理屈並べてああでもないこうでもないで何日も時間潰しても
結局最後は設計が悪かったになるんだからw
829デフォルトの名無しさん
垢版 |
2026/08/24(月) 11:34:05.39ID:m7Qyi1DS
手続き型とオブジェクト指向は地続きなものだしなあ
手続き型でプログラム書いて必要になったときにオブジェクト指向でまとめるくらいでちょうど良い
830デフォルトの名無しさん
垢版 |
2026/08/24(月) 12:28:27.74ID:hVz7/hAx
手続きは地続き
831デフォルトの名無しさん
垢版 |
2026/08/24(月) 12:30:28.08ID:iOSk3pf4
データとそれを処理する関数をまとめたカプセル化は良いと思う。
細々したことをさらけださなくいいから。

C++ならテンプレートだな。まあ、会社では使用禁止だろうけど。
2026/08/24(月) 12:43:50.88ID:0OmhbSEr
テンプレートやマクロって、公的に利用されてるもの以外は混乱の元なんだよね
2026/08/24(月) 12:50:46.60ID:/rJQvH3P
>>656
>クラス(カプセル化)、動的インスタンス(動的extent)、継承、多態といったもので
>プログラムを現すモデルとして実は適していなかったおそれがあると思う

これやっぱりCOBOLのような手続き型を想定した話だったのか
さすがおじいさん
2026/08/24(月) 12:54:25.98ID:ApDDNJ0D
東工大の大学院出てそうだなwww
2026/08/24(月) 13:08:11.00ID:/7yyHiO5
なぜそう思った?
2026/08/24(月) 15:41:30.92ID:NI+byBux
この使い分けも難しい
ニブル (nibble)
テトラード (tetrade)
カルテット (quartet)
2026/08/24(月) 15:46:54.81ID:/TxIyeAu
>>835
気分はstatic!だから
838デフォルトの名無しさん
垢版 |
2026/08/24(月) 16:08:32.29ID:FITgzI9F
えらい勢いあるねこのすれωωω
839デフォルトの名無しさん
垢版 |
2026/08/24(月) 16:49:46.42ID:++uoiV4H
不毛なことって延々と続くからね
2026/08/24(月) 18:18:43.72ID:0OmhbSEr
スキー用具が冬季オリンピックの開催国で使われる名称になるみたいな差だからいいんだよw
2026/08/24(月) 18:46:36.30ID:9P8EVJBT
>>833
エクステじいさんが言いたかったことは>>29の内容だろうな
その>>29自体も何かと意味不明だが
2026/08/24(月) 19:06:41.35ID:oSCPHv4Q
>>29
>>・extentが独立な状態変数は、どうしてもそうしなければならないもの以外、なるべく状態変数にしない

このextentが独立はlifetimeが独立の意味?
生存期間が独立って表現おかしくない?
生存期間が静的と言いたいのかな?

>>特にextentとscope。
>>C言語で明確化された、ネストしたシンプルで分かりやすく
>>そしてextentと対応付きやすいscopy

ネストしたと書かれているから
おそらく多段ブロックスコープの話っぽい
でもextentはscopeと対応しないから意味を持つよね
extentを敢えて出す意味は?
2026/08/24(月) 20:30:04.38ID:SH8uZeIr
馬鹿しかいない
2026/08/24(月) 22:28:44.89ID:/7yyHiO5
ほんとそう思った
2026/08/24(月) 23:11:07.53ID:SAx4f3U/
>>599 java
https://ideone.com/pC1BHy
・委譲でなんとかするやつ
・継承でなんとかするやつは>>758
2026/08/24(月) 23:12:21.80ID:SAx4f3U/
>>599 java
https://ideone.com/nx3a5x
・委譲でなんとかするやつ
・継承でなんとかするやつは>>758
2026/08/24(月) 23:56:26.47ID:5ApQpNZr
>>345
マジックナンバーがわかった
-1431655765 = (2^33 + 1) / 3 を符号付き32bit
1431655766 = (2^32 + 2) / 3
848デフォルトの名無しさん
垢版 |
2026/08/25(火) 03:53:26.26ID:Fbem61UJ
staticおじさんは
staticおじいさんに進化しました
2026/08/25(火) 06:40:27.48ID:DTj/Nd7/
>>758
乙。

地獄やな…
2026/08/25(火) 09:32:51.45ID:DTj/Nd7/
オブジェクト指向はその仕組みが元凶で悪というよりも
自由度が高かったり色々な(変な・凝った)書き方が出来てしまい
それを使う人間が上手く律し利点だけを引き出すような使い方が結局できない
思い込みと自己流で変な流用の仕方をしがちだった

使う人間側にも問題があったのではないかと最近では思う
それをそれを制限する仕組みをオブジェクト指向は備えていなかった

で、制限する言語が最近出て来た
2026/08/25(火) 10:13:57.96ID:oBSBF0sY
オブジェクト指向言語自体は洗練されてるからねw
提供されてるライブラリのクラスメソッドの出来の良さよw
2026/08/25(火) 10:26:10.59ID:6vdc+tuL
>>845
JavaってDictionaryやTupleってないの?
あとintかstringを返す場合はObjectを返す以外にない?
最初の数行で気になって
853デフォルトの名無しさん
垢版 |
2026/08/25(火) 10:29:44.33ID:2JbrJHvg
delay()を初心者に教えるとその先が壁になって
いつまでもシングルタスクのまま進歩しないのと同じだな
854デフォルトの名無しさん
垢版 |
2026/08/25(火) 10:51:57.55ID:kmT7Vw9O
>>852
自分で調べろ
2026/08/25(火) 10:58:49.00ID:V26zP6ij
>>599 Pythonで書いた例。正直ちょっとわかりづらいので、本当はコメントが必要かも。
https://www.ideone.com/tGe3is
856デフォルトの名無しさん
垢版 |
2026/08/25(火) 11:01:52.62ID:kmT7Vw9O
>>855
specって何? specが気になってぜんぜん頭に入ってこない
2026/08/25(火) 11:04:09.41ID:dp5nuGuB
satisfied_countってなんやねん!
2026/08/25(火) 11:10:09.26ID:FPo7YXHj
つか、なんでみんなダラダラ条件分岐書き連ねるの?
859デフォルトの名無しさん
垢版 |
2026/08/25(火) 11:18:37.93ID:kmT7Vw9O
>>858
他に良いやり方あるんけ? おーん?
2026/08/25(火) 11:19:36.83ID:oBSBF0sY
まあ、バカがループ禁止にしたからかな?
2026/08/25(火) 11:32:42.57ID:V26zP6ij
とりあえず出力ができるものということで書いたので、粗があるのは許してちょ。specは、〜specの並びを見れば、意図するところは分かってもらえるかなと思ったんだけどね(>>593でも書いているし)。
woofルールがなければ述語関数を渡して判定させるという形で書けるのでまだ分かりやすかったと思うんだけど、今回は、woofルールもまとめて一本で書いたので正直分かりにくくなった面はあると思う。
ま、あくまでお試しで書いてみた例にすぎないので、その程度のものとして見てもらえれば。
2026/08/25(火) 11:40:36.88ID:FPo7YXHj
>>859
辞書作って判定回せばデータ変えるだけだぞ
863デフォルトの名無しさん
垢版 |
2026/08/25(火) 11:47:07.75ID:kmT7Vw9O
>>862
ほほんw それでやってみ、できないからw
864デフォルトの名無しさん
垢版 |
2026/08/25(火) 11:47:53.08ID:kmT7Vw9O
エアプが妄想でこうやれば良いと言っててウケるw
2026/08/25(火) 11:52:07.39ID:FPo7YXHj
>>863
え?
最初のルールから変わったんか?
2026/08/25(火) 11:59:10.14ID:V26zP6ij
>>855 のboom(7539)のところが実際にはboom(35)になっていたので、一応修正版。まぁ、出力は変わらないんだけど。
https://www.ideone.com/T80HCK
2026/08/25(火) 12:03:40.92ID:FPo7YXHj
最小公倍数で回せなくなったのかw
あと変換後のスペル順番が違う…と
スペル変換をもう一つ噛ませればいいだけじゃん
2026/08/25(火) 12:06:57.49ID:FPo7YXHj
いっその事、1万テーブルの変換表作って
ダイレクトに参照させた方がいいまであるなw
2026/08/25(火) 13:36:41.58ID:uW9aS2eb
>>866
どこがオブジェクト指向なんだよ?
オブジェクトもなければメッセージパッシングもない
870デフォルトの名無しさん
垢版 |
2026/08/25(火) 13:55:36.08ID:kmT7Vw9O
>>869
自分で作れ
2026/08/25(火) 14:08:10.89ID:V26zP6ij
>>869
そう? 組み込みクラスのオブジェクトの便利なメソッドを使うというのも十分にオブジェクト指向だと思うけど。
そういうネジ・クギレベルのことを超えて、ユーザー定義クラスみたいなのを作って色々やるのがいいかどうかは設計時の考え方次第だと思うよ。今回は関数で十分だと思ったから関数にしただけの話で。
2026/08/25(火) 15:02:38.17ID:59HjenUa
>>871
どこにも見当たらないが
まさか関数呼び出しをオブジェクト指向と呼んでる?
C言語にも備わってる基本機能だぞ
2026/08/25(火) 15:23:05.74ID:oT3TaD7S
>>868
その変換表をどうやって作るつもりなんだよw
2026/08/25(火) 15:34:02.59ID:FPo7YXHj
>>873
ドキュメント見て作るさw
むしろ、特殊な文字出力する数字の場合だけデータ入れて、あとはnullとして通常ルール通りに処理させる分岐条件にするとかな
2026/08/25(火) 15:39:14.70ID:oT3TaD7S
>>874
1万までの数字すべての期待結果がドキュメントに逐一書かれてるといいねw
2026/08/25(火) 15:45:57.28ID:V26zP6ij
>>872
ユーザー定義関数もオブジェクトだし、words.appendとか、''.joinとかは普通にメソッド呼び出しだけど。forループやリスト内包では、内部的にiteratorオブジェクトのメソッド呼び出しがされているわけだし。
インスタンスの生成構文みたいなのがないとオブジェクト指向ではないという感覚なの?
2026/08/25(火) 15:47:28.12ID:FPo7YXHj
>>875
データ作るなんて簡単だぞw
こいつらの書いたコードの出力をまんま使えるからなw
2026/08/25(火) 16:34:19.36ID:92tTKry8
>>877
自分のバカさ加減にようやく気付いたようで何よりですww
2026/08/25(火) 16:34:41.01ID:59HjenUa
>>876
それは言語の機能だね
FizzBuzzをオブジェクト指向に実装する話とはレイヤーが異なるよ
880デフォルトの名無しさん
垢版 |
2026/08/25(火) 16:50:03.91ID:kmT7Vw9O
>>872
C言語に備わっていたらオブジェクト指向じゃないといつから錯覚していた?
881デフォルトの名無しさん
垢版 |
2026/08/25(火) 16:53:27.38ID:kmT7Vw9O
オブジェクト指向とはプログラムをわかりやすくする営みと知れ
882デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:04:08.80ID:XljZ4S3B
オブジェクトを作ってそこへメッセージを投げることで動いていく
そのためのメッセージ送受をコーディングしていく
それがオブジェクト指向プログラミング
>>866は今回の目的のためにオブジェクトすら作っていない
883デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:15:06.41ID:kmT7Vw9O
>>882
そうだ、それで良い
必要ないオブジェクトを作るのはオブジェクト指向ではない
884デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:16:01.79ID:kmT7Vw9O
オブジェクトを最小限にすることもオブジェクト指向である
885デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:16:52.90ID:kmT7Vw9O
Pythonは数値さえもオブジェクトだったりするんだよな
Pythonで書かれたプログラムはすべてオブジェクト指向の賜物
886デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:24:18.32ID:kmT7Vw9O
メッセージパッシングがーと言ってるやつは自分で書いてみろ
できないんだったらメッセージパッシングによるオブジェクト指向は
現実では使い物にならないことの証拠である
2026/08/25(火) 17:37:38.64ID:1v+8FLb+
オブジェクト指向でプログラミングすること
言語の機能やライブラリがオブジェクト指向で実装されていること
この二つは異なる
違いがわからない人はいないと思うが
888デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:43:28.83ID:kmT7Vw9O
>>887
同じですね、オブジェクト指向エアプか?
889デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:44:24.87ID:kmT7Vw9O
オブジェクト指向がなかったらライブラリも構築できないんだから
オブジェクト指向のライブラリを使うこともオブジェクト指向プログラミングだよ
890デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:48:20.35ID:kmT7Vw9O
オブジェクト指向で構築されたライブラリを使ってプログラム書いてオブジェクト指向ではありませんは無理がある
濃厚セックスしておきながら私エッチなことに興味ありませんけどみたいな顔してる女みたいなもの
891デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:54:21.90ID:kmT7Vw9O
オブジェクト指向以前からベテランの開発者は優れたデータ構造を選んでコードがシンプルにせよと言ってたんだよな
そのように考えるとオブジェクトは言語機能の代替と考えてそれらを使ってロジックを手続き型や関数型でシンプルに書くのがオブジェクト指向の良いプログラムといえるのではないだろうか
892デフォルトの名無しさん
垢版 |
2026/08/25(火) 17:55:18.50ID:kmT7Vw9O
誤:コードがシンプルにせよ
正:コードをシンプルにせよ
2026/08/25(火) 17:57:28.72ID:r1bVOdaF
>>866はオブジェクト指向プログラミングの要素が1つもないな
894デフォルトの名無しさん
垢版 |
2026/08/25(火) 18:00:20.67ID:kmT7Vw9O
>>893
そんなに他人のコードに文句があるなら自分で書きなよ
自分が思う最高のオブジェクト指向プログラムってやつをさ
895デフォルトの名無しさん
垢版 |
2026/08/25(火) 18:02:14.96ID:gX3JeEsp
手段の目的化の極み
2026/08/25(火) 18:10:28.36ID:a1NtL2p3
>>866
読んでみた
糞コードだと思った点の一つはCallable
それは非常に古い使い方でオブジェクト指向に対応していないC言語などで用いる方法
オブジェクト指向プログラミングに対応した言語はその点を解決している
■ このスレッドは過去ログ倉庫に格納されています

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