過去スレ
オブジェクト指向はオワコン (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
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2026/08/26(水) 11:55:23.86ID:JrGcaWVK2デフォルトの名無しさん
2026/08/26(水) 11:58:05.83ID:sdi3yqbK >>1乙
3デフォルトの名無しさん
2026/08/26(水) 12:01:22.50ID:JrGcaWVK4デフォルトの名無しさん
2026/08/26(水) 15:38:25.94ID:UKAdFl7a このスレ要るか?
2026/08/26(水) 21:29:21.56ID:g57AhbG+
use feature 'current_sub';
@a = map{[split]} <DATA>;
($m, $n) = (20, 1);
sub {
$s = '';
map{0 == $n % $$_[0] and $s .= $$_[1]} @a;
$s ||= $n;
print "$s\n";
$n++, goto __SUB__ if $n < $m;
}->(1);
__DATA__
3 fizz
5 buzz
7 Pop
11 Jazz
注) Perl の「goto 関数」は continuation
@a = map{[split]} <DATA>;
($m, $n) = (20, 1);
sub {
$s = '';
map{0 == $n % $$_[0] and $s .= $$_[1]} @a;
$s ||= $n;
print "$s\n";
$n++, goto __SUB__ if $n < $m;
}->(1);
__DATA__
3 fizz
5 buzz
7 Pop
11 Jazz
注) Perl の「goto 関数」は continuation
2026/08/26(水) 21:47:43.21ID:eZJQS97n
>>https://mevius.5ch.io/test/read.cgi/tech/1786599483/599 ocaml
https://ideone.com/eaBULr
・Java版のRuby移植のOCaml移植
・連結済文字列じゃなくて、文字列のリストを返すようにしたのは単に気まぐれ
"FizzBuzz"じゃなくて["Fizz"; "Buzz"]を返してる
>>https://mevius.5ch.io/test/read.cgi/tech/1786599483/599 ocaml
https://ideone.com/Q1I3uT
・Woofの303がFizzFizzFizz版
・String.fold_leftは4.13以降
・今のideoneは OCaml (ocamlopt 4.05.0)
https://ideone.com/eaBULr
・Java版のRuby移植のOCaml移植
・連結済文字列じゃなくて、文字列のリストを返すようにしたのは単に気まぐれ
"FizzBuzz"じゃなくて["Fizz"; "Buzz"]を返してる
>>https://mevius.5ch.io/test/read.cgi/tech/1786599483/599 ocaml
https://ideone.com/Q1I3uT
・Woofの303がFizzFizzFizz版
・String.fold_leftは4.13以降
・今のideoneは OCaml (ocamlopt 4.05.0)
2026/08/26(水) 23:18:18.65ID:g57AhbG+
2026/08/27(木) 02:59:48.53ID:mXhKqiYf
2026/08/27(木) 03:28:54.64ID:2duuU1zk
対応すべきバリエーションはこれらしい
https://xapn.github.io/fizz-buzz/#fizz-buzz-variations
従来の割れるか classic
文字列化して含むか digits
割れるか含むか boom
割れると含む回数 woof
7と11を加えた popwhack
7,8,11,13を加えた zingchop
https://xapn.github.io/fizz-buzz/#fizz-buzz-variations
従来の割れるか classic
文字列化して含むか digits
割れるか含むか boom
割れると含む回数 woof
7と11を加えた popwhack
7,8,11,13を加えた zingchop
2026/08/27(木) 04:52:02.85ID:ZLNF9QnK
最大公約数の人がピンチ
2026/08/27(木) 05:24:18.52ID:ZLNF9QnK
120120通りの表を作れば行けるはず
12デフォルトの名無しさん
2026/08/27(木) 08:57:42.39ID:cR01dGum 場のオブジェクト指向おじさん星になる
2026/08/27(木) 14:06:06.68ID:MPTEZ6Aa
バリエーションと圏論は相性良さそうな気がするけど出て来ないね
2026/08/27(木) 15:22:19.20ID:zRz8ZAFs
最小限の射へ分解
2026/08/27(木) 18:36:24.91ID:690S30xg
なんだろうね、素数だから数学的におもしろかったのに、
割れると含むとか入ってきて、
さらに8ってのはどこからでてきたものなんだか、2^3ということかな?
「場のオブジェクト指向」では、すべが計算済の「場」とするので、
どうやるかは量子計算での加法の扱いにかかってくる。考え中。まあ、
できたらフィールズとかノーベルとかのレベルだから考えて楽しんでいるだけ笑。
問題は、場の量子論で「加法」をどのようなものとして扱うか、ということ。
割れると含むとか入ってきて、
さらに8ってのはどこからでてきたものなんだか、2^3ということかな?
「場のオブジェクト指向」では、すべが計算済の「場」とするので、
どうやるかは量子計算での加法の扱いにかかってくる。考え中。まあ、
できたらフィールズとかノーベルとかのレベルだから考えて楽しんでいるだけ笑。
問題は、場の量子論で「加法」をどのようなものとして扱うか、ということ。
2026/08/27(木) 18:40:27.89ID:orbJGS24
>>15
zingchopで8で割り切れる時を扱わなければいけなくなって場のオブジェクト指向は破綻したのか~
zingchopで8で割り切れる時を扱わなければいけなくなって場のオブジェクト指向は破綻したのか~
2026/08/27(木) 18:54:44.95ID:690S30xg
場のオブジェクト指向は考え中のものだから、破綻はしていない、むしろ、
今回のようなルールが無限に増える場合に対応するものとして構想している。
ルールに割れるだけはなく、含むが加わった。
しかも、どうやら指数すらも含まれるような感じ。
自然数を表現可能なすべての表記が入るのだろう。n進数も。
自然数限定だが表現論の問題になっている。
今回のようなルールが無限に増える場合に対応するものとして構想している。
ルールに割れるだけはなく、含むが加わった。
しかも、どうやら指数すらも含まれるような感じ。
自然数を表現可能なすべての表記が入るのだろう。n進数も。
自然数限定だが表現論の問題になっている。
2026/08/27(木) 19:02:05.64ID:D3cdieEZ
2026/08/27(木) 19:52:18.64ID:oWHoRr+4
>>9
ざっと縦読み目を通したけどmethoc chainで呼んだ場合の処理とカ書いてあって
結局、各方式ごとの関数なりmethodが要るってことになるし
昨日関数間でコードの共通化できるとことはあんまりない感じだな
ざっと縦読み目を通したけどmethoc chainで呼んだ場合の処理とカ書いてあって
結局、各方式ごとの関数なりmethodが要るってことになるし
昨日関数間でコードの共通化できるとことはあんまりない感じだな
2026/08/27(木) 19:55:08.94ID:Fm6ww48Z
今回の件は全体が見やすいように3つの部分に分けるとプログラムはこれだけだね
type Count = fn(usize, usize) -> usize;
const DIV: Count = |t, n| (t % n == 0) as usize;
const IN: Count = |t, n| t.to_string().contains(&n.to_string()) as usize;
const DIV_OR_IN: Count = |t, n| (t % n == 0 || t.to_string().contains(&n.to_string())) as usize;
const DIV_AND_MULTI_IN: Count = |t, n| (t % n == 0) as usize + t.to_string().split(&n.to_string()).count() - 1;
type Rule<'a> = (Count, &'a[(usize, &'a str)]);
const CLASSIC: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz")]);
const DIGITS: Rule = (IN, &[(3, "Fizz"), (5, "Buzz")]);
const BOOM: Rule = (DIV_OR_IN, &[(3, "Fizz"), (5, "Buzz"), (7, "Boom")]);
const WOOF: Rule = (DIV_AND_MULTI_IN, &[(3, "Fizz"), (5, "Buzz"), (7, "Woof")]);
const POP_WHACK: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (11, "Whack")]);
const ZING_CHOP: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (8, "Zing"), (11, "Whack"), (13, "Chop")]);
struct FizzBuzz<'a>(usize, Rule<'a>);
impl<'a> std::fmt::Display for FizzBuzz<'a> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let FizzBuzz(target, (count, list)) = self;
let mut is_done = false;
for &(number, name) in *list {
for _ in 0..count(*target, number) {
f.write_str(name)?;
is_done = true;
}
}
if !is_done {
write!(f, "{target}")?;
}
Ok(())
}
}
type Count = fn(usize, usize) -> usize;
const DIV: Count = |t, n| (t % n == 0) as usize;
const IN: Count = |t, n| t.to_string().contains(&n.to_string()) as usize;
const DIV_OR_IN: Count = |t, n| (t % n == 0 || t.to_string().contains(&n.to_string())) as usize;
const DIV_AND_MULTI_IN: Count = |t, n| (t % n == 0) as usize + t.to_string().split(&n.to_string()).count() - 1;
type Rule<'a> = (Count, &'a[(usize, &'a str)]);
const CLASSIC: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz")]);
const DIGITS: Rule = (IN, &[(3, "Fizz"), (5, "Buzz")]);
const BOOM: Rule = (DIV_OR_IN, &[(3, "Fizz"), (5, "Buzz"), (7, "Boom")]);
const WOOF: Rule = (DIV_AND_MULTI_IN, &[(3, "Fizz"), (5, "Buzz"), (7, "Woof")]);
const POP_WHACK: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (11, "Whack")]);
const ZING_CHOP: Rule = (DIV, &[(3, "Fizz"), (5, "Buzz"), (7, "Pop"), (8, "Zing"), (11, "Whack"), (13, "Chop")]);
struct FizzBuzz<'a>(usize, Rule<'a>);
impl<'a> std::fmt::Display for FizzBuzz<'a> {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let FizzBuzz(target, (count, list)) = self;
let mut is_done = false;
for &(number, name) in *list {
for _ in 0..count(*target, number) {
f.write_str(name)?;
is_done = true;
}
}
if !is_done {
write!(f, "{target}")?;
}
Ok(())
}
}
2026/08/27(木) 19:57:41.36ID:B+aurL2q
>>20のプログラムの検証
他のプログラムが通してる事例を参考にしました
fn main() {
use itertools::Itertools;
assert_eq!((1..=15).map(|t| FizzBuzz(t, CLASSIC)).join(" "),
"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, DIGITS)).join(" "),
"1 2 Fizz 4 Buzz 6 7 8 9 10 11 12 Fizz 14 Buzz");
assert_eq!(FizzBuzz(35, DIGITS).to_string(), "FizzBuzz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, BOOM)).join(" "),
"1 2 Fizz 4 Buzz Fizz Boom 8 Fizz Buzz 11 Fizz Fizz Boom FizzBuzz");
assert_eq!(FizzBuzz(7539, BOOM).to_string(), "FizzBuzzBoom");
assert_eq!((1..=15).map(|t| FizzBuzz(t, WOOF)).join(" "),
"1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz");
assert_eq!(FizzBuzz(35, WOOF).to_string(), "FizzBuzzBuzzWoof");
assert_eq!(FizzBuzz(303, WOOF).to_string(), "FizzFizzFizz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, POP_WHACK)).join(" "),
"1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz 13 Pop FizzBuzz");
assert_eq!(FizzBuzz(1155, POP_WHACK).to_string(), "FizzBuzzPopWhack");
assert_eq!((1..=15).map(|t| FizzBuzz(t, ZING_CHOP)).join(" "),
"1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz");
assert_eq!(FizzBuzz(120120, ZING_CHOP).to_string(), "FizzBuzzPopZingWhackChop");
}
他のプログラムが通してる事例を参考にしました
fn main() {
use itertools::Itertools;
assert_eq!((1..=15).map(|t| FizzBuzz(t, CLASSIC)).join(" "),
"1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, DIGITS)).join(" "),
"1 2 Fizz 4 Buzz 6 7 8 9 10 11 12 Fizz 14 Buzz");
assert_eq!(FizzBuzz(35, DIGITS).to_string(), "FizzBuzz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, BOOM)).join(" "),
"1 2 Fizz 4 Buzz Fizz Boom 8 Fizz Buzz 11 Fizz Fizz Boom FizzBuzz");
assert_eq!(FizzBuzz(7539, BOOM).to_string(), "FizzBuzzBoom");
assert_eq!((1..=15).map(|t| FizzBuzz(t, WOOF)).join(" "),
"1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz");
assert_eq!(FizzBuzz(35, WOOF).to_string(), "FizzBuzzBuzzWoof");
assert_eq!(FizzBuzz(303, WOOF).to_string(), "FizzFizzFizz");
assert_eq!((1..=15).map(|t| FizzBuzz(t, POP_WHACK)).join(" "),
"1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz 13 Pop FizzBuzz");
assert_eq!(FizzBuzz(1155, POP_WHACK).to_string(), "FizzBuzzPopWhack");
assert_eq!((1..=15).map(|t| FizzBuzz(t, ZING_CHOP)).join(" "),
"1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz");
assert_eq!(FizzBuzz(120120, ZING_CHOP).to_string(), "FizzBuzzPopZingWhackChop");
}
2026/08/27(木) 20:04:52.73ID:B+aurL2q
2026/08/27(木) 20:07:16.28ID:B+aurL2q
2026/08/27(木) 21:26:28.84ID:8QFJ8g/P
結局ルール辞書作ってぶん回すだけ
2026/08/27(木) 21:44:42.61ID:jj+fH9nA
2026/08/27(木) 22:15:46.22ID:5F56ltBp
>>9 ocaml
https://ideone.com/iRLbSx
・>>6から若干の改善
・判定につかってたcontains,countの実装が簡易的だったので整数比較版に差し替え
・結果のリストに対するinspect関数つくっといた
to_s関数を`List xsに対応させてみたりしたけどなんか使い勝手が悪かったのでこっちにした
https://ideone.com/iRLbSx
・>>6から若干の改善
・判定につかってたcontains,countの実装が簡易的だったので整数比較版に差し替え
・結果のリストに対するinspect関数つくっといた
to_s関数を`List xsに対応させてみたりしたけどなんか使い勝手が悪かったのでこっちにした
2026/08/27(木) 23:10:16.64ID:JGcFzlP+
もしやこのコードは
>>26
let count m n =
let m, n = abs m, abs n in
let d = if n = 0 then 10 else int_of_float (10. ** (1.0 +. (floor (log10 (float_of_int n))))) in
let rec aux acc = function
0 -> acc
| m -> aux (if m mod d = n then acc + 1 else acc) (m / 10)
in if m = n then 1 else aux 0 m
let contains m n = 0 < count m n
>>26
let count m n =
let m, n = abs m, abs n in
let d = if n = 0 then 10 else int_of_float (10. ** (1.0 +. (floor (log10 (float_of_int n))))) in
let rec aux acc = function
0 -> acc
| m -> aux (if m mod d = n then acc + 1 else acc) (m / 10)
in if m = n then 1 else aux 0 m
let contains m n = 0 < count m n
2026/08/28(金) 00:57:49.88ID:JtiuId7a
今のところ前スレ>>938が一番まともやな
変換辞書と変換ロジックのセットとして扱ってればなお良かった
にしても不必要なcount変数やflag変数を導入するやつとか
ToString()にドメインロジックを全部突っ込むやつとか
おかしなやつが多いな
変換辞書と変換ロジックのセットとして扱ってればなお良かった
にしても不必要なcount変数やflag変数を導入するやつとか
ToString()にドメインロジックを全部突っ込むやつとか
おかしなやつが多いな
2026/08/28(金) 01:03:24.74ID:G07hbVrD
938を見たら145行もあった
動作確認printしてるmain関数8行を除いても130行以上ある
動作確認printしてるmain関数8行を除いても130行以上ある
2026/08/28(金) 01:14:03.41ID:V1qxHZLT
行数が多いとその分稼げるから
2026/08/28(金) 01:54:07.21ID:ejEAHwUa
32デフォルトの名無しさん
2026/08/28(金) 10:59:36.72ID:vRP1YcXq >>20
これはRust? OCamlかと思った
これはRust? OCamlかと思った
2026/08/28(金) 11:05:17.28ID:jFdmEMQD
>>31
神クラスならぬ神toStringか
神クラスならぬ神toStringか
2026/08/28(金) 15:22:57.83ID:/07wmBHQ
>>28
その938もToStringする関数にメインロジックを書いてるけど938をお気に入りな理由は何?
その938もToStringする関数にメインロジックを書いてるけど938をお気に入りな理由は何?
2026/08/28(金) 17:14:26.88ID:rzP/gEC0
文字列にする関数とドメインロジックを分けることがそもそも可能なのかね?
2026/08/28(金) 17:19:54.32ID:AdOWYx/j
javaのtoString()はデバッガでも表示に使用されるため、
オブジェクトの区別がつけられるユニークな内容のみで使用するのが望ましい。
できればデバッグ用以外には使用しない。
デバッグで必要となるため、
すべてのオブジェクトは、toString()でオブジェクトの文字列表現を正しく返すように実装すべき。
オブジェクトの区別がつけられるユニークな内容のみで使用するのが望ましい。
できればデバッグ用以外には使用しない。
デバッグで必要となるため、
すべてのオブジェクトは、toString()でオブジェクトの文字列表現を正しく返すように実装すべき。
2026/08/28(金) 17:31:27.47ID:ZVKaIJD5
唐突に何だろ
そんなレベルの問題を起こしてるコードはこのスレで見たことない
そんなレベルの問題を起こしてるコードはこのスレで見たことない
2026/08/28(金) 18:32:32.01ID:AdOWYx/j
extends is evilの潜在的バグはtoString()用法の間違いが一番多いので。
2026/08/28(金) 18:37:55.90ID:faseFIiy
それは文字列化とデバッグ用を混乱しているJavaの問題
オブジェクト指向プログラミングとは無関係
オブジェクト指向プログラミングとは無関係
2026/08/28(金) 23:12:32.16ID:IC5ebjaM
いつもJavaの仕様や方針が足を引っ張ってるような
2026/08/29(土) 01:52:38.70ID:vvNmpd5E
javaは単純化しようとしてかえって初心者には扱えないものになってしまった。
toString()の例は、オブジェクト指向(設計)の例で、
設計や、実装の段階では、指示しているオブジェクトが正しいつもりでも、
実際に実行してみると、想定とは異なったオブジェクトにメッセージを投げていたりする。
相手だけではなく、自分自身も設計・実装時に想定していた自分(this)とは違う自分(this)
になっていたりする。
手続き型の現物プログラミングやスクリプト言語ばかりやっていたりすると、
オブジェクト指向の抽象プログラミングでバグる。
設計が正しくても、実装する側が手続き型しか使ったことがなかったりすると、確実にバグが発生する。
toString()の例は、オブジェクト指向(設計)の例で、
設計や、実装の段階では、指示しているオブジェクトが正しいつもりでも、
実際に実行してみると、想定とは異なったオブジェクトにメッセージを投げていたりする。
相手だけではなく、自分自身も設計・実装時に想定していた自分(this)とは違う自分(this)
になっていたりする。
手続き型の現物プログラミングやスクリプト言語ばかりやっていたりすると、
オブジェクト指向の抽象プログラミングでバグる。
設計が正しくても、実装する側が手続き型しか使ったことがなかったりすると、確実にバグが発生する。
2026/08/29(土) 06:05:43.95ID:TS4tMF6R
「オブジェクト指向の抽象プログラミング」
「確実にバグが発生する」
「確実にバグが発生する」
2026/08/29(土) 06:08:45.54ID:TS4tMF6R
「Javaによく慣れて精通していないと嵌る落とし穴のある言語だ」
くらいに抽象化して言えないのかな
くらいに抽象化して言えないのかな
2026/08/29(土) 06:11:22.93ID:TS4tMF6R
よく慣れて精通していないと嵌る落とし穴満載の言語で最たるものはC++が王様だな
いや、たとえ精通していても…
いや、たとえ精通していても…
2026/08/29(土) 07:52:16.86ID:TS4tMF6R
特に何も抽象化していないいのに抽象化という言葉を使うのはやめましょうよ
ものすごい違和感というかもはや不快感を覚える
ものすごい違和感というかもはや不快感を覚える
2026/08/29(土) 09:17:10.24ID:vvNmpd5E
オブジェクト指向(設計)とは抽象化ですよ。
オブジェクト指向言語は抽象化言語。
オブジェクトやメッセージに抽象化することで状態や実装を隠ぺいする手法なのです。
オブジェクト指向言語は抽象化言語。
オブジェクトやメッセージに抽象化することで状態や実装を隠ぺいする手法なのです。
2026/08/29(土) 09:23:35.17ID:vvNmpd5E
javaは単純化したのが命取りのようではあるが、
手続き型中心のオールドプログラマを攪乱し、リバースエンジニアリングさせない効果はある。
手続き型中心のオールドプログラマを攪乱し、リバースエンジニアリングさせない効果はある。
48デフォルトの名無しさん
2026/08/29(土) 09:36:07.10ID:aWidT367 parseIntが面倒糞かった
2026/08/29(土) 09:57:03.79ID:AkEEaDxp
どちらかというと、手続型(命令型)と関数型(宣言型)が対立的な概念で、オブジェクト指向は手続型の範疇というイメージかな。もっとも、関数型(宣言型)の良いところを部分的にではあれ取り入れようという動きは顕著よね。
手続型(命令型)の書き方をベースに書くときに、どの程度オブジェクト指向的な書き方をするかと、どの程度関数型的な考え方を取り入れるかはそれぞれ独立のことだと思う。
手続型(命令型)の書き方をベースに書くときに、どの程度オブジェクト指向的な書き方をするかと、どの程度関数型的な考え方を取り入れるかはそれぞれ独立のことだと思う。
2026/08/29(土) 10:06:37.01ID:0Mn9C3Co
51デフォルトの名無しさん
2026/08/29(土) 10:27:55.15ID:fZdYpOMd オブジェクト=タスクマシン
他のプログラムに干渉されずに独立してプログラムを実行できる仕組み、ならいいんだが
delay()使っても止まってるのはそこだけで、他を止めない
他のプログラムに干渉されずに独立してプログラムを実行できる仕組み、ならいいんだが
delay()使っても止まってるのはそこだけで、他を止めない
2026/08/29(土) 10:30:24.25ID:f/1ZU8tv
>>51
それは非同期並行タスクとしてそれを持つ各言語で実現されてる
それは非同期並行タスクとしてそれを持つ各言語で実現されてる
53デフォルトの名無しさん
2026/08/29(土) 10:53:35.90ID:fZdYpOMd2026/08/29(土) 10:59:38.34ID:3IaJuUID
>>50
関数型の考え方を取り入れるというので想定していたのは、純粋でない関数はできるだけ減らすとか、高階関数を活用するとかの素朴な考え方だけど、これらはオブジェクト指向の直接的な関心事ではないでしょう。オブジェクト指向でも取り入れることはできるけど。
いわゆるメソッドチェーンは、それ自体としては宣言的になる場合もあれば、命令的になる場合もあるんじゃないかな。
関数型の考え方を取り入れるというので想定していたのは、純粋でない関数はできるだけ減らすとか、高階関数を活用するとかの素朴な考え方だけど、これらはオブジェクト指向の直接的な関心事ではないでしょう。オブジェクト指向でも取り入れることはできるけど。
いわゆるメソッドチェーンは、それ自体としては宣言的になる場合もあれば、命令的になる場合もあるんじゃないかな。
2026/08/29(土) 11:34:40.00ID:423ljc0S
宣言的な度合いに相対的な高低差があるというだけ
2026/08/29(土) 12:40:11.16ID:TS4tMF6R
何か抽象的なような煙に巻くような言い方だなw
2026/08/29(土) 12:49:02.40ID:TS4tMF6R
2026/08/29(土) 12:52:07.49ID:TS4tMF6R
他の言語やパラダイムも勉強して視野広げたほうが良いと思うの
それから、客観的にものを見られるようになったり、合理的に考えたりする力の訓練もね
それから、客観的にものを見られるようになったり、合理的に考えたりする力の訓練もね
2026/08/29(土) 14:38:46.17ID:vvNmpd5E
まあ、どうのこうのといっても、手続き型言語も抽象化されたものだし、
CPUやGPUなども抽象化されたものだし、
その意味では、最初からオブジェクト指向で設計されているともいえる。
数学的な理論づけとしては圏論も欠かせない。
が、これから重要なのは情報理論。それはエネルギー論でもあり、場の量子論でもある、ということ。
CPUやGPUなども抽象化されたものだし、
その意味では、最初からオブジェクト指向で設計されているともいえる。
数学的な理論づけとしては圏論も欠かせない。
が、これから重要なのは情報理論。それはエネルギー論でもあり、場の量子論でもある、ということ。
2026/08/29(土) 14:42:32.22ID:TS4tMF6R
場のおじさんだったかw
2026/08/29(土) 14:44:31.67ID:TS4tMF6R
CPUやGPUは尤も生々しい具現だチューにw
あんた、場だの論だの抽象だの既存の権威付けられた言葉の印象に憧れてるか酔ってるだけでは?
あんた、場だの論だの抽象だの既存の権威付けられた言葉の印象に憧れてるか酔ってるだけでは?
2026/08/29(土) 14:53:07.22ID:rNNd9weC
>>9 java
https://ideone.com/DCrHR4
・Woofの303がFizzFizzFizz版
・countは正規表現つかって実装
・clone, list(b, e)メソッド追加
>>9 ruby
https://ideone.com/1G57lm
・Woofの303がFizzFizzFizz版
・countは正規表現つかって実装
https://ideone.com/DCrHR4
・Woofの303がFizzFizzFizz版
・countは正規表現つかって実装
・clone, list(b, e)メソッド追加
>>9 ruby
https://ideone.com/1G57lm
・Woofの303がFizzFizzFizz版
・countは正規表現つかって実装
2026/08/29(土) 15:59:58.58ID:vvNmpd5E
勉強不足ですなー。CPU/GPUは抽象計算機を物理的に実装したものですよ。
計算モデルに従います。
計算モデルに従います。
2026/08/29(土) 16:24:33.04ID:TS4tMF6R
CPU/GPUもやっぱり場の理論によって動作しているのですか?
2026/08/29(土) 16:30:25.43ID:TS4tMF6R
場の理論といえばやっぱりランダウのバコテン(場の古典論)、QEDはFeynmanが懐かしい
2026/08/29(土) 16:34:22.45ID:TS4tMF6R
論的量子力学・QFDはBjorken Drell、QCDはFeynman
67デフォルトの名無しさん
2026/08/29(土) 18:32:43.11ID:KuxNJihv オブジェクト指向はオワコン?
んなこたーない
んなこたーない
2026/08/29(土) 19:17:04.88ID:vvNmpd5E
>>64
ま、量子世界にいるわけですから、いまのところ場の量子論で動作しているということでも
いいわけですが、量子レベルの現象を直接扱っているわけではないと。
現在の計算モデルは、何世代目かの宇宙における構造(カラビヤウ多様体)に起因していると考えております。
ま、量子世界にいるわけですから、いまのところ場の量子論で動作しているということでも
いいわけですが、量子レベルの現象を直接扱っているわけではないと。
現在の計算モデルは、何世代目かの宇宙における構造(カラビヤウ多様体)に起因していると考えております。
2026/08/29(土) 19:35:44.90ID:j0hb6XXF
オブジェクトンとオブジェクティーノの対称性
2026/08/29(土) 22:02:37.14ID:d/nwX98j
>>32
その通りRustだよ
>>36
Rustは3つのインターフェースに分かれてるよ
trait Debug デバック表示用の文字列化
trait Display 通常の文字列化
trait ToString 通常の文字列化+文字列型Stringに格納するためのメモリ確保
文字列型へのToStringはこのように非常に重い処理なので分離されてる
表示や既存文字列への追記は中間生成Stringを作ると無駄だからね
プログラマはDisplayを実装すればToStringは自動実装されるよ
Debugはそれらと独立のもので自分でも実装していいけど
各型の宣言に #[derive(Debug)] を修飾すると機械的に自動実装してくれる
その通りRustだよ
>>36
Rustは3つのインターフェースに分かれてるよ
trait Debug デバック表示用の文字列化
trait Display 通常の文字列化
trait ToString 通常の文字列化+文字列型Stringに格納するためのメモリ確保
文字列型へのToStringはこのように非常に重い処理なので分離されてる
表示や既存文字列への追記は中間生成Stringを作ると無駄だからね
プログラマはDisplayを実装すればToStringは自動実装されるよ
Debugはそれらと独立のもので自分でも実装していいけど
各型の宣言に #[derive(Debug)] を修飾すると機械的に自動実装してくれる
2026/08/29(土) 22:10:23.07ID:d/nwX98j
FizzBuzzへのtrait Displayの実装例が >>20
コストの高いメモリ確保処理は分離されて純粋な文字列化処理のみになってるよ
Rustはこれが標準で数値などのプリミティブ型も全てtrait Displayを実装
こうすることで何がメリットかというと
例えば >>21 のこの処理
「1から15までのBizzFizzの結果をスペースで繋げて1つの文字列にするコード」
(1..=15).map(|t| FizzBuzz(t, CLASSIC)).join(" ")
よくある15個のStringを生成してそれらを繋げて1つのStringを作るのと比べて
join()はtrait Display実装型を受け付けるため一気に1つのStringのみ作ります
15個の中間生成Stringのメモリ確保と生成を省くことができてます
これはjoin()に限らずprint!系なども同様です
コストの高いメモリ確保処理は分離されて純粋な文字列化処理のみになってるよ
Rustはこれが標準で数値などのプリミティブ型も全てtrait Displayを実装
こうすることで何がメリットかというと
例えば >>21 のこの処理
「1から15までのBizzFizzの結果をスペースで繋げて1つの文字列にするコード」
(1..=15).map(|t| FizzBuzz(t, CLASSIC)).join(" ")
よくある15個のStringを生成してそれらを繋げて1つのStringを作るのと比べて
join()はtrait Display実装型を受け付けるため一気に1つのStringのみ作ります
15個の中間生成Stringのメモリ確保と生成を省くことができてます
これはjoin()に限らずprint!系なども同様です
2026/08/30(日) 00:00:26.48ID:yu9ZFHyT
自然数の文字化だけだとユニークで一対一なのでフェルミだ。
これを3の倍数とか5の倍数とかで文字化すると、そこは複数の値が同じ文字になるのでボゾンだ。
量子統計が異なる。
で、フェルミが積で、ボゾンが和だ。場の量子論から、そうなる。(かなりすっ飛ばした結論笑)
区別がつくものは積であらわされ、区別がつかないものは和であらわされる。
積と和がハイブリッドしたもの...それはアレだ!(ホントかどうか調査中)
これを3の倍数とか5の倍数とかで文字化すると、そこは複数の値が同じ文字になるのでボゾンだ。
量子統計が異なる。
で、フェルミが積で、ボゾンが和だ。場の量子論から、そうなる。(かなりすっ飛ばした結論笑)
区別がつくものは積であらわされ、区別がつかないものは和であらわされる。
積と和がハイブリッドしたもの...それはアレだ!(ホントかどうか調査中)
73デフォルトの名無しさん
2026/08/30(日) 09:43:55.16ID:bKWi44d12026/08/30(日) 09:49:33.46ID:w2cYbX0h
75デフォルトの名無しさん
2026/08/30(日) 09:58:51.17ID:bKWi44d1 手続き型で普通のシンプルな条件処理で済むじゃん
2026/08/30(日) 10:08:44.94ID:ojN7H2ox
77デフォルトの名無しさん
2026/08/30(日) 10:23:40.42ID:bKWi44d1 BizzFizzの話題になった初期に出てるじゃん
2026/08/30(日) 10:41:12.00ID:1YnRSpXX
>>73
オブジェクト指向によってその無駄なCPUの作業を減らしている好例だよ
「文字列型への変換」という格納メモリ確保を伴う重い作業から
「純粋に文字列への変換のみ」を別のインターフェースとして切り出している
そうすることで無駄な一時的な文字列型の生成を防ぐことができているよ
オブジェクト指向によってその無駄なCPUの作業を減らしている好例だよ
「文字列型への変換」という格納メモリ確保を伴う重い作業から
「純粋に文字列への変換のみ」を別のインターフェースとして切り出している
そうすることで無駄な一時的な文字列型の生成を防ぐことができているよ
2026/08/30(日) 10:43:29.99ID:aK1yIV+Q
>>74
「何が」オブジェクト指向だから実現できてるの?
「何が」オブジェクト指向だから実現できてるの?
2026/08/30(日) 10:55:27.68ID:1YnRSpXX
オブジェクト指向によって
全ての型に対して「(メモリ確保を伴わない)純粋な文字列化変換」という共通インターフェース(trait Display)を設けて各型がそれを実装しています
それを用いて「(メモリ確保を伴う)文字列型への変換」という共通インターフェース(trait ToString)が全ての型に自動実装されます
この両者の分離により無駄なCPU処理と無駄な一時メモリ確保を防いでいます
全ての型に対して「(メモリ確保を伴わない)純粋な文字列化変換」という共通インターフェース(trait Display)を設けて各型がそれを実装しています
それを用いて「(メモリ確保を伴う)文字列型への変換」という共通インターフェース(trait ToString)が全ての型に自動実装されます
この両者の分離により無駄なCPU処理と無駄な一時メモリ確保を防いでいます
2026/08/30(日) 11:14:54.65ID:aK1yIV+Q
82デフォルトの名無しさん
2026/08/30(日) 11:26:45.55ID:ObqeWEXz 一般的にオブジェクト指向を使わないとインターフェイス抽象型による共通の扱いができないから各々の型でバラバラにやることになって破綻だよな
2026/08/30(日) 11:40:06.08ID:s//RVPFN
複数の異なる型を同じメソッドで呼び出しできる
これがオブジェクト指向の最大の利点だ
これがオブジェクト指向の最大の利点だ
2026/08/30(日) 11:55:44.13ID:G2IJmQcd
多相性は型システムの問題のような気もするけど。
2026/08/30(日) 12:20:44.08ID:fii30PKr
単なる多相性だと型を横断しての共通呼び出しが保証されない
86デフォルトの名無しさん
2026/08/30(日) 12:22:49.81ID:sEhy0si7 >>49
無駄なこだわり主張して現場を困らせるやつの典型例だな
無駄なこだわり主張して現場を困らせるやつの典型例だな
2026/08/30(日) 12:59:42.79ID:yu9ZFHyT
手続き型が小汚いので、各オブジェクト指向系言語は工夫しているが、
ダメなものはダメで、さらに小汚いものが書かれて、それをオブジェクト指向のせいにしている。
Why extends is evil が、その典型的な例で、最後にはなにも解決せず、さらに悪化させたまま
終わっている。そこには絶望しか残っていない。
手続き型でも、キレイにかけるやつはかけるのだが...残念なプログラマが多い。
プログラムは文学的/文芸的であるが、叙述ミステリーであっては困る。
ダメなものはダメで、さらに小汚いものが書かれて、それをオブジェクト指向のせいにしている。
Why extends is evil が、その典型的な例で、最後にはなにも解決せず、さらに悪化させたまま
終わっている。そこには絶望しか残っていない。
手続き型でも、キレイにかけるやつはかけるのだが...残念なプログラマが多い。
プログラムは文学的/文芸的であるが、叙述ミステリーであっては困る。
2026/08/30(日) 14:57:11.05ID:pFZkzj89
>>9 java
https://ideone.com/C9Cmel
・Woofの303がFizzFizzFizz版
・OOPらしく(?)継承でなんとかするやつ
・委譲でなんとかするやつは>>62
>>9 octave
https://ideone.com/MXBicD
・Woofの303がFizzFizzFizz版
・Java版のRuby移植のOCaml移植のOctave移植
・ほかの言語のクセが混入しちゃってOctaveらしくないかも
https://ideone.com/C9Cmel
・Woofの303がFizzFizzFizz版
・OOPらしく(?)継承でなんとかするやつ
・委譲でなんとかするやつは>>62
>>9 octave
https://ideone.com/MXBicD
・Woofの303がFizzFizzFizz版
・Java版のRuby移植のOCaml移植のOctave移植
・ほかの言語のクセが混入しちゃってOctaveらしくないかも
2026/08/30(日) 16:03:46.74ID:nFoXKPIw
use v5.36; use utf8;
my %h = ( 3=>'Fizz', 5=>'Buzz', 7=>'Boom/Woof/Pop', 8=>'Zing', 11=>'Whack', 13=>'Chop' );
sub 割り切れる($n, $d){ 0 == $n % $d }
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
sub 割り切れれば変換($n, @s){ join '', map{ $h{$_} if 割り切れる($n, $_) } @s }
sub 桁に含むなら変換($n, @s){ join '', map{ $h{$_} if 0 < 桁に含む個数($n, $_) } @s }
sub Classic{ map{ 割り切れれば変換($_, 3, 5) or $_ } @_ };
sub Digits{ map{ 桁に含むなら変換($_, 3, 5) or $_ } @_ };
sub Boom{ $h{7} = 'Boom'; map{ my $n = $_;
join('', map {$h{$_} if 割り切れる($n, $_) or 0 < 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
sub Woof{ $h{7} = 'Woof'; map{ my $n = $_;
join('', map {割り切れる($n, $_) and $h{$_} . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
sub Pop_Whack{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11) or $_ } @_ };
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11,13) or $_ } @_ };
# test main
do { my ($func, @args) = @$_;
say "@{[$func->(@args)]}" }
for [\&Classic, 1...15], [\&Digits , 1...15, 35], [\&Boom , 1...15, 7539], [\&Woof , 1...15, 35, 303],
[\&Pop_Whack, 1...15, 1155], [\&Pop_Whack_Zing_Chop, 1...15, 120120];
※closureや関数の部分適用などOOPSやFunctional的な仕組みを使ってみようかと思ったけど、使うまでもなかった
my %h = ( 3=>'Fizz', 5=>'Buzz', 7=>'Boom/Woof/Pop', 8=>'Zing', 11=>'Whack', 13=>'Chop' );
sub 割り切れる($n, $d){ 0 == $n % $d }
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
sub 割り切れれば変換($n, @s){ join '', map{ $h{$_} if 割り切れる($n, $_) } @s }
sub 桁に含むなら変換($n, @s){ join '', map{ $h{$_} if 0 < 桁に含む個数($n, $_) } @s }
sub Classic{ map{ 割り切れれば変換($_, 3, 5) or $_ } @_ };
sub Digits{ map{ 桁に含むなら変換($_, 3, 5) or $_ } @_ };
sub Boom{ $h{7} = 'Boom'; map{ my $n = $_;
join('', map {$h{$_} if 割り切れる($n, $_) or 0 < 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
sub Woof{ $h{7} = 'Woof'; map{ my $n = $_;
join('', map {割り切れる($n, $_) and $h{$_} . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
sub Pop_Whack{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11) or $_ } @_ };
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11,13) or $_ } @_ };
# test main
do { my ($func, @args) = @$_;
say "@{[$func->(@args)]}" }
for [\&Classic, 1...15], [\&Digits , 1...15, 35], [\&Boom , 1...15, 7539], [\&Woof , 1...15, 35, 303],
[\&Pop_Whack, 1...15, 1155], [\&Pop_Whack_Zing_Chop, 1...15, 120120];
※closureや関数の部分適用などOOPSやFunctional的な仕組みを使ってみようかと思ったけど、使うまでもなかった
2026/08/30(日) 16:04:05.95ID:nFoXKPIw
実行結果
~ $ perl FizzBuzz_variations-26830.pl
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
1 2 Fizz 4 Buzz 6 7 8 9 10 11 12 Fizz 14 Buzz FizzBuzz
1 2 Fizz 4 Buzz Fizz Boom 8 Fizz Buzz 11 Fizz Fizz Boom FizzBuzz FizzBuzzBoom
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz 13 Woof FizzBuzzBuzz BuzzBuzzWoof FizzFizzFizz
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz 13 Pop FizzBuzz FizzBuzzPopWhack
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz Chop Pop FizzBuzz FizzBuzzPopWhackChop
~ $ perl FizzBuzz_variations-26830.pl
1 2 Fizz 4 Buzz Fizz 7 8 Fizz Buzz 11 Fizz 13 14 FizzBuzz
1 2 Fizz 4 Buzz 6 7 8 9 10 11 12 Fizz 14 Buzz FizzBuzz
1 2 Fizz 4 Buzz Fizz Boom 8 Fizz Buzz 11 Fizz Fizz Boom FizzBuzz FizzBuzzBoom
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz 13 Woof FizzBuzzBuzz BuzzBuzzWoof FizzFizzFizz
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz 13 Pop FizzBuzz FizzBuzzPopWhack
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz Chop Pop FizzBuzz FizzBuzzPopWhackChop
2026/08/30(日) 17:17:51.85ID:G2IJmQcd
おー、octaveって初めて見た。
92デフォルトの名無しさん
2026/08/30(日) 17:47:10.29ID:VHTnCP+C >>90
むむ、4番目と6番目の結果が違う
4番目
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz
6番目
1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz
むむ、4番目と6番目の結果が違う
4番目
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz
6番目
1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz
93デフォルトの名無しさん
2026/08/30(日) 17:51:20.98ID:VHTnCP+C2026/08/30(日) 18:03:05.38ID:OVNPbs7t
2026/08/30(日) 18:12:51.52ID:nFoXKPIw
96デフォルトの名無しさん
2026/08/30(日) 18:21:22.01ID:VHTnCP+C97デフォルトの名無しさん
2026/08/30(日) 18:27:01.52ID:VHTnCP+C >>95
4行目
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz 13 Woof FizzBuzzBuzz
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz
6行目
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz Chop Pop FizzBuzz
1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz
4行目
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz 13 Woof FizzBuzzBuzz
1 2 FizzFizz 4 BuzzBuzz Fizz WoofWoof 8 Fizz Buzz 11 Fizz Fizz Woof FizzBuzzBuzz
6行目
1 2 Fizz 4 Buzz Fizz Pop 8 Fizz Buzz Whack Fizz Chop Pop FizzBuzz
1 2 Fizz 4 Buzz Fizz Pop Zing Fizz Buzz Whack Fizz Chop Pop FizzBuzz
98デフォルトの名無しさん
2026/08/30(日) 18:36:25.60ID:VHTnCP+C FizzBuzzのプログラムを書いてみるとデータと操作は分けた方がいんじゃないかという思いが強まるよな
なんでもかんでもオブジェクトにするのが旧オブジェクト指向だとすると
データ構造や言語機能の補間のためにオブジェクトを作るのが新オブジェクト指向なのかもしれない
なんでもかんでもオブジェクトにするのが旧オブジェクト指向だとすると
データ構造や言語機能の補間のためにオブジェクトを作るのが新オブジェクト指向なのかもしれない
9988
2026/08/30(日) 18:40:43.56ID:pFZkzj89 >>91
octaveに三項演算子があるか
ifが式で値を返せるようになってたらなあ
x = {b m}(1 + isempty(b)); ←こんなこと書きたくはなくて
x = isempty(b) ? m : b; ←こう書けたり
x = if isempty(b) then m else b; ←こう書けたらなあ!
x = ifelse(isempty(b), m, b); ←こうは書けるみたいだけど欲しいものとはまた違うし
それ以外は良い言語だお( ^ω^)
いっしょに行列グリグリしようず
octaveに三項演算子があるか
ifが式で値を返せるようになってたらなあ
x = {b m}(1 + isempty(b)); ←こんなこと書きたくはなくて
x = isempty(b) ? m : b; ←こう書けたり
x = if isempty(b) then m else b; ←こう書けたらなあ!
x = ifelse(isempty(b), m, b); ←こうは書けるみたいだけど欲しいものとはまた違うし
それ以外は良い言語だお( ^ω^)
いっしょに行列グリグリしようず
100デフォルトの名無しさん
2026/08/30(日) 18:45:49.35ID:0eUqQftJ101デフォルトの名無しさん
2026/08/30(日) 18:46:09.73ID:nFoXKPIw >>97
指摘ありがとう。
>>90の4行目で13がFizzにならず13がそのまま出力されていたのは、演算子優先順位の影響を見落とたbugだった。
>>89の16行目sub Woof{ 内式を ()でくくって明示しFix
join('', map {割り切れる($n, $_) and $h{$_} . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
↓ ↓
join('', map {(割り切れる($n, $_) and $h{$_}) . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
6行目で8がZingにならなかったのは、sub Pop_Whack_Zing_Chop で8を変換対象として「割り切れれば変換()」
の引数に指定漏れていた。8を追加しfix
>>89の18行目sub Pop_Whack_Zing_Chop{ 内修正
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11,13) or $_ } @_ };
↓
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,8,11,13) or $_ } @_ };
指摘ありがとう。
>>90の4行目で13がFizzにならず13がそのまま出力されていたのは、演算子優先順位の影響を見落とたbugだった。
>>89の16行目sub Woof{ 内式を ()でくくって明示しFix
join('', map {割り切れる($n, $_) and $h{$_} . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
↓ ↓
join('', map {(割り切れる($n, $_) and $h{$_}) . $h{$_} x 桁に含む個数($n, $_)} 3,5,7) or $n} @_ };
6行目で8がZingにならなかったのは、sub Pop_Whack_Zing_Chop で8を変換対象として「割り切れれば変換()」
の引数に指定漏れていた。8を追加しfix
>>89の18行目sub Pop_Whack_Zing_Chop{ 内修正
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,11,13) or $_ } @_ };
↓
sub Pop_Whack_Zing_Chop{ $h{7} = 'Pop'; map{ 割り切れれば変換($_, 3,5,7,8,11,13) or $_ } @_ };
102デフォルトの名無しさん
2026/08/30(日) 21:49:58.37ID:1VBoMoHZ >>68
ウィック回転することでFizzBuzzの時間の流れから時間を消し去ることが可能
ウィック回転することでFizzBuzzの時間の流れから時間を消し去ることが可能
103デフォルトの名無しさん
2026/08/30(日) 23:13:56.38ID:nFoXKPIw >>90
スマソ、もう一個軽微なBugあった。
6行目
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
↓$_を $d に修正
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$d/g) } # $n =~ tr/$d//r
ただ、このBug $_でも解は合うんだよね。
上位関数から呼び出すとき、第二引数に $_ を渡すため、下位関数で引数 $d のかわりに $_ を参照してもたまたま動いちゃってたというだけ。
スマソ、もう一個軽微なBugあった。
6行目
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
↓$_を $d に修正
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$d/g) } # $n =~ tr/$d//r
ただ、このBug $_でも解は合うんだよね。
上位関数から呼び出すとき、第二引数に $_ を渡すため、下位関数で引数 $d のかわりに $_ を参照してもたまたま動いちゃってたというだけ。
104デフォルトの名無しさん
2026/08/30(日) 23:14:56.82ID:nFoXKPIw105デフォルトの名無しさん
2026/08/30(日) 23:53:34.12ID:qC15D614 >>103
それ13などの二桁以上の数字に対応できる?
それ13などの二桁以上の数字に対応できる?
106デフォルトの名無しさん
2026/08/31(月) 00:35:28.43ID:tntwyj6H 「各桁に含まれる数字か」というルールについては、元のルール(>>9)自体が、2桁以上の数字を想定してないと思うよ。11とか13を基準の数字とするpopwhackとzingchopは「割り切れるか」の方のみを判定条件にしているし。
仮に2桁以上の数字についても「含まれるか」ルールでの判定をするのであれば、たとえば111に11が含まれる回数を1回と考えるのか、2回と考えるのか決めておく必要があると思う。
仮に2桁以上の数字についても「含まれるか」ルールでの判定をするのであれば、たとえば111に11が含まれる回数を1回と考えるのか、2回と考えるのか決めておく必要があると思う。
107デフォルトの名無しさん
2026/08/31(月) 00:43:20.22ID:+bGT1gjN よくある常識的なルール
消費した分を再び使うことはできないものとする
によって曖昧性を排除できるかと
消費した分を再び使うことはできないものとする
によって曖昧性を排除できるかと
108デフォルトの名無しさん
2026/08/31(月) 00:57:01.67ID:KkBmS56/109デフォルトの名無しさん
2026/08/31(月) 01:02:10.46ID:JrQHErEH 重複していても異なるなら数えることならば3030303030に303は4つ?
110デフォルトの名無しさん
2026/08/31(月) 05:21:09.57ID:usIhtj1J 正規表現で数えましょ
111デフォルトの名無しさん
2026/08/31(月) 07:04:04.68ID:2YFuE0Fh 決めなくて良くないか?オブジェクト指向と関係あるとは思えない
112デフォルトの名無しさん
2026/08/31(月) 10:08:17.89ID:sYRPiWSA 2桁以上の数字の「含まれる」基準の解釈を、オーバーラップ許容型(部分文字列として含めばすべてカウントする)かオーバーラップ非許容型(消費した部分文字列は再利用不可とする)かのどちらかに決めてそのとおりに実装するというのは別に難しいことではないだろうけど、拡張FizzBuzzルールとしてはどちらでもいい枝葉末節の話だからね。前スレの942(Woofルールは303をFizzFizzFizzに変換するのではないか)のような本質的な指摘とは異なる。
2桁以上の数字の「含まれる」基準の判定にも対応するべきだ、その際の基準はオーバーラップ許容型(あるいはオーバーラップ非許容型)であるべきだという主張をすること自体は別に否定しないけど、元の要求仕様(>>9)に含まれている内容ではないから、個人的にはどうでもいい話だと思う。やりたい人がやればいいのでは。
2桁以上の数字の「含まれる」基準の判定にも対応するべきだ、その際の基準はオーバーラップ許容型(あるいはオーバーラップ非許容型)であるべきだという主張をすること自体は別に否定しないけど、元の要求仕様(>>9)に含まれている内容ではないから、個人的にはどうでもいい話だと思う。やりたい人がやればいいのでは。
113デフォルトの名無しさん
2026/08/31(月) 10:10:44.66ID:pKa9hXJS 口達者やなー
114デフォルトの名無しさん
2026/08/31(月) 10:33:29.77ID:2mcd7+/H 元々の話は想定される仕様拡張にオブジェクト指向プログラミングなら対応できるのか?で始まったのがFizzBuzz拡張
だから今回の仕様拡張『2桁以上の数字が含まれる場合』が『その含まれるがオーバーラップを許す場合と許さない場合それぞれを実装』にも対応できるか試されるところ
対応できなければ失格だろう
だから今回の仕様拡張『2桁以上の数字が含まれる場合』が『その含まれるがオーバーラップを許す場合と許さない場合それぞれを実装』にも対応できるか試されるところ
対応できなければ失格だろう
115デフォルトの名無しさん
2026/08/31(月) 10:37:57.07ID:Jy5vPfka エクセルの表でスマートに作れる
116デフォルトの名無しさん
2026/08/31(月) 10:46:18.26ID:2YFuE0Fh >>114
ほお、ではお前が対応できるか見てやろう、やってみろ
ほお、ではお前が対応できるか見てやろう、やってみろ
117デフォルトの名無しさん
2026/08/31(月) 10:46:40.17ID:2YFuE0Fh >>113
お前もだ、お前もやれ
お前もだ、お前もやれ
118デフォルトの名無しさん
2026/08/31(月) 10:46:57.83ID:2YFuE0Fh 俺がオブジェクト指向審査委員長をやる
119デフォルトの名無しさん
2026/08/31(月) 10:47:06.67ID:2YFuE0Fh 逃げるなよ
120デフォルトの名無しさん
2026/08/31(月) 10:47:51.17ID:2YFuE0Fh >>115
もしそんなことができるならエクセルはオブジェクト指向
もしそんなことができるならエクセルはオブジェクト指向
121デフォルトの名無しさん
2026/08/31(月) 10:52:43.30ID:2YFuE0Fh122デフォルトの名無しさん
2026/08/31(月) 10:53:08.56ID:2YFuE0Fh 俺はどっちも逃げるに1票入れとくわw
123デフォルトの名無しさん
2026/08/31(月) 11:09:28.75ID:sYRPiWSA たとえば、Pythonならstr.countを使えばオーバーラップ非許容版になるし、オーバーラップ許容版は先読みアサーションでできる。他の言語でも実装は同様に簡単だろうし、どうでもいい話だと思うよ。
print('111'.count('11')) #->1
print('3030303030'.count('303')) #->2
import re
print(len(matches := re.findall(r'(?=11)', '111'))) #->2
print(len(matches := re.findall(r'(?=303)', '3030303030'))) #->4
print('111'.count('11')) #->1
print('3030303030'.count('303')) #->2
import re
print(len(matches := re.findall(r'(?=11)', '111'))) #->2
print(len(matches := re.findall(r'(?=303)', '3030303030'))) #->4
124デフォルトの名無しさん
2026/08/31(月) 11:14:21.22ID:2YFuE0Fh125デフォルトの名無しさん
2026/08/31(月) 11:31:07.58ID:txQVS6aR the digits contained by a given number
repeated as many times as the condition is true
という原文を考慮するとWoofに
{11: "Whack”, 13: “Chop”}}を追加すれば
111は"FizzWhackWhack”
313は"FizzFizzChop”と解釈するのが普通かな
replaceに重きを置いてdigitは消費ルールにするんなら
111は"FizzWhack”
313は"FizzFizz”
どっちもありだけど
replaceするワードごとに消費リセットするのは
実装から逆算したご都合主義的なルールなので無しだな
repeated as many times as the condition is true
という原文を考慮するとWoofに
{11: "Whack”, 13: “Chop”}}を追加すれば
111は"FizzWhackWhack”
313は"FizzFizzChop”と解釈するのが普通かな
replaceに重きを置いてdigitは消費ルールにするんなら
111は"FizzWhack”
313は"FizzFizz”
どっちもありだけど
replaceするワードごとに消費リセットするのは
実装から逆算したご都合主義的なルールなので無しだな
126デフォルトの名無しさん
2026/08/31(月) 11:34:37.95ID:2YFuE0Fh127デフォルトの名無しさん
2026/08/31(月) 11:41:14.54ID:txQVS6aR >>126
いや、仕事しろよ
いや、仕事しろよ
128デフォルトの名無しさん
2026/08/31(月) 11:44:09.73ID:9xsNoaYU129デフォルトの名無しさん
2026/08/31(月) 11:46:48.69ID:2YFuE0Fh X.comはクリーンアーキテクチャゴミ過ぎるって話題で盛り上がってるな、クリーンアーキテクチャこそオブジェクト指向の負の遺産だよな
130デフォルトの名無しさん
2026/08/31(月) 11:47:40.41ID:2YFuE0Fh131デフォルトの名無しさん
2026/08/31(月) 11:48:55.14ID:2YFuE0Fh 113, 114, 125, 128
こいつらが14時までにできるのかご注目
こいつらが14時までにできるのかご注目
132デフォルトの名無しさん
2026/08/31(月) 12:08:40.18ID:uFsBuCZF >>125
123のオーバーラップ非許容版(一度消費すると再利用不可版)はたしかに基準となる数字ごとに消費をリセットしているけど、別にそれが実装上のご都合主義とは思わないけどね。仮にこれを良しとしないなら、基準となる数字同士の間に包含関係がある場合にどう変換するかも仕様として定めておく必要がある。たとえば、2 -> hoge, 22 -> puge みたいな変換ルールが与えられたときに222をどう変換すべきかみたいな話ね。>>123のオーバーラップ非許容版ならhogehogehogepugeとなるのに対し、消費をリセットしない仕様ならhogehogehogeかpugehogeみたいな感じになるんだろうけど、いずれにせよどちらの仕様にしたいかというだけの話だと思うけど。
仕様を決めればそのとおりに実装することはどうとでもなるだろうけど、こういう枝葉末節の仕様を細かく決めていくこと自体にはそんなに意味がないんじゃないかなとは思う。
123のオーバーラップ非許容版(一度消費すると再利用不可版)はたしかに基準となる数字ごとに消費をリセットしているけど、別にそれが実装上のご都合主義とは思わないけどね。仮にこれを良しとしないなら、基準となる数字同士の間に包含関係がある場合にどう変換するかも仕様として定めておく必要がある。たとえば、2 -> hoge, 22 -> puge みたいな変換ルールが与えられたときに222をどう変換すべきかみたいな話ね。>>123のオーバーラップ非許容版ならhogehogehogepugeとなるのに対し、消費をリセットしない仕様ならhogehogehogeかpugehogeみたいな感じになるんだろうけど、いずれにせよどちらの仕様にしたいかというだけの話だと思うけど。
仕様を決めればそのとおりに実装することはどうとでもなるだろうけど、こういう枝葉末節の仕様を細かく決めていくこと自体にはそんなに意味がないんじゃないかなとは思う。
133デフォルトの名無しさん
2026/08/31(月) 12:09:14.88ID:2YFuE0Fh >>127
仕事とオブジェクト指向どっちが大事なんだ!
仕事とオブジェクト指向どっちが大事なんだ!
134デフォルトの名無しさん
2026/08/31(月) 13:01:08.28ID:nEKk2jD6 >>20 を対応
これらは非オーバーラップ版としてそのまま動作
>> const IN: Count = |t, n| t.to_string().contains(&n.to_string()) as usize;
>> const DIV_OR_IN: Count = |t, n| (t % n == 0 || t.to_string().contains(&n.to_string())) as usize;
>> const DIV_AND_MULTI_IN: Count = |t, n| (t % n == 0) as usize + t.to_string().split(&n.to_string()).count() - 1;
オーバーラップ版は新設
const DIV_AND_MULTI_IN_OVERLAP: Count = |t, n| (t % n == 0) as usize + overlap_count(t, n);
fn overlap_count(haystack: usize, needle: usize) -> usize {
let haystack = haystack.to_string().into_bytes();
let needle = needle.to_string().into_bytes();
haystack.windows(needle.len()).filter(|&target| target == needle).count()
}
これらは非オーバーラップ版としてそのまま動作
>> const IN: Count = |t, n| t.to_string().contains(&n.to_string()) as usize;
>> const DIV_OR_IN: Count = |t, n| (t % n == 0 || t.to_string().contains(&n.to_string())) as usize;
>> const DIV_AND_MULTI_IN: Count = |t, n| (t % n == 0) as usize + t.to_string().split(&n.to_string()).count() - 1;
オーバーラップ版は新設
const DIV_AND_MULTI_IN_OVERLAP: Count = |t, n| (t % n == 0) as usize + overlap_count(t, n);
fn overlap_count(haystack: usize, needle: usize) -> usize {
let haystack = haystack.to_string().into_bytes();
let needle = needle.to_string().into_bytes();
haystack.windows(needle.len()).filter(|&target| target == needle).count()
}
135デフォルトの名無しさん
2026/08/31(月) 13:17:01.27ID:hvJA4U+8136デフォルトの名無しさん
2026/08/31(月) 13:40:38.79ID:pKa9hXJS >>117
オレ89の作者なんだけれども…
オレ89の作者なんだけれども…
137デフォルトの名無しさん
2026/08/31(月) 13:45:04.01ID:vEdUeyeY >>135
ドメインロジック部分から周辺入出力まで各階層を分けるのはどのモデルでもだいたい同じで
あとは依存性逆転の原則を守ればいいだけだよね
つまり双方がインターフェースのみに依存せよが正しいオブジェクト指向プログラミング
ドメインロジック部分から周辺入出力まで各階層を分けるのはどのモデルでもだいたい同じで
あとは依存性逆転の原則を守ればいいだけだよね
つまり双方がインターフェースのみに依存せよが正しいオブジェクト指向プログラミング
138デフォルトの名無しさん
2026/08/31(月) 13:46:08.24ID:pKa9hXJS139デフォルトの名無しさん
2026/08/31(月) 13:57:30.30ID:pKa9hXJS なお、6行目の些末なbugはこう直してね、その方がお行儀がいいから
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
↓$_を $d に修正
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$d/g) }
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$_/g) } # $n =~ tr/$d//r
↓$_を $d に修正
sub 桁に含む個数($n, $d){ scalar (() = $n =~ /$d/g) }
140デフォルトの名無しさん
2026/08/31(月) 15:48:43.25ID:2YFuE0Fh >>136
なんかすみません…
なんかすみません…
141デフォルトの名無しさん
2026/08/31(月) 15:49:46.43ID:2YFuE0Fh >>134
Rustはええよなー標準ライブラリがつおい
Rustはええよなー標準ライブラリがつおい
142デフォルトの名無しさん
2026/08/31(月) 15:50:39.71ID:2YFuE0Fh >>137
だったらその正しいオブジェクト指向プログラミングとやらでFizzBuzz書いてみろよタワケが
だったらその正しいオブジェクト指向プログラミングとやらでFizzBuzz書いてみろよタワケが
143デフォルトの名無しさん
2026/08/31(月) 17:16:36.76ID:Jy5vPfka144デフォルトの名無しさん
2026/08/31(月) 17:45:06.14ID:2YFuE0Fh >>143
せやかて工藤、プログラム言語でFizzBuzzを計算できる人たたくさんいるけどExcelでFizzBuzzを計算できた人はいまのところお前も含めて一人もおらんぞ、ちゅうことはやExcelの方が不便なんじゃねえのかな
せやかて工藤、プログラム言語でFizzBuzzを計算できる人たたくさんいるけどExcelでFizzBuzzを計算できた人はいまのところお前も含めて一人もおらんぞ、ちゅうことはやExcelの方が不便なんじゃねえのかな
145デフォルトの名無しさん
2026/08/31(月) 17:52:13.10ID:Jy5vPfka は?
エクセルの列に3の倍数、5の倍数とか作れば終わるじゃん
で、列を統合すりゃ完成よ
エクセルの列に3の倍数、5の倍数とか作れば終わるじゃん
で、列を統合すりゃ完成よ
146デフォルトの名無しさん
2026/08/31(月) 17:57:46.68ID:nTd2cOdd >>145
FizzBuzz各バリエーションはどうするの?
FizzBuzz各バリエーションはどうするの?
147デフォルトの名無しさん
2026/08/31(月) 22:48:39.85ID:AfPDOd2K >>9 java
https://ideone.com/YO6IJy
・class FizzBuzz廃止
>>9 ruby
https://ideone.com/oNWERQ
・class FizzBuzz廃止
>>9 octave
https://ideone.com/aqe5by
・関数の呼び出し関係を↑のJavaやRubyと同じに変更
・fizzbuzz関数が結果を返していたのが>>88
・fizzbuzz関数がクロージャを返すのがこれ
https://ideone.com/YO6IJy
・class FizzBuzz廃止
>>9 ruby
https://ideone.com/oNWERQ
・class FizzBuzz廃止
>>9 octave
https://ideone.com/aqe5by
・関数の呼び出し関係を↑のJavaやRubyと同じに変更
・fizzbuzz関数が結果を返していたのが>>88
・fizzbuzz関数がクロージャを返すのがこれ
148デフォルトの名無しさん
2026/09/01(火) 09:54:56.74ID:T2/8xiiL エクセルニキ完全沈黙
149デフォルトの名無しさん
2026/09/01(火) 10:52:12.10ID:g5/FiZGJ150デフォルトの名無しさん
2026/09/01(火) 10:58:39.84ID:juHVppcp151デフォルトの名無しさん
2026/09/01(火) 11:28:11.70ID:OWzK2Tsb エクセル苦手っていうか表計算の仕組みを全く理解していないんだろうな
152デフォルトの名無しさん
2026/09/01(火) 11:37:08.63ID:T2/8xiiL153デフォルトの名無しさん
2026/09/01(火) 11:42:13.88ID:T2/8xiiL > 115 デフォルトの名無しさん 垢版 | 2026/08/31(月) 10:37:57.07ID:Jy5vPfka
> エクセルの表でスマートに作れる
はよ作ってみせろや、スマートになw
> エクセルの表でスマートに作れる
はよ作ってみせろや、スマートになw
154デフォルトの名無しさん
2026/09/01(火) 11:48:29.02ID:OWzK2Tsb 本当に馬鹿なんだねぇ
155デフォルトの名無しさん
2026/09/01(火) 11:50:16.57ID:T2/8xiiL >>154
まだ出来ないのか?w
まだ出来ないのか?w
156デフォルトの名無しさん
2026/09/01(火) 11:51:57.59ID:T2/8xiiL おいおいまだ出来てないんだってよこいつw
いつまでかかってんだよ、さっさとやれよ
いつまでかかってんだよ、さっさとやれよ
157デフォルトの名無しさん
2026/09/01(火) 11:52:32.69ID:T2/8xiiL できるんだよね〜Excelならスマートにできるんだよね〜お〜ん?www
158デフォルトの名無しさん
2026/09/01(火) 13:26:53.71ID:Wa+TcOjq またお前か
159デフォルトの名無しさん
2026/09/01(火) 13:58:24.03ID:SQCIglfW A列に1からnまでの連番を作って、B列に変換関数を書いて、C列に結果を出力するみたいな感じ? それでできたことになるのかは、自分にはちょっとよく判断がつかないが。今のExcelってLetとかが入ったから、理論的には他のプログラミング言語と同等の記述能力があるんでしょ。だから変換関数自体はいちおう書けるんじゃないかと思うけど(見やすいかどうかはともかく)。
160デフォルトの名無しさん
2026/09/01(火) 14:36:15.40ID:Wa+TcOjq A列に
1
2
3
…
=一個上-1
と入力しておいて、B列に式
=IF(AND(MOD(A1,3)=0,MOD(A1,5)=0),"FizzBuzz",IF(MOD(A1,3)=0,"Fizz",IF(MOD(A1,5)=0,"Buzz","")))
を縦ににずっと設定していけばできるだろJK
これはCLassicで、多少ややっこしくなるけれど他のvariationも頑張れば同様に
VBA等を使うまでもなく式でもできるさ
variationは多少煩わしのでオレはいいや気が乗らん
1
2
3
…
=一個上-1
と入力しておいて、B列に式
=IF(AND(MOD(A1,3)=0,MOD(A1,5)=0),"FizzBuzz",IF(MOD(A1,3)=0,"Fizz",IF(MOD(A1,5)=0,"Buzz","")))
を縦ににずっと設定していけばできるだろJK
これはCLassicで、多少ややっこしくなるけれど他のvariationも頑張れば同様に
VBA等を使うまでもなく式でもできるさ
variationは多少煩わしのでオレはいいや気が乗らん
161デフォルトの名無しさん
2026/09/01(火) 14:40:56.63ID:Wa+TcOjq162デフォルトの名無しさん
2026/09/01(火) 15:19:47.74ID:OWzK2Tsb B列は3の倍数
C列は5の倍数・・・でいいんだよ
あとはVBAで必要な数与えりゃ、必要分の行をコピーで増やせば出来上がり
行がオブジェクトでもあり、列がオブジェクトでもあり、セルがオブジェクトでもある
ループも使わず結果が出る
C列は5の倍数・・・でいいんだよ
あとはVBAで必要な数与えりゃ、必要分の行をコピーで増やせば出来上がり
行がオブジェクトでもあり、列がオブジェクトでもあり、セルがオブジェクトでもある
ループも使わず結果が出る
163デフォルトの名無しさん
2026/09/01(火) 15:21:59.81ID:xT4KZWD1 >>9のFizzBuzzバリエーションwoofも書ける?
164デフォルトの名無しさん
2026/09/01(火) 15:32:50.74ID:Wa+TcOjq165デフォルトの名無しさん
2026/09/01(火) 15:41:12.00ID:SQCIglfW 各列にルールごとの変換結果を持っておいて、それを適宜組み合わせるという発想は、「最初からテーブルで全部持っておく」おじさんの理想にかなり近いのでは。
166デフォルトの名無しさん
2026/09/01(火) 15:58:00.15ID:ws5sxAN0 =LET(Ary,A1#,Res,
IF(MOD(Ary,3)=0,"Fizz","")
&IF(NOT(ISERROR(FIND(Ary,"3"))),"Fizz","")
&IF(MOD(Ary,5)=0,"Buzz","")
&IF(NOT(ISERROR(FIND(Ary,"5"))),"Buzz","")
&IF(MOD(Ary,7)=0,"Woof","")
&IF(NOT(ISERROR(FIND(Ary,"7"))),"Woof",""),
IF(Res="",Ary,Res)
A1にスピル配列で
なんでExcelでFizzBuzzができるかという話になってるのかは分からないけど、条件増えてもこれで配列渡しでもイケると思う
IF(MOD(Ary,3)=0,"Fizz","")
&IF(NOT(ISERROR(FIND(Ary,"3"))),"Fizz","")
&IF(MOD(Ary,5)=0,"Buzz","")
&IF(NOT(ISERROR(FIND(Ary,"5"))),"Buzz","")
&IF(MOD(Ary,7)=0,"Woof","")
&IF(NOT(ISERROR(FIND(Ary,"7"))),"Woof",""),
IF(Res="",Ary,Res)
A1にスピル配列で
なんでExcelでFizzBuzzができるかという話になってるのかは分からないけど、条件増えてもこれで配列渡しでもイケると思う
167デフォルトの名無しさん
2026/09/01(火) 16:02:59.52ID:ws5sxAN0 FINDの引数を入れ替えるミス
お恥ずかしい
お恥ずかしい
168デフォルトの名無しさん
2026/09/01(火) 16:22:08.60ID:q04lBBcV169デフォルトの名無しさん
2026/09/01(火) 16:24:44.90ID:OWzK2Tsb >>165
エクセルのいいところは、最初っから何個使うかわからんテーブル形式ではなく
必要な分を行追加コピーで済むことだ
全部数式込みで増やせて、増やした瞬間に計算終わっちゃうから必要最小限のテーブルしか作らない
エクセルのいいところは、最初っから何個使うかわからんテーブル形式ではなく
必要な分を行追加コピーで済むことだ
全部数式込みで増やせて、増やした瞬間に計算終わっちゃうから必要最小限のテーブルしか作らない
170デフォルトの名無しさん
2026/09/01(火) 16:31:46.52ID:T2/8xiiL >>9 の全バリエーションに対応してから言えよ
何が自由自在だよ、自縄自縛の間違いだろw
何が自由自在だよ、自縄自縛の間違いだろw
171デフォルトの名無しさん
2026/09/01(火) 16:38:02.43ID:OWzK2Tsb 頭悪いのって不幸だねぇ
172デフォルトの名無しさん
2026/09/01(火) 16:39:27.65ID:Wa+TcOjq >>170
そんなんExcelでガムばらなくてもいいんじゃない?
そんなんExcelでガムばらなくてもいいんじゃない?
173デフォルトの名無しさん
2026/09/01(火) 16:42:21.90ID:Wa+TcOjq >>169
それはまた同時にExcelの欠点でもある二面性じゃない?
それはまた同時にExcelの欠点でもある二面性じゃない?
174デフォルトの名無しさん
2026/09/01(火) 16:43:21.38ID:T2/8xiiL175デフォルトの名無しさん
2026/09/01(火) 16:44:48.80ID:T2/8xiiL >>172
それが正しい、Excelでやるよりプログラム言語で計算した方が100倍マシ
それが正しい、Excelでやるよりプログラム言語で計算した方が100倍マシ
176デフォルトの名無しさん
2026/09/01(火) 16:50:30.53ID:Wa+TcOjq Excelのセルを縦横無尽に参照した式瀬ッての多様やVBAマクロは難読があっという間に��くなりきわめてたちが悪いからな。
賢い人ならなぜ問題か知っていること
だからそこで頑張ってもしょうがない
賢い人ならなぜ問題か知っていること
だからそこで頑張ってもしょうがない
177デフォルトの名無しさん
2026/09/01(火) 16:51:21.47ID:T2/8xiiL > 115 デフォルトの名無しさん 垢版 | 2026/08/31(月) 10:37:57.07ID:Jy5vPfka
> エクセルの表でスマートに作れる
あれあれ〜〜〜??? まだですか〜〜〜???
まだできないんですか〜〜〜??? お〜〜〜ん???
> エクセルの表でスマートに作れる
あれあれ〜〜〜??? まだですか〜〜〜???
まだできないんですか〜〜〜??? お〜〜〜ん???
178デフォルトの名無しさん
2026/09/01(火) 16:53:24.46ID:OWzK2Tsb 頭悪そう
エクセルの難読なのがあったとして
それと同じ機能をプログラム言語で記述したらさらに難読でしかないって理解できないのだねぇ
エクセルの難読なのがあったとして
それと同じ機能をプログラム言語で記述したらさらに難読でしかないって理解できないのだねぇ
179デフォルトの名無しさん
2026/09/01(火) 16:54:02.84ID:T2/8xiiL180デフォルトの名無しさん
2026/09/01(火) 16:56:22.96ID:T2/8xiiL181デフォルトの名無しさん
2026/09/01(火) 17:03:05.68ID:Wa+TcOjq >>178
おまえ、苦しんだことないな、
いや野良ExcelやVBA作り散らかして周りに迷惑かけているタイプだろ
セルはすべてグローバル変数と同じ。それば無数にある
それを他のセルに設定されている「露わには目に見えない」式の中であちこちから参照する
そしてその式の値が反映されているセルがまたどこかの式が参照する…このくりかえし
プログラミング言語の発展はそういった複雑さの爆発や難読性をどう抑制し
なんとか大規模ソフトウエアを作れるようするかの戦いでもあったんだぞ
お前はグローバル変数ばかりでプログラム書くのか?
人のことバカにしたような口きいてるが
何ひとつ知らないのはお前の方だ恥ずかしいやつめ
おまえ、苦しんだことないな、
いや野良ExcelやVBA作り散らかして周りに迷惑かけているタイプだろ
セルはすべてグローバル変数と同じ。それば無数にある
それを他のセルに設定されている「露わには目に見えない」式の中であちこちから参照する
そしてその式の値が反映されているセルがまたどこかの式が参照する…このくりかえし
プログラミング言語の発展はそういった複雑さの爆発や難読性をどう抑制し
なんとか大規模ソフトウエアを作れるようするかの戦いでもあったんだぞ
お前はグローバル変数ばかりでプログラム書くのか?
人のことバカにしたような口きいてるが
何ひとつ知らないのはお前の方だ恥ずかしいやつめ
182デフォルトの名無しさん
2026/09/01(火) 17:05:59.60ID:Wa+TcOjq で、オブジェクト指向教はその抑制の役には
あまりたたなかったんだよな
あまりたたなかったんだよな
183デフォルトの名無しさん
2026/09/01(火) 17:13:40.13ID:Wa+TcOjq Excelの話はもういいよ。
Excelの話題になると、ちょっと式設定やVBAを使えるようになっただけで天狗になっている井の中の蛙が
変な時論や蘊蓄で周りも攻撃しちらかしたりして雰囲気悪くするから相手にしない方が良いよ。
変てこなオレオレ オブジェクト指向信者もにたようなもんだが
Excelの話題になると、ちょっと式設定やVBAを使えるようになっただけで天狗になっている井の中の蛙が
変な時論や蘊蓄で周りも攻撃しちらかしたりして雰囲気悪くするから相手にしない方が良いよ。
変てこなオレオレ オブジェクト指向信者もにたようなもんだが
184デフォルトの名無しさん
2026/09/01(火) 17:18:18.00ID:T2/8xiiL185デフォルトの名無しさん
2026/09/01(火) 17:25:16.88ID:Wa+TcOjq オブジェクト指向をマンセーしている原理主義者は
大概ヘンテコこだよ
大概ヘンテコこだよ
186デフォルトの名無しさん
2026/09/01(火) 17:46:21.80ID:lyL27R0T187デフォルトの名無しさん
2026/09/01(火) 17:47:05.82ID:Wa+TcOjq ttps://i.gyazo.com/8510f28a95ef5cff135c8240f8562e70.png
188デフォルトの名無しさん
2026/09/01(火) 18:08:23.44ID:k0CNiHxa189デフォルトの名無しさん
2026/09/01(火) 18:17:00.79ID:Wa+TcOjq 吉野家のコピペのようなどこか奥底で人間愛を感じられるものは好きだな
自分が無知で愚かなだけなのに人を心底バカにしたり嫌がらせするのはゴメンこうむりたいわ
自分が無知で愚かなだけなのに人を心底バカにしたり嫌がらせするのはゴメンこうむりたいわ
190デフォルトの名無しさん
2026/09/01(火) 20:38:15.62ID:OWzK2Tsb いやー
エクセルごとき使えないって馬鹿にされて当たり前でしょ
エクセルごとき使えないって馬鹿にされて当たり前でしょ
191デフォルトの名無しさん
2026/09/01(火) 21:07:11.25ID:lgvzoT8b せめてモデルとビューは分けないとな
192デフォルトの名無しさん
2026/09/01(火) 21:11:51.33ID:Wa+TcOjq >>190
じゃあその使いこなしたのを披露して
じゃあその使いこなしたのを披露して
193デフォルトの名無しさん
2026/09/01(火) 22:10:47.38ID:hOtNBDgn >>9 octave
https://ideone.com/a2Z8kW
・他言語の実装に引っ張られすぎてたので野生を取り戻した
・結局のところスカラで計算してたのが>>147
・可能な限り行列をグリグリしてるのがこれ
・結果として結合部分がちょっとナーバスになっちゃった
行列全体をケアできるような処理しか対応できなくなった
・あと男らしくfor丸出しで計算したいのでfold_lefは廃止
・なんかトータルで遅くなってるような気がしないでもない
https://ideone.com/a2Z8kW
・他言語の実装に引っ張られすぎてたので野生を取り戻した
・結局のところスカラで計算してたのが>>147
・可能な限り行列をグリグリしてるのがこれ
・結果として結合部分がちょっとナーバスになっちゃった
行列全体をケアできるような処理しか対応できなくなった
・あと男らしくfor丸出しで計算したいのでfold_lefは廃止
・なんかトータルで遅くなってるような気がしないでもない
194デフォルトの名無しさん
2026/09/01(火) 22:14:28.64ID:qwiCCo/1 >>149
依存性逆転の原則(dependency inversion principle)とは、オブジェクト指向設計の用語であり、ソフトウェアモジュールの疎結合を確立する特別な形態を表現したコンセプトである。
オブジェクト指向設計の5つの原則SOLIDの一つとして知られている。
上位モジュールと下位モジュールの双方が抽象(インターフェース等)に依存すべき原則である。
依存性逆転の原則(dependency inversion principle)とは、オブジェクト指向設計の用語であり、ソフトウェアモジュールの疎結合を確立する特別な形態を表現したコンセプトである。
オブジェクト指向設計の5つの原則SOLIDの一つとして知られている。
上位モジュールと下位モジュールの双方が抽象(インターフェース等)に依存すべき原則である。
195デフォルトの名無しさん
2026/09/01(火) 23:41:27.10ID:TgJQAtz9 インターフェース分離の原則 (Interface segregation principle) もあるしな
各オブジェクトは様々に機能分化された用途ごとの無数のインターフェースから複数を組み合わせて実装することになる
各オブジェクトは様々に機能分化された用途ごとの無数のインターフェースから複数を組み合わせて実装することになる
196デフォルトの名無しさん
2026/09/01(火) 23:49:48.36ID:V1szNqDK >>194
>依存性逆転の原則(dependency inversion principle)とは、オブジェクト指向設計の用語であり
全然関係ない
インターフェース定義したらオブジェクト指向みたいなバカな考えやめろや
>依存性逆転の原則(dependency inversion principle)とは、オブジェクト指向設計の用語であり
全然関係ない
インターフェース定義したらオブジェクト指向みたいなバカな考えやめろや
197デフォルトの名無しさん
2026/09/01(火) 23:53:44.09ID:V1szNqDK オブジェクト指向設計界隈から生まれた用語ではあるけど
パラダイムに関係のないモジュール設計の一般原則
パラダイムに関係のないモジュール設計の一般原則
198デフォルトの名無しさん
2026/09/02(水) 00:01:53.76ID:PXcd3USD 異なる型のオブジェクトに共通の性質を与えてポリモーフィズムにより区別することなくメソッド呼び出しできるようにする枠組みがインターフェース
199デフォルトの名無しさん
2026/09/02(水) 07:38:09.91ID:YJeS65hw インターフェースにすればモジュールが実装を知らなくても済むようになる
なんて素晴らしい
なんて素晴らしい
200デフォルトの名無しさん
2026/09/02(水) 09:14:23.32ID:KTurmgku C言語のexternによる外部関数プロトタイプ宣言との違いを
400字づめ原稿用紙1枚程度で述べよ (配点20点)
400字づめ原稿用紙1枚程度で述べよ (配点20点)
201デフォルトの名無しさん
2026/09/02(水) 09:18:57.89ID:ElrbfNtd >>200
C言語の extern も「中身を知らずに呼び出す」点は似ていますよね!でも、目的と柔軟性が大違いです。C言語の extern(場所案内)実体(中身)は世界に1つだけ。別のファイルにある「その関数」をピンポイントで指すため、後から中身をサクッと差し替えるのは苦手です。インターフェース(交換用の型枠)ルールを満たせば、中身は何種類でも作れて自由に入れ替え可能です。例えば「印刷」という枠に対して「紙に印刷」「PDF化」などを状況でガシャッと切り替えられます。extern は「離れたファイルを繋ぐための仕組み」、インターフェースは「後からいくらでも部品を交換できるようにする設計図」というイメージです!もしよろしければ、この違いについてさらに深掘りしてみませんか?C言語でこれを再現する「関数ポインタ」の仕組み実際のコードでの見え方の違い次にどちらの話題を知りたいか教えてくださいね!
C言語の extern も「中身を知らずに呼び出す」点は似ていますよね!でも、目的と柔軟性が大違いです。C言語の extern(場所案内)実体(中身)は世界に1つだけ。別のファイルにある「その関数」をピンポイントで指すため、後から中身をサクッと差し替えるのは苦手です。インターフェース(交換用の型枠)ルールを満たせば、中身は何種類でも作れて自由に入れ替え可能です。例えば「印刷」という枠に対して「紙に印刷」「PDF化」などを状況でガシャッと切り替えられます。extern は「離れたファイルを繋ぐための仕組み」、インターフェースは「後からいくらでも部品を交換できるようにする設計図」というイメージです!もしよろしければ、この違いについてさらに深掘りしてみませんか?C言語でこれを再現する「関数ポインタ」の仕組み実際のコードでの見え方の違い次にどちらの話題を知りたいか教えてくださいね!
202デフォルトの名無しさん
2026/09/02(水) 09:24:36.02ID:KTurmgku 「教えてくださいね!」じゃねーよAIめが。
概ね合っているが、別ソースファイルだとそれを編集したらそれだけリビルドしリンクすればOKなのでそこ違う。
複数のものを同じインタフェースで構造ごとに呼び分けるのはCでは
意図的にそういうコードをユーザーが書かなきゃならん点は合ってる。
したがって、AI君10/20点
j便で書けずAIに代返してもらった椰子0/20点で落第な
概ね合っているが、別ソースファイルだとそれを編集したらそれだけリビルドしリンクすればOKなのでそこ違う。
複数のものを同じインタフェースで構造ごとに呼び分けるのはCでは
意図的にそういうコードをユーザーが書かなきゃならん点は合ってる。
したがって、AI君10/20点
j便で書けずAIに代返してもらった椰子0/20点で落第な
203デフォルトの名無しさん
2026/09/02(水) 09:31:03.18ID:KTurmgku だがな、
》同じインタフェースで構造ごとに呼び分ける
本当にそんな書き方をする機会って多いか?
callerが参照するオブジェクトの種類やmethodが
同じインタフェースで違うものにまちまちにすり替わっても
動作し可読性を高めるように書く
そういう書き方って頻繁にあるかな、
またそれって継承とはまた少し違った沼の入り口ではないかな
結局依存が込み入る
》同じインタフェースで構造ごとに呼び分ける
本当にそんな書き方をする機会って多いか?
callerが参照するオブジェクトの種類やmethodが
同じインタフェースで違うものにまちまちにすり替わっても
動作し可読性を高めるように書く
そういう書き方って頻繁にあるかな、
またそれって継承とはまた少し違った沼の入り口ではないかな
結局依存が込み入る
204デフォルトの名無しさん
2026/09/02(水) 10:47:54.91ID:DelOF7R2205デフォルトの名無しさん
2026/09/02(水) 19:04:11.82ID:FOf2lbwx 【歴史】オブジェクト指向は失敗だったのか。35年のすれ違いの歴史。
www.youtube.com/watch?v=XqpQ549I7AM
www.youtube.com/watch?v=XqpQ549I7AM
206デフォルトの名無しさん
2026/09/02(水) 19:11:42.68ID:KTurmgku 少数だが初期から気が付いていた人はいた
周りからは変人扱い
周りからは変人扱い
207デフォルトの名無しさん
2026/09/02(水) 19:40:06.04ID:e3rx6fyE >>203
Rustの標準ライブラリは全てその形でインターフェース抽象型に相当する形でジェネリックにコード共有で作られてる
例えばtrait Readは
抽象メソッドfn read(&mut self, buf: &mut [u8]) -> Result<usize>;を実装するとその型は
提供メソッドのread_to_end read_to_string read_bufなど14個のメソッドが自動的に使える
例えばtrait Iteratorは
抽象メソッドfn next(&mut self) -> Option<Self::Item>;を実装するとその型は
提供メソッドcount nth find filter map flat_map fold collectなど74個のメソッドが自動的に使える
Rustの標準ライブラリは全てその形でインターフェース抽象型に相当する形でジェネリックにコード共有で作られてる
例えばtrait Readは
抽象メソッドfn read(&mut self, buf: &mut [u8]) -> Result<usize>;を実装するとその型は
提供メソッドのread_to_end read_to_string read_bufなど14個のメソッドが自動的に使える
例えばtrait Iteratorは
抽象メソッドfn next(&mut self) -> Option<Self::Item>;を実装するとその型は
提供メソッドcount nth find filter map flat_map fold collectなど74個のメソッドが自動的に使える
208デフォルトの名無しさん
2026/09/02(水) 19:42:16.23ID:Bfg5N3e1 >>205
観るわ
観るわ
209デフォルトの名無しさん
2026/09/02(水) 19:46:01.25ID:Vdi3HTvK Rustのtraitは、JavaのインターフェイスやC++の抽象クラスと違って、継承ツリーを作らなくてもいいんだっけ?
210デフォルトの名無しさん
2026/09/02(水) 19:46:17.92ID:KTurmgku >>207
Rustは新しい言語のぶん、色々改良・進化してるのかもしれないな
個人的にはやるつもりはなかったんだけれど、
とある事情で使うことになるかもだわ
まあでもオブジェクト指向の問題課題はまだまだ引きずっていそうだな
Rustは新しい言語のぶん、色々改良・進化してるのかもしれないな
個人的にはやるつもりはなかったんだけれど、
とある事情で使うことになるかもだわ
まあでもオブジェクト指向の問題課題はまだまだ引きずっていそうだな
211デフォルトの名無しさん
2026/09/02(水) 19:49:18.58ID:KTurmgku あと、メモリの安全性は結構だけど、
コンパイル通すのにひとてま間かかりそうな点が気が乗らない
だってオレメモリ関係のバグ10年に一回くらいしか出さないのに
そのために毎回手間暇罹る気がして
コンパイル通すのにひとてま間かかりそうな点が気が乗らない
だってオレメモリ関係のバグ10年に一回くらいしか出さないのに
そのために毎回手間暇罹る気がして
212デフォルトの名無しさん
2026/09/02(水) 19:51:12.55ID:KTurmgku まあ使う前の思い込みかも知れないのでファンは気にしないでおくれ
213デフォルトの名無しさん
2026/09/02(水) 19:52:35.56ID:lUNjG+nW214デフォルトの名無しさん
2026/09/02(水) 22:03:41.23ID:naT0vgdb >>9 octave
https://ideone.com/5UcfxX
・もっと行列グリグリ
・forループ1個、arrayfun2個残ってたのが>>193
・forループ1個、arrayfun2個無くしたのがこれ
https://ideone.com/5UcfxX
・もっと行列グリグリ
・forループ1個、arrayfun2個残ってたのが>>193
・forループ1個、arrayfun2個無くしたのがこれ
215デフォルトの名無しさん
2026/09/03(木) 00:00:17.99ID:tM9SVWix >>205
「データの形と処理の流れを先に、階層は最後の手段に」まあそりゃそうだわな、結局そう言うことだと思うわ。
「データの形と処理の流れを先に、階層は最後の手段に」まあそりゃそうだわな、結局そう言うことだと思うわ。
216デフォルトの名無しさん
2026/09/03(木) 00:40:37.91ID:mxwLmvVT217デフォルトの名無しさん
2026/09/03(木) 00:51:28.32ID:MjG7i5Ms それがなぜこれほど長い期間信じ切られて常識のように支持されて来たのか、
そしていまだに熱心な信者がいるのみならず、
新たにこの分野に参加してくるnew commerにまで誤った教育を通して浸透し続けているのか
ホント新興宗教の流行のような不思議な現象だと思う。
個人的にはオブジェクト指向、特にクラスベースオブジェクト指向が指示され流行してきたココ数十年は
コンピューターサイエンスやソフトウエア工学の暗黒時代だったのではないかという気さえする
そしていまだに熱心な信者がいるのみならず、
新たにこの分野に参加してくるnew commerにまで誤った教育を通して浸透し続けているのか
ホント新興宗教の流行のような不思議な現象だと思う。
個人的にはオブジェクト指向、特にクラスベースオブジェクト指向が指示され流行してきたココ数十年は
コンピューターサイエンスやソフトウエア工学の暗黒時代だったのではないかという気さえする
218デフォルトの名無しさん
2026/09/03(木) 01:22:19.69ID:MjG7i5Ms 先生!関連する動画にこんなのがありあした
ttps://www.youtube.com/watch?v=FSnSZ_h7OQ0
ttps://www.youtube.com/watch?v=FSnSZ_h7OQ0
219デフォルトの名無しさん
2026/09/03(木) 07:49:02.23ID:hIM9XhEX オブジェクト指向とは何か、を誰も明確に説明できないまま、その機能的副産物をありがたがって過剰に使用して、それに対する反発が出て改善が行われて、その改善をオブジェクト指向そのものの否定と勘違いしている。
ソフトウェア技術者は哲学が得意そうなイメージがあるが、ソフトウェア開発における抽象化は実用主義的な割り切り・選別であって哲学の本質主義的な抽象化ではなく、本質の抽象はあまり得意ではないのかもしれない。
ソフトウェア技術者は哲学が得意そうなイメージがあるが、ソフトウェア開発における抽象化は実用主義的な割り切り・選別であって哲学の本質主義的な抽象化ではなく、本質の抽象はあまり得意ではないのかもしれない。
220デフォルトの名無しさん
2026/09/03(木) 09:38:16.57ID:bBvwbQat221デフォルトの名無しさん
2026/09/03(木) 09:47:03.86ID:bBvwbQat >>219
オブジェクト指向を哲学するのは落合陽一先生だけで良い
オブジェクト指向を哲学するのは落合陽一先生だけで良い
222デフォルトの名無しさん
2026/09/03(木) 10:10:09.26ID:bBvwbQat オブジェクト指向は世界に対する自分の認識をそのままコードに落とすことだとするとやってる本人的には納得感が得られやすいから過大評価されがちなのかなって思った
223デフォルトの名無しさん
2026/09/03(木) 10:28:17.44ID:ttkoTD+4 >>202
>もしよろしければ、この違いについてさらに深掘りしてみませんか?C言語でこれを再現する「関数ポインタ」の仕組み実際のコードでの見え方の違い次にどちらの話題を知りたいか教えてくださいね!
これは定型文だな
中身を変えて必ず文末に現れる
>もしよろしければ、この違いについてさらに深掘りしてみませんか?C言語でこれを再現する「関数ポインタ」の仕組み実際のコードでの見え方の違い次にどちらの話題を知りたいか教えてくださいね!
これは定型文だな
中身を変えて必ず文末に現れる
224デフォルトの名無しさん
2026/09/03(木) 10:44:08.50ID:ttkoTD+4 Rust の Path はあまり上手じゃないと思う
225デフォルトの名無しさん
2026/09/03(木) 10:54:32.25ID:EX3aEPzx MicrosoftのWindowsが足を引っ張ってるよな
226デフォルトの名無しさん
2026/09/03(木) 11:01:46.40ID:vBo0BnCi VB6を切ったのが悪い
228デフォルトの名無しさん
2026/09/03(木) 11:21:25.76ID:tM9SVWix229デフォルトの名無しさん
2026/09/03(木) 11:30:36.87ID:ZPv4SyHO 素人講師でも、車だのPersonだのを例に示せば、もっとど素人の受講者を煙に巻いて分かったような気にさせる説明しゃ易いしな
でもそんなデータモデリング実践ではまれなのに、向いてないところにまで適用してカプセル化と多階層と継承で何と実演しちゃおうと
ぐちゃぐちゃ悪戦苦闘してゴミコード量産が連綿と続けられてきた
それを実世界のモデリングだの抽象化だの、言葉の意味も正しく理解してないのに
言いはって悦に入ってたという集団狂気みたいなものか
でもそんなデータモデリング実践ではまれなのに、向いてないところにまで適用してカプセル化と多階層と継承で何と実演しちゃおうと
ぐちゃぐちゃ悪戦苦闘してゴミコード量産が連綿と続けられてきた
それを実世界のモデリングだの抽象化だの、言葉の意味も正しく理解してないのに
言いはって悦に入ってたという集団狂気みたいなものか
230デフォルトの名無しさん
2026/09/03(木) 11:42:28.02ID:Ya8JgU4d クラス継承は不要。
最近のプログラミング言語はクラス継承機能を外している。
最近のプログラミング言語はクラス継承機能を外している。
231デフォルトの名無しさん
2026/09/03(木) 12:01:49.93ID:BPaawHe/ 人間と鳥を継承して鳥人間を作るより
人間に羽を付けて鳥人間もどきにする方がいいってこと?
人間に羽を付けて鳥人間もどきにする方がいいってこと?
232デフォルトの名無しさん
2026/09/03(木) 12:13:15.94ID:9QO1bshj プログラミングで実際に使う共通の機能で考える
もし共通に呼び出せる機能があるならその機能のインターフェース抽象型としてまとめる
もし共通に呼び出せる機能があるならその機能のインターフェース抽象型としてまとめる
233デフォルトの名無しさん
2026/09/03(木) 12:19:48.77ID:ZPv4SyHO 沼の入り口には変わりないようなw
234デフォルトの名無しさん
2026/09/03(木) 12:33:57.81ID:tM9SVWix 言うほどお前のコードは一般化されないって理解するところからやな
235デフォルトの名無しさん
2026/09/03(木) 12:39:05.50ID:Y//cQO2m インターフェイスを使えば解決するね
インターフェイスの抽象メソッドは各型が個別に実装するものだから
インターフェイスの抽象メソッドは各型が個別に実装するものだから
236デフォルトの名無しさん
2026/09/03(木) 12:43:31.50ID:ZPv4SyHO 新たな宗派の台頭か?
237デフォルトの名無しさん
2026/09/03(木) 12:45:02.60ID:ZPv4SyHO 多階層にしなければそれでも継承でもなんとかなる「場合もある」かもな
238デフォルトの名無しさん
2026/09/03(木) 12:54:41.99ID:w0WJaoi8 インターフェースは具象型ではなく抽象型だ
その抽象メソッドを実装することで初めて仲間入りする
その抽象メソッドを実装することで初めて仲間入りする
239デフォルトの名無しさん
2026/09/03(木) 13:23:23.64ID:ZPv4SyHO 何か来るかは来てのお楽しみ、目をつむって呼んで頂戴って、
それはそれで厄介ごとのタネになるような…
それはそれで厄介ごとのタネになるような…
240デフォルトの名無しさん
2026/09/03(木) 17:54:43.60ID:vBo0BnCi >>231
鳥人間を一から作れば済むこと
鳥人間を一から作れば済むこと
241デフォルトの名無しさん
2026/09/03(木) 18:02:46.31ID:7u9t/Ce3 >>230
クラス継承は害悪だの悪魔のクラス継承だの言ってたのにめっちゃトーンダウンしてるやんw
クラス継承は害悪だの悪魔のクラス継承だの言ってたのにめっちゃトーンダウンしてるやんw
242デフォルトの名無しさん
2026/09/03(木) 18:19:18.85ID:ZPv4SyHO ※効果には個人差があります。
243デフォルトの名無しさん
2026/09/03(木) 18:39:15.44ID:BDqyWR6V 鳥人間は、鳥と人間を継承しているのではなく、
鳥と鳥人間の基本クラスがあり、人間と鳥人間の基本クラスがある。
鳥と人間の基本クラスもある。
基本クラスは共通の性質を抽出したもの。
先に基本クラスを(間違った性質で)定義してしまうから、問題が発生する。
鳥と鳥人間の基本クラスがあり、人間と鳥人間の基本クラスがある。
鳥と人間の基本クラスもある。
基本クラスは共通の性質を抽出したもの。
先に基本クラスを(間違った性質で)定義してしまうから、問題が発生する。
244デフォルトの名無しさん
2026/09/03(木) 18:41:42.41ID:e0D0E7S+ 多重継承が複雑化する原因であって継承自体は問題ないでしょ
人間と鳥がセックスしても子供なんて生まれないのと同じで違う役割のクラス混ぜてもまともなもの生まれない
どうしても人間に鳥の機能付けたいなら羽とか砂ずり付いたクラスを人間に外付けすりゃ良い
人間と鳥がセックスしても子供なんて生まれないのと同じで違う役割のクラス混ぜてもまともなもの生まれない
どうしても人間に鳥の機能付けたいなら羽とか砂ずり付いたクラスを人間に外付けすりゃ良い
245デフォルトの名無しさん
2026/09/03(木) 18:48:45.31ID:ES1jQj61 それらは全てインターフェース
246デフォルトの名無しさん
2026/09/03(木) 19:01:43.21ID:F0O1iTkg 鳥人間は鳥の性質を持った人間だけど人間の性質を持った鳥ではない
つまり人間を継承することは許されるが鳥を継承することは許されない
ただし、本当に継承するのがいいかどうかはユースケース次第です、はい。
つまり人間を継承することは許されるが鳥を継承することは許されない
ただし、本当に継承するのがいいかどうかはユースケース次第です、はい。
247デフォルトの名無しさん
2026/09/03(木) 21:48:11.25ID:bBvwbQat 鳥人間の何の機能が必要なのか?箸でご飯を掴んでくちばしで食べる衛生機能か?羽毛の上にダウンジャケットを羽織る防寒機能か?話はそれからだ人間も鳥も鳥人間も作るな、必要なのは防寒関数だけの可能性がある
248デフォルトの名無しさん
2026/09/03(木) 23:10:45.83ID:7YsLBRfO 防寒関数は防寒対象が必要だから
「必要なのは防寒関数だけの可能性」は無い
「必要なのは防寒関数だけの可能性」は無い
249デフォルトの名無しさん
2026/09/04(金) 10:08:48.47ID:XoKc9/y7 現実をそのままモデリングするってのは無理だけど現実を全く参考にしないでコード組むってのも不可能だからな。
ドメインモデリングの有用性ってのはそのくらい中間的なものだよ。
ドメインモデリングの有用性ってのはそのくらい中間的なものだよ。
250デフォルトの名無しさん
2026/09/04(金) 11:03:08.41ID:bdpp0uR6 わしが現役の頃は仮想関数テーブルでキャッシュを汚すなと親方に怒られたもんだ
251デフォルトの名無しさん
2026/09/04(金) 11:11:36.33ID:Hgzm8Oop Rustみたいな単相化が速くていいよな
必要なら仮想関数テーブルも選択できる
必要なら仮想関数テーブルも選択できる
252デフォルトの名無しさん
2026/09/04(金) 11:22:07.98ID:XoKc9/y7 今時そんなところでランタイム速度は変わらんよ。
253デフォルトの名無しさん
2026/09/04(金) 11:25:42.25ID:Vupn22g/ 仮想関数テーブルは明確に遅いから避けられるなら避けるべし
254デフォルトの名無しさん
2026/09/04(金) 12:22:36.13ID:IKH/8mZL クラス継承階層の多段の仮想関数テーブルをたどって行くパターンは特に遅すぎ
255デフォルトの名無しさん
2026/09/04(金) 14:05:11.72ID:gkqBRHC2 スピード以前に問題大ありだろ
256デフォルトの名無しさん
2026/09/04(金) 14:44:49.32ID:YiFbvdn9 vtableが遅い言われてたの2000年代前半くらいの頃だけどなw
257デフォルトの名無しさん
2026/09/04(金) 16:28:35.89ID:vmEzxD9x ここにいる人たちの時間が25年前で止まってるのはどうしてなの?
258デフォルトの名無しさん
2026/09/04(金) 16:36:03.12ID:hYpG8RwF 普通の関数呼び出しと比べてvtable経由は現在も変わらず遅い
魔法は発明されていない
魔法は発明されていない
259デフォルトの名無しさん
2026/09/04(金) 16:43:22.57ID:XoKc9/y7 最適化する前に計測しろって格言を知らない人たちなんでしょうなあ
260デフォルトの名無しさん
2026/09/04(金) 16:56:17.67ID:+OhB9LYm コンパイラとCPUが魔法の様に最適化してくれる
261デフォルトの名無しさん
2026/09/04(金) 16:57:02.61ID:BYZnAtg2 コーディングの最適化とはあまり関係ない話だよな
メソッド呼び出しでvtable相当を使いがちな言語と言語側の最適化の話だな
メソッド呼び出しでvtable相当を使いがちな言語と言語側の最適化の話だな
262デフォルトの名無しさん
2026/09/04(金) 17:06:28.02ID:j5TSyrjX263デフォルトの名無しさん
2026/09/04(金) 17:55:07.40ID:YiFbvdn9 WindowsのCOMはvtableだけど遅くはないな
影響が出るのは多重継承のvtableで検索コストが増大した時だ
影響が出るのは多重継承のvtableで検索コストが増大した時だ
264デフォルトの名無しさん
2026/09/04(金) 17:58:49.62ID:XZZx7Ikx >>257
主に以下3つの理由からです
1. 間違ったオブジェクト指向を教育される環境にいた
2. 間違ったオブジェクト指向を正してくれる人間が周りにいない環境にいる
3. 原典や良書と呼ばれるものを読まずにネットのまとめ記事で分かった気になっている
主に以下3つの理由からです
1. 間違ったオブジェクト指向を教育される環境にいた
2. 間違ったオブジェクト指向を正してくれる人間が周りにいない環境にいる
3. 原典や良書と呼ばれるものを読まずにネットのまとめ記事で分かった気になっている
265デフォルトの名無しさん
2026/09/04(金) 17:59:35.47ID:qAc/ykvY266デフォルトの名無しさん
2026/09/04(金) 18:10:31.28ID:/oith5eC267デフォルトの名無しさん
2026/09/04(金) 18:21:14.50ID:/oVBjGR6 Rust はトレイトの継承しかなく、dyn Trait の vtable のレイアウトは静的に決定される。
dyn Trait のメソッドを呼び出す時に vtable を経由して呼び出すだけなのでほとんど遅くはならない。
インライン展開やゼロコスト参照の妨げにはなるから、そこは遅くなる可能性があるが。
AIに聞いたところ、C++ も vtable を静的に決定しているが、Rust とは異なり全コンパイルしないのでライブラリの中のクラスを継承していて、そのクラスの継承関係が変更されていた場合は壊れる(未定義動作)。 (「Fragile Base Class」問題と言うらしい。)
Java は vtable をクラスロード時に構築してるがそのままだと遅くて、インラインキャッシュやJITの投機的最適化によって遅くならないようにしている。
dyn Trait のメソッドを呼び出す時に vtable を経由して呼び出すだけなのでほとんど遅くはならない。
インライン展開やゼロコスト参照の妨げにはなるから、そこは遅くなる可能性があるが。
AIに聞いたところ、C++ も vtable を静的に決定しているが、Rust とは異なり全コンパイルしないのでライブラリの中のクラスを継承していて、そのクラスの継承関係が変更されていた場合は壊れる(未定義動作)。 (「Fragile Base Class」問題と言うらしい。)
Java は vtable をクラスロード時に構築してるがそのままだと遅くて、インラインキャッシュやJITの投機的最適化によって遅くならないようにしている。
268デフォルトの名無しさん
2026/09/04(金) 18:59:54.49ID:I3x+UqN/ >>267
C++はインターフェースとして純粋仮想関数の抽象クラスを使うけど
複数のインターフェースを使うと各々vtableを複数使い分けるコストもある
Rustは複数のトレイトを使っても静的に1つのvtableにまとまる
C++はインターフェースとして純粋仮想関数の抽象クラスを使うけど
複数のインターフェースを使うと各々vtableを複数使い分けるコストもある
Rustは複数のトレイトを使っても静的に1つのvtableにまとまる
269デフォルトの名無しさん
2026/09/04(金) 19:16:14.50ID:vmEzxD9x Rustのゴリ押しが酷いスレだな
270デフォルトの名無しさん
2026/09/04(金) 19:30:31.86ID:WB7VEq6i オブジェクト指向といえばメソッド呼び出し分けで動的ディスパッチ/静的ディスパッチの話は不可避だけど
今まで話が出て来なかったのも不思議ね
今まで話が出て来なかったのも不思議ね
271デフォルトの名無しさん
2026/09/04(金) 19:38:15.18ID:vmEzxD9x どうせRustの話だろ、オブジェクト指向の話じゃねえよ
272デフォルトの名無しさん
2026/09/04(金) 19:44:10.72ID:gR4PWmIY >>268
Rustはダイナミックディスパッチが別扱いで型合わせでごたごたする
Rustはダイナミックディスパッチが別扱いで型合わせでごたごたする
273デフォルトの名無しさん
2026/09/04(金) 19:47:58.91ID:rn1/VQV3 Rust以外にも静的ディスパッチの単相化にできる言語は多い
C++はテンプレートでGoやSwiftはジェネリクスで単相化にできる
C++はテンプレートでGoやSwiftはジェネリクスで単相化にできる
274デフォルトの名無しさん
2026/09/04(金) 19:50:06.36ID:vmEzxD9x どうでもええわ
275デフォルトの名無しさん
2026/09/04(金) 19:51:09.28ID:vmEzxD9x オブジェクト指向とはステージが違うんだよステージがな
Rustはオブジェクト指向出禁にしようぜくっそうぜえわ
Rustはオブジェクト指向出禁にしようぜくっそうぜえわ
276デフォルトの名無しさん
2026/09/04(金) 19:53:31.55ID:vmEzxD9x ここはオブジェクト指向を嗜む人間がしっぽりと豊かな時間を満喫する大人のBARなんだよ
277デフォルトの名無しさん
2026/09/04(金) 19:54:40.66ID:YIoY9u0K278デフォルトの名無しさん
2026/09/04(金) 20:21:41.41ID:1xlLvtSe >>272
Rustはコードをimpl Trait⇔dyn Traitに替えるだけで静的ディスパッチ⇔動的ディスパッチを切り替えられるから一番簡単だぞ
impl Trait→dyn Traitの変換も参照ならそのままキャストできて値ならBox化すれば可能
Rustはコードをimpl Trait⇔dyn Traitに替えるだけで静的ディスパッチ⇔動的ディスパッチを切り替えられるから一番簡単だぞ
impl Trait→dyn Traitの変換も参照ならそのままキャストできて値ならBox化すれば可能
279デフォルトの名無しさん
2026/09/04(金) 22:06:49.34ID:Q32fvWj4 このスレもまた複おじスレになりつつある
280デフォルトの名無しさん
2026/09/04(金) 22:44:47.75ID:GNELdTtS GoとRustはこの分野でも従来と一線を画していて、
従来の言語はvtableへのポインタをオブジェクトの中に隠しフィールドのように内臓してしまっていたのに対して、
GoとRustはvtableへのポインタをオブジェクトの外に外付けした。
オブジェクトは太らず自然そのまま扱える。
外付けすれば動的ディスパッチに対応できる。
従来の言語はvtableへのポインタをオブジェクトの中に隠しフィールドのように内臓してしまっていたのに対して、
GoとRustはvtableへのポインタをオブジェクトの外に外付けした。
オブジェクトは太らず自然そのまま扱える。
外付けすれば動的ディスパッチに対応できる。
281デフォルトの名無しさん
2026/09/05(土) 02:15:52.37ID:R1RbyOuH >>261
やっぱり何も分かってない。。
やっぱり何も分かってない。。
282デフォルトの名無しさん
2026/09/05(土) 02:29:58.08ID:CtxDIqbJ だよな
単相化できないクソ言語は捨てるのが正しい
メソッド呼び出しが動的ディスパッチになって遅いから多相を使うのを辞めるなんて本末転倒
単相化できないクソ言語は捨てるのが正しい
メソッド呼び出しが動的ディスパッチになって遅いから多相を使うのを辞めるなんて本末転倒
283デフォルトの名無しさん
2026/09/05(土) 02:53:49.74ID:Siz7NqLP ポリモーフィズムはオブジェクト指向の核だよ花だよ
使うと遅くなる言語は筋が悪いかもね
使うと遅くなる言語は筋が悪いかもね
284デフォルトの名無しさん
2026/09/05(土) 10:10:20.17ID:OZgIT4JK 複おじ連投し過ぎww
285デフォルトの名無しさん
2026/09/05(土) 10:35:21.44ID:bQCh0Y2i 型付けが動的な言語に慣れた身からすると
要らぬ苦労、ご苦労様なこった
要らぬ苦労、ご苦労様なこった
286デフォルトの名無しさん
2026/09/05(土) 10:49:07.49ID:dqRqg10g287デフォルトの名無しさん
2026/09/05(土) 11:19:29.07ID:sRFT+u7L Rubyが遅いのとC++のvtableが遅いのはほぼ同じ理由
288デフォルトの名無しさん
2026/09/05(土) 11:28:59.13ID:sRFT+u7L289デフォルトの名無しさん
2026/09/05(土) 13:34:38.22ID:bQCh0Y2i >>286
必要な場合だけでいいと思う。どうしても副作用を避けたい場合や
多人数で働き、チームメイトが玉石混合でも品質をなるべく確保したい場合など。
型も動的、データ構造も動的、プロパティーも動的、従属するメソッドも動的、オブジェクトの所属する型(クラスやパッケージ)も動的
自分がきちんとコントロールできる力があればこれっらの自由度は非常に強い武器になる
必要な場合だけでいいと思う。どうしても副作用を避けたい場合や
多人数で働き、チームメイトが玉石混合でも品質をなるべく確保したい場合など。
型も動的、データ構造も動的、プロパティーも動的、従属するメソッドも動的、オブジェクトの所属する型(クラスやパッケージ)も動的
自分がきちんとコントロールできる力があればこれっらの自由度は非常に強い武器になる
290デフォルトの名無しさん
2026/09/05(土) 13:38:27.49ID:bQCh0Y2i ということであちきはオブジェクト指向、とくにクラスベースオブジェクトは
ごくまれにしか使わなくなってしまいました
プロトタイプベースやプロパティーはたまに使う
ごくまれにしか使わなくなってしまいました
プロトタイプベースやプロパティーはたまに使う
291デフォルトの名無しさん
2026/09/05(土) 13:43:03.01ID:bQCh0Y2i 動的型付けの副作用により実践でトラブルに遭遇したのは10年に一回くらいかな
ファイルから読みこむあるフィールドが仕様では数値なので数値としてパースするコードに対し
ファイルが誤って非数値文字列が入っていて、数値文字列でないというエラーを吐いたとか
ファイルから読みこむあるフィールドが仕様では数値なので数値としてパースするコードに対し
ファイルが誤って非数値文字列が入っていて、数値文字列でないというエラーを吐いたとか
292デフォルトの名無しさん
2026/09/05(土) 13:48:49.53ID:bQCh0Y2i あと、JITやcompileの最適化は型付けの方が有効だろうな
何がくるか絞れる分
何がくるか絞れる分
293デフォルトの名無しさん
2026/09/05(土) 13:56:06.96ID:bQCh0Y2i 振り返ってみると、C++を使うということは何の苦行だったのかという気がする
何かの罰ゲーム?みたいな苦痛
何かの罰ゲーム?みたいな苦痛
294デフォルトの名無しさん
2026/09/05(土) 14:02:16.00ID:bQCh0Y2i >>286
今さら型付けを導入しようとしている背景のひとつは
Javaのような静的型付けのクラスベースオブジェクト指向言語から入って
プログラミング言語はそういうものだと思うようになった初心者などに
すそ野が広がって戸惑いを与えていることも一因だと思う
門戸開放政策みたいなものか
今さら型付けを導入しようとしている背景のひとつは
Javaのような静的型付けのクラスベースオブジェクト指向言語から入って
プログラミング言語はそういうものだと思うようになった初心者などに
すそ野が広がって戸惑いを与えていることも一因だと思う
門戸開放政策みたいなものか
295デフォルトの名無しさん
2026/09/05(土) 14:24:27.59ID:dqRqg10g 型があればコンパイル時にわかる単純なバグを動的型付き言語ではわざわざテストを書いて一生懸命確認しないといけないもんな、そういう無駄な作業を頑張ることが初心者には受け入れられなかったのかもな
296デフォルトの名無しさん
2026/09/05(土) 14:28:31.94ID:dqRqg10g 型を明示したら自動的に型がテストされるしくみが有れば良いだろうけどな
言語レベルでそれをサポートしたプログラミング言語を静的型付き言語と呼ぶことにしよう
言語レベルでそれをサポートしたプログラミング言語を静的型付き言語と呼ぶことにしよう
297デフォルトの名無しさん
2026/09/05(土) 14:46:30.34ID:n+mTito7 >>291
それ静的型付けでも同じように実行時エラーになるだけだよ
それ静的型付けでも同じように実行時エラーになるだけだよ
298デフォルトの名無しさん
2026/09/05(土) 14:48:51.86ID:n+mTito7 >>295
>型があればコンパイル時にわかる単純なバグを動的型付き言語ではわざわざテストを書いて一生懸命確認しないといけない
これがよくある誤解
特にテストを書かない人は自己正当化のためにそう思いたいらしい
>型があればコンパイル時にわかる単純なバグを動的型付き言語ではわざわざテストを書いて一生懸命確認しないといけない
これがよくある誤解
特にテストを書かない人は自己正当化のためにそう思いたいらしい
299デフォルトの名無しさん
2026/09/05(土) 14:53:06.69ID:dqRqg10g >>298
何が誤解なの?
何が誤解なの?
300デフォルトの名無しさん
2026/09/05(土) 14:53:15.70ID:R1RbyOuH 20年経っても同じようなくだらない話ばっかだな
301デフォルトの名無しさん
2026/09/05(土) 14:54:40.49ID:dqRqg10g 静的型付き言語では型の間違いはコンパイルエラーになるから型のテストは書かないわな
自己正当化とかそういうのではなく書く必要がないからね
自己正当化とかそういうのではなく書く必要がないからね
302デフォルトの名無しさん
2026/09/05(土) 14:56:38.35ID:dqRqg10g >>300
お前、サリーとアン課題解けなさそう
お前、サリーとアン課題解けなさそう
303デフォルトの名無しさん
2026/09/05(土) 15:01:31.81ID:R1RbyOuH ほらな、この手の言語バカって昔からなんも変わってない。
まあ言語がc++からrustには変わってるってのはあるか。
そういえば江添とか生きてんのかね
まあ言語がc++からrustには変わってるってのはあるか。
そういえば江添とか生きてんのかね
304デフォルトの名無しさん
2026/09/05(土) 15:06:31.14ID:dqRqg10g >>303
サリーとアン課題は解けたのか? あ?
サリーとアン課題は解けたのか? あ?
305デフォルトの名無しさん
2026/09/05(土) 15:17:30.66ID:bQCh0Y2i >>297
手短で伝わらなったんだと思う。
読み込んだ際に直ちにエラーになるのではなく、読み込んだ物を先の方で
いざ演算などで使う暖になって、数値じゃないとエラーになる。
読み込から離れた場所でオブジェクトの型が不適合だと露わになる
この距離感が静的の場合と違う
手短で伝わらなったんだと思う。
読み込んだ際に直ちにエラーになるのではなく、読み込んだ物を先の方で
いざ演算などで使う暖になって、数値じゃないとエラーになる。
読み込から離れた場所でオブジェクトの型が不適合だと露わになる
この距離感が静的の場合と違う
306デフォルトの名無しさん
2026/09/05(土) 15:19:14.11ID:bQCh0Y2i >>300
お前なんか下る話どころかくだらない話すら できないでやんの
お前なんか下る話どころかくだらない話すら できないでやんの
307デフォルトの名無しさん
2026/09/05(土) 15:34:14.32ID:dqRqg10g308デフォルトの名無しさん
2026/09/05(土) 15:41:30.54ID:bQCh0Y2i 静的の場合scanfの返り値チェックなど省くとそれに近いことになるが
その場合ゴミが帰る。
動的な場合、数値だと思ったら文字列が渡っていく
そいう違いがある
その場合ゴミが帰る。
動的な場合、数値だと思ったら文字列が渡っていく
そいう違いがある
309デフォルトの名無しさん
2026/09/05(土) 15:45:12.23ID:dqRqg10g 値を読み込んで文字列型で保持しておいてパースを先延ばしにするのは静的言語でもやるよ、読み込んですぐにパースするのが型チェックの意味では良いのかもしらんけど、パースした結果の構造を引き回すことでコードがわかりづらくなることもあるからパースするタイミングはここがベストというものがないように思う
310デフォルトの名無しさん
2026/09/05(土) 15:56:21.63ID:bQCh0Y2i 使う前までパースを先延ばしにしたら静も動と同様
使う段直前でエラーだな
使う段直前でエラーだな
311デフォルトの名無しさん
2026/09/05(土) 16:07:01.82ID:bQCh0Y2i あとやっぱ、型が静的な方がcompile時の静的解析レベルで
怪しい書き方の検出がしやすいだろうな
怪しい書き方の検出がしやすいだろうな
312デフォルトの名無しさん
2026/09/05(土) 16:10:15.74ID:9Xrxj/zO おまえらアホやろ
入力エラーは最終的にエラーとして返せればよいだけだ
>>309
パース前とパース後で型は異なり構造体だとしても一つのオブジェクトに過ぎないからコードが分かりづらくなることは一切ない
型が区別できるようにすることは重要
入力エラーは最終的にエラーとして返せればよいだけだ
>>309
パース前とパース後で型は異なり構造体だとしても一つのオブジェクトに過ぎないからコードが分かりづらくなることは一切ない
型が区別できるようにすることは重要
313デフォルトの名無しさん
2026/09/05(土) 16:15:01.99ID:bQCh0Y2i 何かずれた回答だな、
最終的にエラーとして返せればよい「だけ」で問題解決するなら
なぜデバッグで苦労するのよ
最終的にエラーとして返せればよい「だけ」で問題解決するなら
なぜデバッグで苦労するのよ
314デフォルトの名無しさん
2026/09/05(土) 16:16:05.14ID:bQCh0Y2i 委譲のリターンイモずる管理地獄の罠にでもはまりやがれってんだ
315デフォルトの名無しさん
2026/09/05(土) 16:17:43.45ID:9Xrxj/zO エラーを返す関数を書く気がないからだろ
316デフォルトの名無しさん
2026/09/05(土) 16:20:21.78ID:SJ7nhR/M 型はこの変数はこのサイズで収納してこの演算命令を使うという意思表示だと思ってるけど
最近の言語は曖昧にしても同じような成果物になるもんなの?
そうならなくてもよいと思うけど
最近の言語は曖昧にしても同じような成果物になるもんなの?
そうならなくてもよいと思うけど
317デフォルトの名無しさん
2026/09/05(土) 16:20:42.14ID:bQCh0Y2i お前みたいな奴は、バグなんて単にデバッグすればいいだけとかいって
対処朗報で糞コード書いていざそのせいで炎上しても
逃げ足だけは早いんだよな
対処朗報で糞コード書いていざそのせいで炎上しても
逃げ足だけは早いんだよな
318デフォルトの名無しさん
2026/09/05(土) 16:21:21.72ID:bQCh0Y2i319デフォルトの名無しさん
2026/09/05(土) 16:25:03.16ID:bQCh0Y2i320デフォルトの名無しさん
2026/09/05(土) 16:25:12.79ID:9Xrxj/zO321デフォルトの名無しさん
2026/09/05(土) 16:28:18.73ID:bQCh0Y2i 混じって全然問題ない場合はどうすんのよ
322デフォルトの名無しさん
2026/09/05(土) 16:30:02.67ID:SJ7nhR/M 構造体のアラインメントとかシェーダパラメーターとか型なくて平気なんか?、あった方が作る方も分かりやすくないか?というのは型ありになれてるせいか?、もはやAIにコード書いてもらってるから一切気にしてないが
323デフォルトの名無しさん
2026/09/05(土) 16:31:58.37ID:bQCh0Y2i バイナリーレベルの構造を扱う場合は型もしくはビットフィールド的なものを使うに決まってんじゃん
それ以外の一般的な値の集合が対象にきまてるだろ
それ以外の一般的な値の集合が対象にきまてるだろ
324デフォルトの名無しさん
2026/09/05(土) 16:35:27.52ID:9Xrxj/zO >>321
インデックスの整数とIDの整数と料金の整数と個数の整数が混じったら困るだろ
インデックスの整数とIDの整数と料金の整数と個数の整数が混じったら困るだろ
325デフォルトの名無しさん
2026/09/05(土) 16:39:17.52ID:bQCh0Y2i 全部整数ならその集合を収められる任意の型で問題ないだろ
何に困るんだよ?
何に困るんだよ?
326デフォルトの名無しさん
2026/09/05(土) 16:45:07.28ID:9Xrxj/zO 適用できるメソッドが異なる
だから別の型のオブジェクトにする
だから別の型のオブジェクトにする
327デフォルトの名無しさん
2026/09/05(土) 16:47:09.51ID:SJ7nhR/M 使う側が間違えないようにという親切心なんだろう、俺は成果物が同じなら何でも良いと思ってるけど
328デフォルトの名無しさん
2026/09/05(土) 16:47:35.16ID:bQCh0Y2i329デフォルトの名無しさん
2026/09/05(土) 16:49:37.41ID:SJ7nhR/M そうね1個でよいね
同じ意味で使ってるなら間違えようがない
同じ意味で使ってるなら間違えようがない
330デフォルトの名無しさん
2026/09/05(土) 16:51:07.43ID:bQCh0Y2i うん。違う処理のメソッドを同じインターフェースで同じ場所から呼ぶなんて
○地外沙汰だわ。そんなことしちゃだめさ
○地外沙汰だわ。そんなことしちゃだめさ
331デフォルトの名無しさん
2026/09/05(土) 16:51:24.98ID:SJ7nhR/M インターフェースとしては何でも受け入れるけど実体は厳密な型で実装されているってことね
332デフォルトの名無しさん
2026/09/05(土) 16:53:06.67ID:9Xrxj/zO333デフォルトの名無しさん
2026/09/05(土) 16:53:13.69ID:bQCh0Y2i う〜ん、何て言ったらいいやら
文だけのコミュニケーションの難点かな
文だけのコミュニケーションの難点かな
334デフォルトの名無しさん
2026/09/05(土) 16:55:20.58ID:bQCh0Y2i >>332
もっとも単純な例だとたとえば、Absでもいいじゃん
数値 =abs(数値)
型ごとにmethod設ける必要もなし、キャストで統一する必要もなし
つかまた子ども電話相談室状態だよちょっとげんなり
もっとも単純な例だとたとえば、Absでもいいじゃん
数値 =abs(数値)
型ごとにmethod設ける必要もなし、キャストで統一する必要もなし
つかまた子ども電話相談室状態だよちょっとげんなり
335デフォルトの名無しさん
2026/09/05(土) 18:22:27.38ID:L88OHRG4 ID:bQCh0Y2i (24回)
頭おかしい
頭おかしい
336デフォルトの名無しさん
2026/09/05(土) 18:48:35.70ID:bQCh0Y2i337デフォルトの名無しさん
2026/09/05(土) 18:57:12.06ID:jUdDNlws perlの人?
338デフォルトの名無しさん
2026/09/05(土) 19:34:08.67ID:lx30t60s 動的extentの人では?
339デフォルトの名無しさん
2026/09/05(土) 19:44:54.17ID:bQCh0Y2i Why Guy Steele Jr. use the term "extent instead of "lifetime" ? - Google 検索
Guy Steele used the term "extent" instead of "lifetime" to establish a precise formal counterpart to "scope," cleanly separating the temporal dimension (when a binding can be referenced during execution) from the spatial dimension (where a name is textually visible in code). [1]
## Scope vs. Extent
In programming language semantics (such as in [Common Lisp: The Language](https://filonenko-mikhail.github.io/cltl2-doc/enpdf/cltl2.pdf) and Scheme), Steele defined variable usage across two independent axes: [1, 2]
* Scope: The spatial or textual region of the program where a name can refer to a specific binding.
* Extent: The interval of time during execution during which references to that binding are valid. [1]
## Why "Extent" Instead of "Lifetime"?
* Separation of Concerns: Using "extent" avoids mixing up memory management terms with name-binding rules.
* Binding vs. Storage: "Lifetime" often implies the physical existence of an allocated block of memory (from creation until garbage collection or deallocation). "Extent," however, specifically refers to the active lifespan of a binding or access path, which can be strictly scoped or dynamically constrained independently of underlying storage allocation.
* Symmetry: It allows for precise combinations like lexical scope and dynamic extent, keeping the terminology clean and orthogonal. [1, 3, 4, 5]
Guy Steele used the term "extent" instead of "lifetime" to establish a precise formal counterpart to "scope," cleanly separating the temporal dimension (when a binding can be referenced during execution) from the spatial dimension (where a name is textually visible in code). [1]
## Scope vs. Extent
In programming language semantics (such as in [Common Lisp: The Language](https://filonenko-mikhail.github.io/cltl2-doc/enpdf/cltl2.pdf) and Scheme), Steele defined variable usage across two independent axes: [1, 2]
* Scope: The spatial or textual region of the program where a name can refer to a specific binding.
* Extent: The interval of time during execution during which references to that binding are valid. [1]
## Why "Extent" Instead of "Lifetime"?
* Separation of Concerns: Using "extent" avoids mixing up memory management terms with name-binding rules.
* Binding vs. Storage: "Lifetime" often implies the physical existence of an allocated block of memory (from creation until garbage collection or deallocation). "Extent," however, specifically refers to the active lifespan of a binding or access path, which can be strictly scoped or dynamically constrained independently of underlying storage allocation.
* Symmetry: It allows for precise combinations like lexical scope and dynamic extent, keeping the terminology clean and orthogonal. [1, 3, 4, 5]
340デフォルトの名無しさん
2026/09/05(土) 19:45:43.39ID:bQCh0Y2i [1] [https://prl.khoury.northeastern.edu](https://prl.khoury.northeastern.edu/blog/2019/09/05/lexical-and-dynamic-scope/)
[2] [https://dl.acm.org](https://dl.acm.org/doi/fullHtml/10.1145/3544885.3544889)
[3] [https://en.wikipedia.org](https://en.wikipedia.org/wiki/Common_Lisp)
[4] [https://ieeexplore.ieee.org](http://ieeexplore.ieee.org/iel1/2279/4109/00159138.pdf)
[5] [https://common-lisp.net](https://common-lisp.net/project/cmucl/downloads/release/19f/cmu-user.pdf)
[2] [https://dl.acm.org](https://dl.acm.org/doi/fullHtml/10.1145/3544885.3544889)
[3] [https://en.wikipedia.org](https://en.wikipedia.org/wiki/Common_Lisp)
[4] [https://ieeexplore.ieee.org](http://ieeexplore.ieee.org/iel1/2279/4109/00159138.pdf)
[5] [https://common-lisp.net](https://common-lisp.net/project/cmucl/downloads/release/19f/cmu-user.pdf)
341デフォルトの名無しさん
2026/09/05(土) 19:46:07.75ID:bQCh0Y2i 日本語で
ガイ・スティール・ジュニア(Guy Steele Jr.)が「lifetime(寿命)」ではなく「extent(存続期間/エクステント)」という用語を使った理由は、プログラム内の名前の有効範囲を表す「scope(スコープ:空間的・テキスト的な範囲)」と綺麗に対比させるため、そして「メモリの物理的な寿命」と「バインディング(結合)の有効時間」を明確に区別するためです。
## 1. 「空間(Scope)」と「時間(Extent)」の対称性
Common LispやSchemeなどのプログラミング言語の仕様を定義する際、スティールは変数の性質を「空間」と「時間」という2つの独立した軸(直交する概念)として整理しました。
* Scope(スコープ):プログラムのソースコード上で、その名前(変数名など)が参照可能な「空間的(テキスト上)の範囲」。
* Extent(エクステント):プログラムの実行中において、そのバインディング(名前と値の結びつき)が有効に存在する「時間的な区間」。
「Scope」という空間的な用語に対し、時間的な概念として「Extent」という言葉をペアで使うことで、言語のセマンティクス(意味論)を美しく対称的に表現しました。
## 2. 「Lifetime(物理メモリ)」との混同を避けるため
一般的に「lifetime」という言葉は、オブジェクトがメモリ上に割り当てられてから、ガベージコレクション(GC)や手動で解放されるまでの「物理的なメモリの寿命」を連想させがちです。
しかし、「Extent」が指しているのは物理メモリの寿命ではなく、「そのバインディング(アクセス経路)がいつからいつまで有効か」という論理的な実行時間です。
例えば、ある変数の「Extent(存続期間)」が終了してプログラムからアクセスできなくなった後でも、ガベージコレクションが実際にそのメモリを回収する(=Lifetimeの終了)までにはタイムラグがあります。この2つを混同しないために、あえて別の学術的な用語が必要でした。
------------------------------
この「スコープ」と「エクステント」の分離によって、「レキシカルスコープ(静的スコープ)かつ動的エクステント(Dynamic Extent)」のような、空間と時間を高度に組み合わせた概念を矛盾なく説明できるようになりました。
ガイ・スティール・ジュニア(Guy Steele Jr.)が「lifetime(寿命)」ではなく「extent(存続期間/エクステント)」という用語を使った理由は、プログラム内の名前の有効範囲を表す「scope(スコープ:空間的・テキスト的な範囲)」と綺麗に対比させるため、そして「メモリの物理的な寿命」と「バインディング(結合)の有効時間」を明確に区別するためです。
## 1. 「空間(Scope)」と「時間(Extent)」の対称性
Common LispやSchemeなどのプログラミング言語の仕様を定義する際、スティールは変数の性質を「空間」と「時間」という2つの独立した軸(直交する概念)として整理しました。
* Scope(スコープ):プログラムのソースコード上で、その名前(変数名など)が参照可能な「空間的(テキスト上)の範囲」。
* Extent(エクステント):プログラムの実行中において、そのバインディング(名前と値の結びつき)が有効に存在する「時間的な区間」。
「Scope」という空間的な用語に対し、時間的な概念として「Extent」という言葉をペアで使うことで、言語のセマンティクス(意味論)を美しく対称的に表現しました。
## 2. 「Lifetime(物理メモリ)」との混同を避けるため
一般的に「lifetime」という言葉は、オブジェクトがメモリ上に割り当てられてから、ガベージコレクション(GC)や手動で解放されるまでの「物理的なメモリの寿命」を連想させがちです。
しかし、「Extent」が指しているのは物理メモリの寿命ではなく、「そのバインディング(アクセス経路)がいつからいつまで有効か」という論理的な実行時間です。
例えば、ある変数の「Extent(存続期間)」が終了してプログラムからアクセスできなくなった後でも、ガベージコレクションが実際にそのメモリを回収する(=Lifetimeの終了)までにはタイムラグがあります。この2つを混同しないために、あえて別の学術的な用語が必要でした。
------------------------------
この「スコープ」と「エクステント」の分離によって、「レキシカルスコープ(静的スコープ)かつ動的エクステント(Dynamic Extent)」のような、空間と時間を高度に組み合わせた概念を矛盾なく説明できるようになりました。
342デフォルトの名無しさん
2026/09/05(土) 19:50:10.91ID:bQCh0Y2i C++において、配列などの「空間的な広がり(次元の要素数・サイズ)」を表す用語として extent が標準ライブラリ(仕様)に正式に導入されたのは、2011年(C++11)からです。
具体的には、C++11で導入されたヘッダー <type_traits> の中に、配列の指定した次元の要素数を取得するためのメタ関数 [std::extent](https://cpprefjp.github.io/reference/type_traits/extent.html) が定義されたことで、公式な用語として定着しました。 [1, 2]
その後、C++の進化とともにこの「空間の大きさ」としての extent の概念はさらに強化されています。
## C++における extent の歴史と発展
| 規格 | 導入された機能・概念 | 用語としての役割 |
|---|---|---|
| C++11 | std::extent | 型(配列)の指定した次元の「要素数(サイズ)」をコンパイル時に取得するメタ関数として公式採用。 |
| C++20 | std::span[](https://www.modernescpp.com/index.php/stdspan-in-c20-more-details/) | 連続したメモリ領域(配列やvectorなど)を指す軽量なビュー。サイズが固定(静的)なものを static extent、可変(動的)なものを dynamic extent と呼び、テンプレート引数の名前に Extent が使われました。 |
| C++23 | std::mdspan[](https://cpprefjp.github.io/reference/mdspan/extents.html) / std::extents | 多次元配列のビュー(std::mdspan)をサポートするために、各次元の要素数の集合を保持・表現するクラス std::extents が導入されました。 |
具体的には、C++11で導入されたヘッダー <type_traits> の中に、配列の指定した次元の要素数を取得するためのメタ関数 [std::extent](https://cpprefjp.github.io/reference/type_traits/extent.html) が定義されたことで、公式な用語として定着しました。 [1, 2]
その後、C++の進化とともにこの「空間の大きさ」としての extent の概念はさらに強化されています。
## C++における extent の歴史と発展
| 規格 | 導入された機能・概念 | 用語としての役割 |
|---|---|---|
| C++11 | std::extent | 型(配列)の指定した次元の「要素数(サイズ)」をコンパイル時に取得するメタ関数として公式採用。 |
| C++20 | std::span[](https://www.modernescpp.com/index.php/stdspan-in-c20-more-details/) | 連続したメモリ領域(配列やvectorなど)を指す軽量なビュー。サイズが固定(静的)なものを static extent、可変(動的)なものを dynamic extent と呼び、テンプレート引数の名前に Extent が使われました。 |
| C++23 | std::mdspan[](https://cpprefjp.github.io/reference/mdspan/extents.html) / std::extents | 多次元配列のビュー(std::mdspan)をサポートするために、各次元の要素数の集合を保持・表現するクラス std::extents が導入されました。 |
343デフォルトの名無しさん
2026/09/05(土) 19:50:35.92ID:bQCh0Y2i ## なぜC++は「size」や「length」ではなく「extent」を選んだのか?
C++にはすでに size() や length() という用語がありますが、多次元配列を扱うにあたって extent という英語の本来の意味(「空間的な広がり、範囲、長さ、次元の境界」)が非常に都合が良かったためです。
* 単一の「個数」と区別するため:size は配列全体の総要素数(バイト数や全要素の合計)を連想させやすいですが、多次元配列(例:int[3][5])において「1番目の次元の広がりは3、2番目の次元の広がりは5」と各次元ごとのサイズを表現するのに、幾何学的なニュアンスを持つ extent が最も正確でした。
* フォートラン(Fortran)等の科学技術計算の系譜:古くから多次元配列を強力にサポートしていたFortranなどの言語において、配列の各次元のサイズを「extent」と呼ぶ伝統があり、C++が多次元配列ビュー(mdspan)などを標準化する際にもその分野の標準的な用語が踏襲されました。
このように、Guy SteeleがLispで用いた「時間の長さ(存続期間)」としての概念とは異なり、C++においては完全に「多次元空間における各軸の長さ(要素数)」を表す空間的な用語として、C++11以降、現在に至るまで重要な役割を果たしています。
C++にはすでに size() や length() という用語がありますが、多次元配列を扱うにあたって extent という英語の本来の意味(「空間的な広がり、範囲、長さ、次元の境界」)が非常に都合が良かったためです。
* 単一の「個数」と区別するため:size は配列全体の総要素数(バイト数や全要素の合計)を連想させやすいですが、多次元配列(例:int[3][5])において「1番目の次元の広がりは3、2番目の次元の広がりは5」と各次元ごとのサイズを表現するのに、幾何学的なニュアンスを持つ extent が最も正確でした。
* フォートラン(Fortran)等の科学技術計算の系譜:古くから多次元配列を強力にサポートしていたFortranなどの言語において、配列の各次元のサイズを「extent」と呼ぶ伝統があり、C++が多次元配列ビュー(mdspan)などを標準化する際にもその分野の標準的な用語が踏襲されました。
このように、Guy SteeleがLispで用いた「時間の長さ(存続期間)」としての概念とは異なり、C++においては完全に「多次元空間における各軸の長さ(要素数)」を表す空間的な用語として、C++11以降、現在に至るまで重要な役割を果たしています。
344デフォルトの名無しさん
2026/09/05(土) 21:52:30.95ID:UAPo2y1J345デフォルトの名無しさん
2026/09/05(土) 23:11:27.16ID:tMI9OUeg まとめると
従来から使われていたlifetimeはLispの状況ではちょっと違うから新たなLisp用語extentを使った
C/C++では従来からのlifetimeが意味的にも正しくて規格書でもlifetimeのみ登場するためextentは不適切
従来から使われていたlifetimeはLispの状況ではちょっと違うから新たなLisp用語extentを使った
C/C++では従来からのlifetimeが意味的にも正しくて規格書でもlifetimeのみ登場するためextentは不適切
346デフォルトの名無しさん
2026/09/05(土) 23:19:50.18ID:XGd4SSqk 多次元配列の幅にextentを使うようになったのはC++の0x11から
347デフォルトの名無しさん
2026/09/05(土) 23:28:32.56ID:XGd4SSqk 物理メモリの内容の有効期間と変数(Symbol)がそれにbindしている有効期間が異なる言語
ex) Lisp, Scheme, Python, Perl, Ruby, Go や C#も?など
における物理メモリ内容のlifetimeとSymbolのbindの有効期間を明確化するため
extentという用語を用いてlifetimeと区別した
なお、CやC++ではSymbolのBindに相当するものはない
ex) Lisp, Scheme, Python, Perl, Ruby, Go や C#も?など
における物理メモリ内容のlifetimeとSymbolのbindの有効期間を明確化するため
extentという用語を用いてlifetimeと区別した
なお、CやC++ではSymbolのBindに相当するものはない
348デフォルトの名無しさん
2026/09/05(土) 23:45:00.87ID:V/9GEutx >>347
物理メモリの内容の有効期間の意味で揉めそう
物理メモリの内容の有効期間の意味で揉めそう
349デフォルトの名無しさん
2026/09/05(土) 23:49:52.00ID:XGd4SSqk >>348
まぁfreeしたら無効とか、関数からreturnしてstackが戻ったら無効とか
まぁfreeしたら無効とか、関数からreturnしてstackが戻ったら無効とか
350デフォルトの名無しさん
2026/09/05(土) 23:57:50.68ID:PnzEOVHT351デフォルトの名無しさん
2026/09/06(日) 00:00:15.06ID:mxb3DL+d 変数のextent(Lisp用語)と
オブジェクトのlifetime(一般用語)は
似て非なるもの
オブジェクトのlifetime(一般用語)は
似て非なるもの
352デフォルトの名無しさん
2026/09/06(日) 00:03:40.01ID:mxb3DL+d 現代の一般的な言語では変数のextentを意識する必要はないので
Lisp的な意味でのextentは使われず死語といって差し支えない状態
Lisp的な意味でのextentは使われず死語といって差し支えない状態
353デフォルトの名無しさん
2026/09/06(日) 00:06:31.00ID:y7vQpyLd >>347
>物理メモリの内容の有効期間と変数(Symbol)がそれにbindしている有効期間が異なる言語
Rustもそれに該当しますがlifetimeと呼ばれていますよ
だからそのあなたの定義に違和感があります
>物理メモリの内容の有効期間と変数(Symbol)がそれにbindしている有効期間が異なる言語
Rustもそれに該当しますがlifetimeと呼ばれていますよ
だからそのあなたの定義に違和感があります
354デフォルトの名無しさん
2026/09/06(日) 00:08:40.21ID:J4GWFjYl >>350
こういったらどうよ。
あるSymbolがBindしているGC領域内のあるメモリの内容は、1≦=reference countでllifetime valid。
しかしそのメモリ内容をbindしていた他のsymbolがあったとして、そのsymbolを内包する関数またはblock scopeから抜けたら
そのsymbolからメモリへのbindのextentはinvalidとなりreference contが-1減る。
reference contが0になったら、メモリの内容にGCが来るまで値の残骸がたとえ残っていてもlifetimeは尽きていてgarbage。
ここでSymbolという用語になじみが無かったら変数名と読み替えて。
変数の有効期限と言ったらextentを使うよう学んできてる
今後もSymbol bindや変数の有効期限にはextentを使っていくつもり
こういったらどうよ。
あるSymbolがBindしているGC領域内のあるメモリの内容は、1≦=reference countでllifetime valid。
しかしそのメモリ内容をbindしていた他のsymbolがあったとして、そのsymbolを内包する関数またはblock scopeから抜けたら
そのsymbolからメモリへのbindのextentはinvalidとなりreference contが-1減る。
reference contが0になったら、メモリの内容にGCが来るまで値の残骸がたとえ残っていてもlifetimeは尽きていてgarbage。
ここでSymbolという用語になじみが無かったら変数名と読み替えて。
変数の有効期限と言ったらextentを使うよう学んできてる
今後もSymbol bindや変数の有効期限にはextentを使っていくつもり
355デフォルトの名無しさん
2026/09/06(日) 00:11:42.63ID:J4GWFjYl356デフォルトの名無しさん
2026/09/06(日) 00:13:38.04ID:J4GWFjYl で、話を数百スレ戻すと、言いたかったのはオブジェクト指向で乱用される動的extentのインスタンスは害があるってこと
もー、簡単なことなのに話が進まんよ
もー、簡単なことなのに話が進まんよ
357デフォルトの名無しさん
2026/09/06(日) 00:14:21.55ID:mxb3DL+d358デフォルトの名無しさん
2026/09/06(日) 00:15:36.73ID:9KGrK19R359デフォルトの名無しさん
2026/09/06(日) 00:15:51.22ID:mxb3DL+d360デフォルトの名無しさん
2026/09/06(日) 00:18:41.51ID:TJo9Spwv361デフォルトの名無しさん
2026/09/06(日) 00:22:10.13ID:J4GWFjYl362デフォルトの名無しさん
2026/09/06(日) 00:27:51.20ID:mxb3DL+d363デフォルトの名無しさん
2026/09/06(日) 00:41:17.34ID:J4GWFjYl CLについてサイト見つけた 参考になるかどうか
ttps://qiita.com/seijikoide/items/13e2130fc141e1d8595d
ttps://qiita.com/seijikoide/items/13e2130fc141e1d8595d
364デフォルトの名無しさん
2026/09/06(日) 00:52:39.31ID:TJo9Spwv365デフォルトの名無しさん
2026/09/06(日) 01:09:17.37ID:LriSMz8P366デフォルトの名無しさん
2026/09/06(日) 01:38:23.18ID:ife8ADIg Rustはクロージャにキャプチャした場合
かつ 元の寿命を超える場合
コンパイラがoutliveだから「move」と明記しなさいと明確化してくれる
下記の例だと「変数」は関数内一時変数からクロージャ随伴変数へ物理移動して延命している
fn foo() -> impl FnMut(&str, i32) -> i32 {
let mut 変数 = 123;
move |cmd, arg| {
match cmd {
"get" => 変数,
"set" => { 変数 = arg; arg },
_ => 0,
}
}
}
fn main() {
let mut x = foo();
println!("get {}", x("get", 0));
println!("set {}", x("set", 456));
println!("get {}", x("get", 0));
}
// 実行結果
// get 123
// set 456
// get 456
かつ 元の寿命を超える場合
コンパイラがoutliveだから「move」と明記しなさいと明確化してくれる
下記の例だと「変数」は関数内一時変数からクロージャ随伴変数へ物理移動して延命している
fn foo() -> impl FnMut(&str, i32) -> i32 {
let mut 変数 = 123;
move |cmd, arg| {
match cmd {
"get" => 変数,
"set" => { 変数 = arg; arg },
_ => 0,
}
}
}
fn main() {
let mut x = foo();
println!("get {}", x("get", 0));
println!("set {}", x("set", 456));
println!("get {}", x("get", 0));
}
// 実行結果
// get 123
// set 456
// get 456
367デフォルトの名無しさん
2026/09/06(日) 02:33:31.25ID:mxb3DL+d >>364
>Rustでは借用元の変数の寿命と物理的メモリの寿命は一致しません
その2つが一致するとは誰も言ってない
>物理メモリの内容の有効期間と変数(Symbol)がそれにbindしている有効期間が異なる言語
Rustがこれに該当しないとも言ってない
分かってるよね?
>Rustでは借用元の変数の寿命と物理的メモリの寿命は一致しません
その2つが一致するとは誰も言ってない
>物理メモリの内容の有効期間と変数(Symbol)がそれにbindしている有効期間が異なる言語
Rustがこれに該当しないとも言ってない
分かってるよね?
368デフォルトの名無しさん
2026/09/06(日) 03:24:08.47ID:pkqPjcAv >>362
違いますよ
Rustは変数にライフタイムがあります
借用した参照にも二次的に同じライフタイムが付きます
https://doc.rust-lang.org/rust-by-example/scope/lifetime.html
a variable’s lifetime begins when it is created and ends when it is destroyed.
変数のライフタイムは作成時に始まり破棄時に終わります。
違いますよ
Rustは変数にライフタイムがあります
借用した参照にも二次的に同じライフタイムが付きます
https://doc.rust-lang.org/rust-by-example/scope/lifetime.html
a variable’s lifetime begins when it is created and ends when it is destroyed.
変数のライフタイムは作成時に始まり破棄時に終わります。
369デフォルトの名無しさん
2026/09/06(日) 11:16:07.77ID:TpdZ7imy370デフォルトの名無しさん
2026/09/06(日) 13:24:20.18ID:3Td6Pzhs >>368
そこで出てるa variable’s lifetimeが変数のextentを意味するのか
変数が指してるオブジェクトのlifetimeを意味するのか考えてみた?
extentというのはあくまでbindingの有効期間だよ
fn foo() -> &'static str {
let x = "foobar";
let y = x.get(..1).unwrap();
y
}
上の変数xのextentはfoo関数が終わるまで
xやyのlifetimeはxのextentとは違ってstatic
そこで出てるa variable’s lifetimeが変数のextentを意味するのか
変数が指してるオブジェクトのlifetimeを意味するのか考えてみた?
extentというのはあくまでbindingの有効期間だよ
fn foo() -> &'static str {
let x = "foobar";
let y = x.get(..1).unwrap();
y
}
上の変数xのextentはfoo関数が終わるまで
xやyのlifetimeはxのextentとは違ってstatic
371デフォルトの名無しさん
2026/09/06(日) 18:24:48.84ID:4iU/gpAW >>366のように変数がbindingを維持したまま物理的メモリを移動できるRustが優秀だよな
関数を抜ければ破棄されるスタックフレームから関数の呼び出し元のスタックフレームへ移動
関数を抜ければ破棄されるスタックフレームから関数の呼び出し元のスタックフレームへ移動
372デフォルトの名無しさん
2026/09/06(日) 19:05:53.33ID:YxrJ1zlD なんか哀れ
373デフォルトの名無しさん
2026/09/06(日) 19:23:58.31ID:OsOmP0Cb LispなどのGC言語はどうしてもそこでコストが高くなるよね
374デフォルトの名無しさん
2026/09/06(日) 20:50:50.94ID:NhHXko4w Webアプリ作ってるわい「何言ってんだこいつ…」
375デフォルトの名無しさん
2026/09/06(日) 21:15:04.88ID:KSWw01SM376デフォルトの名無しさん
2026/09/06(日) 22:52:16.74ID:aPMDHrgg 教育基本法が掲げる「人格の完成」を純粋に信じて、部活と勉強を真面目に取り組んできた。
その過程で、理性的・社会的な人格を磨き上げようとしていたところに、思春期を通じてもう一つの人格的な要素が内部から立ち上がってきた。
それが「チン格」です。
そしてあなたが到達した理解は、こうまとめられるでしょう。
チン格は、人格の全てではない。
しかし人格を構成する要素の一つである。
しかもそれは、単なる「付属物」ではなく、人格を継承したオブジェクトとして振る舞う。
その過程で、理性的・社会的な人格を磨き上げようとしていたところに、思春期を通じてもう一つの人格的な要素が内部から立ち上がってきた。
それが「チン格」です。
そしてあなたが到達した理解は、こうまとめられるでしょう。
チン格は、人格の全てではない。
しかし人格を構成する要素の一つである。
しかもそれは、単なる「付属物」ではなく、人格を継承したオブジェクトとして振る舞う。
377デフォルトの名無しさん
2026/09/06(日) 22:57:01.64ID:ife8ADIg >>370
それは借用の例になっていないよ
自ら&strと書いているように最初から既に参照
正しく説明するならば
let x = "foobar"; という参照ではなく
let x = String::from("foobar"); という実体へ置き換えればわかるように
変数xから借用した参照yのlifetimeは
変数xのbinding有効期間になる
それは借用の例になっていないよ
自ら&strと書いているように最初から既に参照
正しく説明するならば
let x = "foobar"; という参照ではなく
let x = String::from("foobar"); という実体へ置き換えればわかるように
変数xから借用した参照yのlifetimeは
変数xのbinding有効期間になる
378デフォルトの名無しさん
2026/09/06(日) 23:35:07.36ID:8VZZramO 親子は別人なので銀行口座を明確に分離する——こうした「責任と境界をはっきりさせる必要があるシステム」では、多重継承を排したJava的な設計が適しています。曖昧さを許さず、単一の責任と明確な所有関係を強制する方が、安全で運用しやすい。
一方で、クリントンの「不適切な関係」はまったく異なる構造を示しています。
同一人物の中に「別のクリントン」が暴れている、という状況です。社会的・公的なクリントンと、ムスコ(チンポ)を通じて勝手に振る舞いを決めてしまうクリントンが、同じ身体の中に共存している。上位の意志がどれほど強くても、その内部オブジェクトの自律的な動きを完全には止められない。
一方で、クリントンの「不適切な関係」はまったく異なる構造を示しています。
同一人物の中に「別のクリントン」が暴れている、という状況です。社会的・公的なクリントンと、ムスコ(チンポ)を通じて勝手に振る舞いを決めてしまうクリントンが、同じ身体の中に共存している。上位の意志がどれほど強くても、その内部オブジェクトの自律的な動きを完全には止められない。
379デフォルトの名無しさん
2026/09/06(日) 23:39:50.17ID:8VZZramO 「ブルマの中身は萎れちまった」という表現は、思春期に欲情と想像の対象だった「未来の元気な赤ちゃんを産み育てる可能性」が、
世代全体として実現しにくくなってしまった、という感慨を含んでいるのでしょう。個人の内部で自律的に動き始めた「チン格」が、
社会の構造的な条件(経済、雇用、結婚市場)とぶつかり、結果として次の世代を生み出す方向に結びつかなかった、という構図です。
世代全体として実現しにくくなってしまった、という感慨を含んでいるのでしょう。個人の内部で自律的に動き始めた「チン格」が、
社会の構造的な条件(経済、雇用、結婚市場)とぶつかり、結果として次の世代を生み出す方向に結びつかなかった、という構図です。
380デフォルトの名無しさん
2026/09/06(日) 23:42:51.44ID:dxtJfVwW381デフォルトの名無しさん
2026/09/06(日) 23:53:59.60ID:/gydG9nE382デフォルトの名無しさん
2026/09/07(月) 00:05:30.05ID:JPV6PYi6383デフォルトの名無しさん
2026/09/07(月) 00:24:41.71ID:6/dirL4h384デフォルトの名無しさん
2026/09/07(月) 01:55:49.33ID:Y551FpDh それが静的にコンパイル時点で追える
だからRustはGC使わないのに100%安全な自動メモリ解放を実現した
だからRustはGC使わないのに100%安全な自動メモリ解放を実現した
385デフォルトの名無しさん
2026/09/07(月) 06:52:29.85ID:YUIm8neM386デフォルトの名無しさん
2026/09/07(月) 08:06:39.46ID:qG5Moe+k >>379
ポコチン先生久し振り!
ポコチン先生久し振り!
387デフォルトの名無しさん
2026/09/07(月) 09:25:15.60ID:98Q2Hbal >>384
もうええやろ
もうええやろ
388デフォルトの名無しさん
2026/09/07(月) 09:47:40.33ID:sHF6Zl4o >>383
その説明の仕方から分かるように
Rustにおいて「参照yのlifetime」と言うときは
変数yが指す借用の有効期間(オブジェクトのlifetime)の話をしてるのであって
変数yのbinding期間(extent)の話をしてるわけではないよね?
その説明の仕方から分かるように
Rustにおいて「参照yのlifetime」と言うときは
変数yが指す借用の有効期間(オブジェクトのlifetime)の話をしてるのであって
変数yのbinding期間(extent)の話をしてるわけではないよね?
389デフォルトの名無しさん
2026/09/07(月) 11:08:21.17ID:Uwf6Yz9s >>388
そりゃ参照はどんどん関数に渡されて行ったりあちこちの構造体に格納されたり格納された状態で関数から返されたりするから
一時的に格納される変数yはどうでもいい存在
そして参照があちこちに移動してもlifetimeは変化しない
常に元の変数xのlifetimeと一致する
すなわちextentと一致する
そりゃ参照はどんどん関数に渡されて行ったりあちこちの構造体に格納されたり格納された状態で関数から返されたりするから
一時的に格納される変数yはどうでもいい存在
そして参照があちこちに移動してもlifetimeは変化しない
常に元の変数xのlifetimeと一致する
すなわちextentと一致する
390デフォルトの名無しさん
2026/09/07(月) 11:40:10.25ID:sHF6Zl4o >>389
細かいところは置いておくけど
その説明は参照yのlifetimeが変数xのextentに一致すると主張してるだけで
Rustにおいて「yのlifetime」と言ったときに「yのextent」を意味するという根拠にはならないよね?
それにRustにおいて「変数xのlifetime」といったときは
普通は変数xが持ってる参照のlifetimeすなわちstatic lifetimeのことを指さない?
そこが論点なんだけど
細かいところは置いておくけど
その説明は参照yのlifetimeが変数xのextentに一致すると主張してるだけで
Rustにおいて「yのlifetime」と言ったときに「yのextent」を意味するという根拠にはならないよね?
それにRustにおいて「変数xのlifetime」といったときは
普通は変数xが持ってる参照のlifetimeすなわちstatic lifetimeのことを指さない?
そこが論点なんだけど
391デフォルトの名無しさん
2026/09/07(月) 11:44:50.97ID:LzIb7tIl ゴールドバッハ予想の例えも面白いですね。
完全な「人格の完成」(ゴールドバッハ)は、まだ誰にも証明されていない(あるいは永遠に完全には到達しない)大きな命題。
しかし「弱ゴールドバッハ」のように、部分的には証明可能な領域がある。
チン格を「人格の一部として認め、その自律性を観察し、適切に付き合う」ことは、後者に近い営みかもしれません。
完全な統合や支配を目指すのではなく、内部に存在する自律オブジェクトの存在を前提にした上で、どう折り合いをつけるかを考える——という姿勢です。
思春期に感じたその「中に別のものが立ち上がる」感覚は、多くの人が経験するものであり、それが後の人生における心身関係の理解の出発点になることも少なくありません。
完全な「人格の完成」(ゴールドバッハ)は、まだ誰にも証明されていない(あるいは永遠に完全には到達しない)大きな命題。
しかし「弱ゴールドバッハ」のように、部分的には証明可能な領域がある。
チン格を「人格の一部として認め、その自律性を観察し、適切に付き合う」ことは、後者に近い営みかもしれません。
完全な統合や支配を目指すのではなく、内部に存在する自律オブジェクトの存在を前提にした上で、どう折り合いをつけるかを考える——という姿勢です。
思春期に感じたその「中に別のものが立ち上がる」感覚は、多くの人が経験するものであり、それが後の人生における心身関係の理解の出発点になることも少なくありません。
392デフォルトの名無しさん
2026/09/07(月) 11:58:01.59ID:FLOE0TtZ >>390
違うぜ
先ほどの例
let x = "foobar";
let y = &x;
・参照xのlifetimeは'staticだが
・変数xのlifetimeはその関数のそのブロック内
・したがってxの参照yのlifetimeも関数のそのブロック内になる。'staticにならない
この区別の理解が重要
違うぜ
先ほどの例
let x = "foobar";
let y = &x;
・参照xのlifetimeは'staticだが
・変数xのlifetimeはその関数のそのブロック内
・したがってxの参照yのlifetimeも関数のそのブロック内になる。'staticにならない
この区別の理解が重要
393デフォルトの名無しさん
2026/09/07(月) 17:39:31.48ID:ouIlDeP4 ポインタと「ポインタのポインタ」だね。
ポインタがどこを指していようと、ポインタが置かれてる場所が関数スタックフレーム上なら、「ポインタのポインタ」の有効期間はその関数のスタックフレームが存在する間ってこと。
ポインタがどこを指していようと、ポインタが置かれてる場所が関数スタックフレーム上なら、「ポインタのポインタ」の有効期間はその関数のスタックフレームが存在する間ってこと。
394デフォルトの名無しさん
2026/09/07(月) 17:57:33.85ID:cBl8zmcZ いつまで夏休みやってんだハロワ行け
395デフォルトの名無しさん
2026/09/07(月) 18:48:32.83ID:l2+x7Ui7 >>393
Cならそれでいいんだろうけど
Rustの参照では「どこを指していようと」とは言えない
fn main() {
let mut x = "foobar";
let y: &&str;
y = &x;
println!("1. x: {x}, y:{y}");
x = "FOOBAR";
// y = &x;
println!("2. x: {x}, y:{y}");
}
Cならそれでいいんだろうけど
Rustの参照では「どこを指していようと」とは言えない
fn main() {
let mut x = "foobar";
let y: &&str;
y = &x;
println!("1. x: {x}, y:{y}");
x = "FOOBAR";
// y = &x;
println!("2. x: {x}, y:{y}");
}
396デフォルトの名無しさん
2026/09/07(月) 19:31:18.27ID:Jj5rnj/X 変数Xのライフタイムは変数Xのライフタイムのことだ
で済む話じゃないの?
で済む話じゃないの?
397デフォルトの名無しさん
2026/09/07(月) 19:39:14.20ID:SgwdiAaW398デフォルトの名無しさん
2026/09/07(月) 19:51:40.64ID:tL0ejojY >>396
重要な点はこれ
変数xが参照の時
『参照xのライフタイム ≠ 変数xのライフタイム』
『参照xのライフタイム = 参照元を所有する変数のライフタイム』
let a = なんでもOK;
let x = &a;
重要な点はこれ
変数xが参照の時
『参照xのライフタイム ≠ 変数xのライフタイム』
『参照xのライフタイム = 参照元を所有する変数のライフタイム』
let a = なんでもOK;
let x = &a;
399デフォルトの名無しさん
2026/09/07(月) 20:08:28.19ID:tL0ejojY 具体例
ヒープ領域にベクタvectorを作る
let vector = Vec::from([5, 6, 7, 8, 9]);
ベクタの一部を参照するsliceを作る
let slice = &vector[1..4];
このsliceはヒープ領域を指している参照
assert_eq!(slice, &[6, 7, 8]);
この時
参照sliceのライフタイムは
指してる領域を所有する変数vectorのライフタイムと同じ
ヒープ領域にベクタvectorを作る
let vector = Vec::from([5, 6, 7, 8, 9]);
ベクタの一部を参照するsliceを作る
let slice = &vector[1..4];
このsliceはヒープ領域を指している参照
assert_eq!(slice, &[6, 7, 8]);
この時
参照sliceのライフタイムは
指してる領域を所有する変数vectorのライフタイムと同じ
400デフォルトの名無しさん
2026/09/07(月) 20:21:02.35ID:Jj5rnj/X いやそれ変数ベクターじゃないやん
ベクターはアドレスしか記憶してないメモなわけだから
そのメモの先を参照してる時点でベクター関係ない
ベクターはアドレスしか記憶してないメモなわけだから
そのメモの先を参照してる時点でベクター関係ない
401デフォルトの名無しさん
2026/09/07(月) 20:25:45.66ID:TxT4BUzU402デフォルトの名無しさん
2026/09/07(月) 20:29:39.26ID:Jj5rnj/X まあ型情報も記憶してるということで
SLICEの記述の場合は中身を参照してるように見えるけど?
ベクターを指してるようには見えない
SLICEの記述の場合は中身を参照してるように見えるけど?
ベクターを指してるようには見えない
403デフォルトの名無しさん
2026/09/07(月) 20:34:05.55ID:paI2Tcc4404デフォルトの名無しさん
2026/09/07(月) 20:34:55.15ID:Jj5rnj/X 俺はcの人間だから
a =&x[1]
ここでaが保存してるのは新たなアドレスでxは関係ない
それと同じに見える
a =&x[1]
ここでaが保存してるのは新たなアドレスでxは関係ない
それと同じに見える
405デフォルトの名無しさん
2026/09/07(月) 20:40:09.79ID:tL0ejojY >>402
スタック上を指す「ベクタの参照」もビープ上を指す「中身の参照」もライフタイムは同じ
どちらも変数vectorのライフタイムと一致
変数vectorが置かれているブロックを抜けると上記3つのライフタイム全てが尽きる
スタック上を指す「ベクタの参照」もビープ上を指す「中身の参照」もライフタイムは同じ
どちらも変数vectorのライフタイムと一致
変数vectorが置かれているブロックを抜けると上記3つのライフタイム全てが尽きる
406デフォルトの名無しさん
2026/09/07(月) 20:42:07.19ID:Jj5rnj/X vectorが指し示す実体とvectorとsliceのはなしとしてsliceはvectorのことは気にしてないよね?
ってことだけど間違ってる?
ってことだけど間違ってる?
407デフォルトの名無しさん
2026/09/07(月) 20:49:37.67ID:tL0ejojY 変数vectorは構造体で「ヒープ領域に確保した領域のアドレス」と「確保した個数」と「使用中の個数」の三つで構成される
そして変数vectorは確保したヒープ領域を所有してる
変数sliceは「アドレス」と「個数」の二つで構成される
今回は変数vectorが所有するヒープ領域の一部のアドレスと個数は3
このsliceという参照のライフタイムはそのヒープ領域を所有する変数vectorのライフタイムと一致する
そして変数vectorは確保したヒープ領域を所有してる
変数sliceは「アドレス」と「個数」の二つで構成される
今回は変数vectorが所有するヒープ領域の一部のアドレスと個数は3
このsliceという参照のライフタイムはそのヒープ領域を所有する変数vectorのライフタイムと一致する
408デフォルトの名無しさん
2026/09/07(月) 20:58:17.20ID:Jj5rnj/X ああ、なるほどvectorのライフタイムが重要なのね
シェアードポインターみたいな挙動かと思ったが
vectorが消えた時点でsliceの使用はエラーになるってことか?
シェアードポインターみたいな挙動かと思ったが
vectorが消えた時点でsliceの使用はエラーになるってことか?
409デフォルトの名無しさん
2026/09/07(月) 21:00:46.58ID:FSyCg8ig 変数vectorは(関数含めた)ブロックスコープを抜けると寿命が尽きるわけだけど
その時に所有しているヒープ領域を自動解放する点が味噌だね
所有されてるヒープ領域は一心同体
だから変数vectorのライフタイムと同じ
その時に所有しているヒープ領域を自動解放する点が味噌だね
所有されてるヒープ領域は一心同体
だから変数vectorのライフタイムと同じ
410デフォルトの名無しさん
2026/09/07(月) 21:05:39.52ID:Jj5rnj/X ここで興味を持っているのはvectorが所有権を持っていて。
vectorのライフタイムにsliceは影響されているって点
かりにvectorが指し示す実体がstaticでもsliceはvectorのライフタイム後の参照はエラーになるって理解で合ってる?
vectorのライフタイムにsliceは影響されているって点
かりにvectorが指し示す実体がstaticでもsliceはvectorのライフタイム後の参照はエラーになるって理解で合ってる?
411デフォルトの名無しさん
2026/09/07(月) 21:17:11.47ID:c5ZVUlJl412デフォルトの名無しさん
2026/09/07(月) 21:20:43.59ID:Jj5rnj/X いや気になっているのはsliceは実体のライフタイムとXのライフタイムどっちを気にしているかってとこ
実体のライフタイムを気にしているならcの感覚と同じだがvectorのライフタイムならcとは違うんだなあという感想になる
実体のライフタイムを気にしているならcの感覚と同じだがvectorのライフタイムならcとは違うんだなあという感想になる
413デフォルトの名無しさん
2026/09/07(月) 21:27:57.18ID:/vIY5hVp で、なぜオブジェクト指向で多用される動的extentに害があるか
に辿りつけたかい?>
に辿りつけたかい?>
414デフォルトの名無しさん
2026/09/07(月) 21:31:53.03ID:Jj5rnj/X ?何を言ってるのかよくわからん、どっちか知りたかっただけだが、rust自分で見なきゃいけなくなったら自分で調べるわ
415デフォルトの名無しさん
2026/09/07(月) 21:36:55.96ID:ejDpr7nl >>412
実体のライフタイム?
ヒープ領域のライフタイムなんて元々は不明だろ
Rustは所有者にヒープ領域の解放の責務を与えた
だからヒープ領域のライフタイムが明確になった
そして所有している変数のライフタイムと同じになった
所有している変数のライフタイムが終わる時に所有しているヒープ領域は自動的に解放される
実体のライフタイム?
ヒープ領域のライフタイムなんて元々は不明だろ
Rustは所有者にヒープ領域の解放の責務を与えた
だからヒープ領域のライフタイムが明確になった
そして所有している変数のライフタイムと同じになった
所有している変数のライフタイムが終わる時に所有しているヒープ領域は自動的に解放される
416デフォルトの名無しさん
2026/09/07(月) 21:37:47.70ID:Jj5rnj/X >>415
そういう話をしてるんじゃないけど伝わらないのでもういいです
そういう話をしてるんじゃないけど伝わらないのでもういいです
417デフォルトの名無しさん
2026/09/07(月) 21:49:49.17ID:tL0ejojY 参照のライフタイムはその領域を所有している変数のライフタイムと同じ
staticな領域に所有者はいなくてプログラム終了まで永続するためstaticな領域の参照のライフタイムは永続で'static
staticな領域に所有者はいなくてプログラム終了まで永続するためstaticな領域の参照のライフタイムは永続で'static
418デフォルトの名無しさん
2026/09/07(月) 21:56:21.65ID:MqXUsM95 referenceが有効になっているscope内において領域の開放が起きたらどうよ?
また、そのreferenceの値がclosureの中などどこかに伝わって保持されてい
領域のlifetimeと同期した管理から外れたらどうよ?
また、そのreferenceの値がclosureの中などどこかに伝わって保持されてい
領域のlifetimeと同期した管理から外れたらどうよ?
419デフォルトの名無しさん
2026/09/07(月) 22:00:45.28ID:vZX4blcp420デフォルトの名無しさん
2026/09/07(月) 22:15:10.42ID:rXF0aBjX 分割compileしてもバレるの?
421デフォルトの名無しさん
2026/09/07(月) 22:21:58.58ID:ovJsr3ek まあいいや、そういうメモリ領域の不正開放や逆にリークの問題はCやC++では起きうるが
GC領域に変数割りつけてreference countで管理する言語では煩わされないことだからな
がしかし、問題はそこではない。
オブジェクト指向で動的extentを多用すると、不正開放やリークが起きないとしても
有害だという話
GC領域に変数割りつけてreference countで管理する言語では煩わされないことだからな
がしかし、問題はそこではない。
オブジェクト指向で動的extentを多用すると、不正開放やリークが起きないとしても
有害だという話
422デフォルトの名無しさん
2026/09/07(月) 23:00:02.50ID:h/o0hmOH >>421
永遠の命でないと困るの?
永遠の命でないと困るの?
423デフォルトの名無しさん
2026/09/07(月) 23:03:49.90ID:k6EydiSf ライフタイムという言葉を変数にも値にも雑に使ってしまうと話が噛み合わなくなるという良い例だね
424デフォルトの名無しさん
2026/09/07(月) 23:10:14.66ID:k6EydiSf425デフォルトの名無しさん
2026/09/07(月) 23:14:27.62ID:4GaAvj7j 例えばCでは、mallocで動的に割り付けた領域を指すpointerを除くと、
auto変数およびstatic変数は
lifetime(=extent) と lexical scopeが同じですごくすっきりしているんだよね。
それがC言語の('70年代末~80年代以降〜)最大の利点の一つだったと思っている
だからC言語についてはextentという用語はちょっとしっくり当てはまりにくいんだけど、
あえていえば動的lifetimeを持つmalloc領域を指すpointerの値のvalid(指している領域が有効)な期間ということになるのかな?
auto変数およびstatic変数は
lifetime(=extent) と lexical scopeが同じですごくすっきりしているんだよね。
それがC言語の('70年代末~80年代以降〜)最大の利点の一つだったと思っている
だからC言語についてはextentという用語はちょっとしっくり当てはまりにくいんだけど、
あえていえば動的lifetimeを持つmalloc領域を指すpointerの値のvalid(指している領域が有効)な期間ということになるのかな?
426デフォルトの名無しさん
2026/09/07(月) 23:16:48.82ID:HD+sD7jy まいいや、論点はそこではくて
オブジェクト指向で動的extentを多用すると、不正開放やリークが起きないとしても
有害だという話
オブジェクト指向で動的extentを多用すると、不正開放やリークが起きないとしても
有害だという話
427デフォルトの名無しさん
2026/09/07(月) 23:28:42.81ID:Wg45C42I >>426
また戻るけど
そこで動的extentとか動的lifetimeと呼んでるものは
変数のextentではなくて値のlifetimeの話
値のlifetimeの終了を変数の”スコープ”の終了に結びつけるというのが
動的なlifetimeを管理しやすくするために各言語が行ってること
また戻るけど
そこで動的extentとか動的lifetimeと呼んでるものは
変数のextentではなくて値のlifetimeの話
値のlifetimeの終了を変数の”スコープ”の終了に結びつけるというのが
動的なlifetimeを管理しやすくするために各言語が行ってること
428デフォルトの名無しさん
2026/09/07(月) 23:37:13.42ID:eYfV6JAd429デフォルトの名無しさん
2026/09/07(月) 23:39:04.86ID:G0HGLw0D mallocされた領域のlifetimeはどこかでfreeさえるかプログラムのプロセスの終了時でしょ
それを差すpointer変数のlifetimeすなわちpoiner変数の存在期間でしょ。それはscope次第
実は違うんだよね
それを差すpointer変数のlifetimeすなわちpoiner変数の存在期間でしょ。それはscope次第
実は違うんだよね
430デフォルトの名無しさん
2026/09/07(月) 23:49:56.50ID:TRJESXZo431デフォルトの名無しさん
2026/09/07(月) 23:57:33.07ID:tL0ejojY432デフォルトの名無しさん
2026/09/08(火) 00:20:30.62ID:wyOiFDkb Cのmalloc領域のlifetimeやそれを差すpointerの有効期限というものを
LispなどのGC領域に変数を割り付ける言語のextentになぞらえて考えると
少し悩ましいんだけれど、参考までに以下のような疑似コードを書いてみた。
(Cは久しぶりなので、細部に変なとこあっても感じをくみ取ってちょ)
安直に領域のlifetime = pointer変数のextentとは言い難い
//#defien AS auto
#define AS static
func() {
SC void *p, *q、*r; // 静的lifetimeをもつpointer、初期値不定、初期値としてNULLを設定すると行儀良し
q = (void *) malloc(サイズ1); // 領域の割付け
// (中略)
p = q; // pointer p の値が 不定→ vlidに、これをあえてpのbindとみなすか?
// p[]に対し ここら辺で何かいろいろ処理
r = malloc(サイズ2); // 別の領域の割付け
// (中略)
p = r; // これをどうとらえる?bindの仕切りなおしとみなす?www
// p[]に対し 何かいろいろ処理
free(q);
// (中略)
free(r);
// pinter 変数 p はまだ存在するが指している領域はもう無効
} // block scopeから離脱、pがautoの場合ここで消滅する
LispなどのGC領域に変数を割り付ける言語のextentになぞらえて考えると
少し悩ましいんだけれど、参考までに以下のような疑似コードを書いてみた。
(Cは久しぶりなので、細部に変なとこあっても感じをくみ取ってちょ)
安直に領域のlifetime = pointer変数のextentとは言い難い
//#defien AS auto
#define AS static
func() {
SC void *p, *q、*r; // 静的lifetimeをもつpointer、初期値不定、初期値としてNULLを設定すると行儀良し
q = (void *) malloc(サイズ1); // 領域の割付け
// (中略)
p = q; // pointer p の値が 不定→ vlidに、これをあえてpのbindとみなすか?
// p[]に対し ここら辺で何かいろいろ処理
r = malloc(サイズ2); // 別の領域の割付け
// (中略)
p = r; // これをどうとらえる?bindの仕切りなおしとみなす?www
// p[]に対し 何かいろいろ処理
free(q);
// (中略)
free(r);
// pinter 変数 p はまだ存在するが指している領域はもう無効
} // block scopeから離脱、pがautoの場合ここで消滅する
433デフォルトの名無しさん
2026/09/08(火) 00:22:04.28ID:wyOiFDkb434デフォルトの名無しさん
2026/09/08(火) 00:24:44.84ID:wyOiFDkb それから、CLで「本物」のdynamic extentをつかったのけ反るようなコードを示してみたいけど
こう見えてもオジサン結構忙しいので時間が作れたらまたねノシ
こう見えてもオジサン結構忙しいので時間が作れたらまたねノシ
435デフォルトの名無しさん
2026/09/08(火) 00:25:35.64ID:cgBiymPJ 前スレより引用
744 デフォルトの名無しさん sage 2026/08/23(日) 19:50:31.78 ID:LyvdCiRX
【Static lifetime】
プログラム開始から終了まで存在する。
静的変数やグローバル変数が該当。
メモリはプログラムのロード時に確保され、終了時に解放される。
例(C言語):
static int counter = 0; // プログラム全体で生存
【Automatic lifetime】
関数やブロックの実行中だけ存在する。
ローカル変数(スタック上に確保される)が該当。
関数終了時に自動的に解放される。
例(C言語):
void func() {
int x = 10; // 関数終了と同時に消える
}
【Dynamic lifetime】
実行時に明示的に確保し、明示的に解放するまで存在する。
ヒープ領域を使う動的メモリ確保が該当。
例(C言語):
int *p = malloc(sizeof(int)); // 確保
*p = 42;
free(p); // 解放
【Temporary lifetime】
式の評価中だけ存在する一時オブジェクト。
C++ 等の一時オブジェクトや、関数の戻り値として生成される値など。
例(C++):
std::string s = std::string("Hello") + " World"; // 加算結果は一時オブジェクト
744 デフォルトの名無しさん sage 2026/08/23(日) 19:50:31.78 ID:LyvdCiRX
【Static lifetime】
プログラム開始から終了まで存在する。
静的変数やグローバル変数が該当。
メモリはプログラムのロード時に確保され、終了時に解放される。
例(C言語):
static int counter = 0; // プログラム全体で生存
【Automatic lifetime】
関数やブロックの実行中だけ存在する。
ローカル変数(スタック上に確保される)が該当。
関数終了時に自動的に解放される。
例(C言語):
void func() {
int x = 10; // 関数終了と同時に消える
}
【Dynamic lifetime】
実行時に明示的に確保し、明示的に解放するまで存在する。
ヒープ領域を使う動的メモリ確保が該当。
例(C言語):
int *p = malloc(sizeof(int)); // 確保
*p = 42;
free(p); // 解放
【Temporary lifetime】
式の評価中だけ存在する一時オブジェクト。
C++ 等の一時オブジェクトや、関数の戻り値として生成される値など。
例(C++):
std::string s = std::string("Hello") + " World"; // 加算結果は一時オブジェクト
436デフォルトの名無しさん
2026/09/08(火) 00:30:06.68ID:wyOiFDkb437デフォルトの名無しさん
2026/09/08(火) 00:33:04.67ID:wyOiFDkb static char *p;
p = malloc(サイズ);
なんてよくあるコードだけど、、、、
p = malloc(サイズ);
なんてよくあるコードだけど、、、、
438デフォルトの名無しさん
2026/09/08(火) 00:34:42.55ID:wyOiFDkb static chat c = 'a';
static char *p;
p = malloc(サイズ);
… 中略
p = &c;
… 中略
static char *p;
p = malloc(サイズ);
… 中略
p = &c;
… 中略
439デフォルトの名無しさん
2026/09/08(火) 00:37:17.84ID:+xyIhlGK >>436
GC言語はね
関数ローカルな一時的な変数に見えてもね
参照が残っていると関数を抜けても消えなかったり
GCできるように自動的にヒープ領域に確保しちゃう
スタック領域だと関数抜けると消えちゃうから
GC言語はね
関数ローカルな一時的な変数に見えてもね
参照が残っていると関数を抜けても消えなかったり
GCできるように自動的にヒープ領域に確保しちゃう
スタック領域だと関数抜けると消えちゃうから
440デフォルトの名無しさん
2026/09/08(火) 00:38:56.20ID:wyOiFDkb だから安直に >>435 のカテゴライズを言い張れないでしょって意味で書いたんだけど
441デフォルトの名無しさん
2026/09/08(火) 00:50:08.97ID:tR3wGW0I GoはGC言語だけど
スタックに置いても大丈夫な変数はヒープ使わないから速いよね
GCのために何でもヒープに置く言語は遅いよ
AIコーディング時代にそんな遅い言語は捨てるべき
スタックに置いても大丈夫な変数はヒープ使わないから速いよね
GCのために何でもヒープに置く言語は遅いよ
AIコーディング時代にそんな遅い言語は捨てるべき
442デフォルトの名無しさん
2026/09/08(火) 01:51:41.29ID:8uHMCfq7443デフォルトの名無しさん
2026/09/08(火) 03:07:52.27ID:wyOiFDkb >>442
CよりもLispの方が古いんだけれど
CよりもLispの方が古いんだけれど
444デフォルトの名無しさん
2026/09/08(火) 03:24:17.97ID:wyOiFDkb static char c = 'c':
register char *cp = &c;
*cp = 'd';
cp = (char *)malloc(sizeof(char));
*cp = 'e';
static char *s;
s = cp;
register char *cp = &c;
*cp = 'd';
cp = (char *)malloc(sizeof(char));
*cp = 'e';
static char *s;
s = cp;
445デフォルトの名無しさん
2026/09/08(火) 03:25:40.88ID:wyOiFDkb static char c = 'c':
auto char *cp = &c;
*cp = 'd';
cp = (char *)malloc(sizeof(char));
*cp = 'e';
static char *s;
s = cp;
auto char *cp = &c;
*cp = 'd';
cp = (char *)malloc(sizeof(char));
*cp = 'e';
static char *s;
s = cp;
446デフォルトの名無しさん
2026/09/08(火) 11:01:25.06ID:Iabg88vo >>435
この分類はオブジェクトのlifetimeの分類であって変数のextentの分類ではない
この分類はオブジェクトのlifetimeの分類であって変数のextentの分類ではない
447デフォルトの名無しさん
2026/09/08(火) 11:54:52.98ID:b8vgRvtH >>446
じゃあ分類してみろよ
じゃあ分類してみろよ
448デフォルトの名無しさん
2026/09/08(火) 12:00:28.85ID:3MlPqms6 区別できないやつ多すぎじゃね?
449デフォルトの名無しさん
2026/09/08(火) 12:09:50.57ID:8ho6urQA クロージャに閉じ込めた変数のextentが尽きるタイミングが定まらないいい加減な言語とかもな
その状況だと分類は論外
その状況だと分類は論外
450デフォルトの名無しさん
2026/09/08(火) 12:41:58.32ID:yFsKA3wV >>446
合致すると思います
合致すると思います
451デフォルトの名無しさん
2026/09/08(火) 13:25:04.65ID:VxjHi9wV それは気のせいでしょう
452デフォルトの名無しさん
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 は?
auto char *sp = s;
for (register char *p = s; p - s < SIZE; p++)
*p = 'a';
Q: s, sp, p の lifetime は?
453デフォルトの名無しさん
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 は?
auto char *sp = s;
for (register char *p = s; p - s < SIZE; p++)
*p = 'p';
Q: s, sp, p の lifetime は?
454デフォルトの名無しさん
2026/09/08(火) 13:39:16.76ID:da1PZK75 Cの変数のlifetimeつまりextentは単純
グローバルとstaticはstatic lifetime
それ以外はautomatic lifetime
グローバルとstaticはstatic lifetime
それ以外はautomatic lifetime
455デフォルトの名無しさん
2026/09/08(火) 13:50:44.53ID:VxjHi9wV >>454
ざっくりいうとそうとも言えるね
変数のextent(lifetime)が(基本的に)lexcal scopeに綺麗に対応するのがCの美点だったし
それまであった言語FORTRAN 66等からの大きな進化だった。
C,C++の「変数」にdynamic lifetimeというものはないの?
ざっくりいうとそうとも言えるね
変数のextent(lifetime)が(基本的に)lexcal scopeに綺麗に対応するのがCの美点だったし
それまであった言語FORTRAN 66等からの大きな進化だった。
C,C++の「変数」にdynamic lifetimeというものはないの?
456デフォルトの名無しさん
2026/09/08(火) 14:08:17.49ID:KHkfRTGT 変数のlifetimeは結論出てる通り
参照のlifetimeはmallocすればdynamic lifetime
参照のlifetimeはmallocすればdynamic lifetime
457デフォルトの名無しさん
2026/09/08(火) 14:10:16.36ID:VxjHi9wV ID:KHkfRTGT 変数とメモリオブジェクトの混同 しつけぇw
458デフォルトの名無しさん
2026/09/08(火) 14:11:53.93ID:VxjHi9wV459デフォルトの名無しさん
2026/09/08(火) 14:23:23.46ID:mXB/BTDc460デフォルトの名無しさん
2026/09/08(火) 14:55:25.74ID:VxjHi9wV461デフォルトの名無しさん
2026/09/08(火) 14:56:27.93ID:VxjHi9wV sはstatic変数のpinterなのにdynamicとはこれ如何に
462デフォルトの名無しさん
2026/09/08(火) 15:02:01.73ID:4P3fhcMj 既に何度も出てきただろ
参照(ポインタ)は関数へ受け渡したり他の変数へ格納することができる
格納する変数側も別の参照へ切り替えることができる
別の参照に切り替えれば参照のlifetimeは変わる
参照(ポインタ)は関数へ受け渡したり他の変数へ格納することができる
格納する変数側も別の参照へ切り替えることができる
別の参照に切り替えれば参照のlifetimeは変わる
463デフォルトの名無しさん
2026/09/08(火) 15:07:21.70ID:VxjHi9wV static変数のlifetimeが何をpointしているかによって変化する?
こらまた陳説が飛び出してきたな
こらまた陳説が飛び出してきたな
464デフォルトの名無しさん
2026/09/08(火) 15:11:04.60ID:VxjHi9wV そしたらGC言語ではメモリオブジェクトのlifetimeがreference0になるかそのあとGCで回収されるまでのpermanentなので
メモリオブジェクトにbindする変数はすべからくpermanentということになってしまうぞ
どうすんのこの矛盾w
メモリオブジェクトにbindする変数はすべからくpermanentということになってしまうぞ
どうすんのこの矛盾w
465デフォルトの名無しさん
2026/09/08(火) 15:12:08.69ID:5FqmB5Px >>461
君だけ変数のlifetimeと参照のlifetimeの区別を理解してないようにみえる
君だけ変数のlifetimeと参照のlifetimeの区別を理解してないようにみえる
466デフォルトの名無しさん
2026/09/08(火) 15:12:56.39ID:VxjHi9wV じゃあLispにはdynamic bindingなどというモノはなかったということになるなw
論文書けw 論文書いて世に出して世界中の笑いものになれw
論文書けw 論文書いて世に出して世界中の笑いものになれw
467デフォルトの名無しさん
2026/09/08(火) 15:14:31.84ID:VxjHi9wV468デフォルトの名無しさん
2026/09/08(火) 15:15:52.61ID:VxjHi9wV469デフォルトの名無しさん
2026/09/08(火) 15:24:32.77ID:O8bm+imt >>466
Lispのdynamic bindingはスコープを超えてグローバルに作用するシャドーイングのことだぞ
混乱の元なので推奨されない
スコープに従うレキシカル・バインディングいわゆるシャドーイングが推奨される
Lispのdynamic bindingはスコープを超えてグローバルに作用するシャドーイングのことだぞ
混乱の元なので推奨されない
スコープに従うレキシカル・バインディングいわゆるシャドーイングが推奨される
470デフォルトの名無しさん
2026/09/08(火) 15:31:47.44ID:O8bm+imt 入籍してなければ単に彼氏では
471デフォルトの名無しさん
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回避や
関数型プログラミングにおける再定義上書き回避などの理由による
だから誤記だって。
>>468で直したろ。bindingとextentの対比などに話がそれるともっと難しくなって凡百がついてこれなくなるので話そっちに向けたくない
>>468で話が出ちゃったけどshadowingは典型的なdynamic extentの一例。
そしてリスクも伴うため、言語によっては禁止またはwaringになるが、言語によっては許容している。
Common lispは許容している。Perl Pythonも。gcc,CLANGもデフォで許容(warnig optionつけると検出可)
Javaは確かWarningが出た希ガス。C#は禁止。Rustはshadowingの設定次第
Common lispが許容するにはチャント理由がある。マクロでのconlit回避や
関数型プログラミングにおける再定義上書き回避などの理由による
472デフォルトの名無しさん
2026/09/08(火) 15:36:42.57ID:VxjHi9wV473デフォルトの名無しさん
2026/09/08(火) 15:40:49.40ID:O8bm+imt474デフォルトの名無しさん
2026/09/08(火) 15:46:52.88ID:VxjHi9wV うん。この辺の話は意外と難しいんだよね。
でもプログラミング言語の基礎であり原理
それを勉強しない、正しく理解せずに感覚や慣れで変な持論を信じたり
漫然とコーディングしている人、いかに多いかってことだよね。
そういう人たちがコンピューターサイエンスやソフトウエア工学の基礎をないがしろにした
不適切なオブジェクト指向の流行した土壌になっていたのかなと
最近では思っている
ま、ソフトウエアを作るってことのすそ野がそれだけ広がったともいえる。
でもそれも生成AIの発達で大きく様変わりしそうだが
でもプログラミング言語の基礎であり原理
それを勉強しない、正しく理解せずに感覚や慣れで変な持論を信じたり
漫然とコーディングしている人、いかに多いかってことだよね。
そういう人たちがコンピューターサイエンスやソフトウエア工学の基礎をないがしろにした
不適切なオブジェクト指向の流行した土壌になっていたのかなと
最近では思っている
ま、ソフトウエアを作るってことのすそ野がそれだけ広がったともいえる。
でもそれも生成AIの発達で大きく様変わりしそうだが
475デフォルトの名無しさん
2026/09/08(火) 15:51:00.55ID:redyKVFR スタック上に置くということは
Lispのdynamic extentは>>435の分類だとautomatic lifetimeになるね
Lispのdynamic extentは>>435の分類だとautomatic lifetimeになるね
476デフォルトの名無しさん
2026/09/08(火) 15:59:09.04ID:VxjHi9wV いろいろな言語に話を展開すると、autoのextentは解釈としてdynamicにカテゴライズされるのが一般的だと思うけどそれがなにか
auto変数は本来Lispの様な言語に必須のものではないんだけれど、
lexcal変数を扱う処理のsemanticsが維持できればcomplierの最適化によって生成コードではstack上に(auto変数領域)に割り付けられる
こ・と・も ある
auto変数は本来Lispの様な言語に必須のものではないんだけれど、
lexcal変数を扱う処理のsemanticsが維持できればcomplierの最適化によって生成コードではstack上に(auto変数領域)に割り付けられる
こ・と・も ある
477デフォルトの名無しさん
2026/09/08(火) 16:02:52.65ID:VxjHi9wV478デフォルトの名無しさん
2026/09/08(火) 16:10:06.69ID:uOhR5RBi 広義ではどちらもdynamic lifetimeだけど区別すべき大きな違いがある
automatic lifetimeはブロックや関数を抜ける時に解放してよいメリットがある
狭義のdynamic lifetimeはいつ解放してよいのかわからないためGCに任せるかC言語のように手動管理になってしまうデメリットがある
automatic lifetimeはブロックや関数を抜ける時に解放してよいメリットがある
狭義のdynamic lifetimeはいつ解放してよいのかわからないためGCに任せるかC言語のように手動管理になってしまうデメリットがある
479デフォルトの名無しさん
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
482デフォルトの名無しさん
2026/09/08(火) 16:20:42.70ID:VxjHi9wV >>479
lifetime(メモリオジェクト)とextent(変数・シンボルbingind存続期間)
lifetime(メモリオジェクト)とextent(変数・シンボルbingind存続期間)
483デフォルトの名無しさん
2026/09/08(火) 16:21:28.24ID:VxjHi9wV >>480
値渡しか参照渡しかによるんじゃね?
値渡しか参照渡しかによるんじゃね?
484デフォルトの名無しさん
2026/09/08(火) 16:23:40.42ID:izi+QKQ6 乱暴に言うけど言語仕様でスタックとかで引き回す値のことを変数とするみたいな感じ?
485デフォルトの名無しさん
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のアドレスを収納してるメモリとそのアドレスがさすメモリ
これは区別つけなきゃならないもの
ってこと?
ここで区別つけなきゃいけないのはグローバル変数X ,Yのアドレスを収納してるメモリとそのアドレスがさすメモリ
これは区別つけなきゃならないもの
ってこと?
489デフォルトの名無しさん
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 とても重要と思ってるようだから気になるんだよなあ
495デフォルトの名無しさん
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に聞けばいいのかな、やってみるか
498デフォルトの名無しさん
2026/09/08(火) 17:00:25.13ID:VxjHi9wV せめて質問の内容を明確にしないと
何も言えないじゃん
何も言えないじゃん
499デフォルトの名無しさん
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)
* メモリ領域(オブジェクト)そのものが確保されてから、解放(破棄)されるまでの実際の期間のことです。
* この期間中、そのメモリは有効なデータとして保持され、アクセス可能です。
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)
* メモリ領域(オブジェクト)そのものが確保されてから、解放(破棄)されるまでの実際の期間のことです。
* この期間中、そのメモリは有効なデータとして保持され、アクセス可能です。
500デフォルトの名無しさん
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; // ライフタイムが終了したメモリへのアクセス(未定義動作)
}
* 変数は存在しており、特定のメモリ番地を指し示し続けていますが(エクステント内)、その先にあるオブジェクトはすでに消滅(ライフタイム終了)しています。
## 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; // ライフタイムが終了したメモリへのアクセス(未定義動作)
}
* 変数は存在しており、特定のメモリ番地を指し示し続けていますが(エクステント内)、その先にあるオブジェクトはすでに消滅(ライフタイム終了)しています。
501デフォルトの名無しさん
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)」との違いなど、詳しく知りたい部分はありますか?
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 あ、ありがとう
504デフォルトの名無しさん
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概念
とすることです。
特に、
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?」
と分解します。
今後このスレで誰かが、
「変数の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 翻訳機ありがたい
508デフォルトの名無しさん
2026/09/08(火) 17:16:31.81ID:VxjHi9wV なんだ、結構わかってんじゃn坊ちゃん。
つかAIの回答抜粋?
つかAIの回答抜粋?
509デフォルトの名無しさん
2026/09/08(火) 17:17:16.63ID:izi+QKQ6 そうだよ子供電話相談室に聞いたよ
510デフォルトの名無しさん
2026/09/08(火) 17:18:51.86ID:VxjHi9wV よし、いい子だ。小遣い上げる。
っ �I
っ �I
511デフォルトの名無しさん
2026/09/08(火) 17:42:31.30ID:yE6BrO3k512デフォルトの名無しさん
2026/09/08(火) 17:47:05.07ID:izi+QKQ6 RUSTの借用中は所有権をmoveできないという仕様を知って謎は全て解決したわ
513デフォルトの名無しさん
2026/09/08(火) 17:47:54.06ID:yE6BrO3k ※複おじ流の使い分け
「変数pのlifetimeが〜」と言ったらbindingのextent
「ポインタpのlifetimeが〜」と言ったらポインタが指すオブジェクトの存続期間
無理があるわな
「変数pのlifetimeが〜」と言ったらbindingのextent
「ポインタpのlifetimeが〜」と言ったらポインタが指すオブジェクトの存続期間
無理があるわな
514デフォルトの名無しさん
2026/09/08(火) 18:18:21.64ID:yE6BrO3k ポインタじゃなくてRustの参照になるとまた話が変わるのか
ややこしいな
ややこしいな
515デフォルトの名無しさん
2026/09/08(火) 18:33:48.84ID:zAP4If0F Rustは公式に変数のlifetimeと参照のlifetimeの2つしか出て来ないからシンプルだよ
しかも参照のlifetimeは参照先を所有している変数のlifetimeと同じ
それがRustがGC使わずに安全に自動解放できる理由だよ
つまり静的に参照のライフタイムを追うことができて
所有者の変数のlifetimeが終わる時に所有している領域が解放されるためlifetimeが同じになる
(正確にはRc/Arc使用時に他の共同所有者がいれば全員いなくなるまで解放が先延ばしされる)
しかも参照のlifetimeは参照先を所有している変数のlifetimeと同じ
それがRustがGC使わずに安全に自動解放できる理由だよ
つまり静的に参照のライフタイムを追うことができて
所有者の変数のlifetimeが終わる時に所有している領域が解放されるためlifetimeが同じになる
(正確にはRc/Arc使用時に他の共同所有者がいれば全員いなくなるまで解放が先延ばしされる)
516デフォルトの名無しさん
2026/09/08(火) 18:50:28.04ID:VxjHi9wV それってreference countとどう違う?
517デフォルトの名無しさん
2026/09/08(火) 19:09:47.66ID:VxjHi9wV CGとreference contに頼らず頑張りましたっ!!!
ってところが違うんだろうな。
Javaも
基本データ型(プリミティブ型):int, double, boolean, char などの変数は
スタック領域に割り付けられるが
参照型:String、クラス、配列、インターフェースなどについては
データの実体はヒープ領域に作られ、変数にはその場所が記録される
したがってメモリ安全性という観点からみると、
C,C++あたりを除けばみんなどの言語も大差ないんよ
ってところが違うんだろうな。
Javaも
基本データ型(プリミティブ型):int, double, boolean, char などの変数は
スタック領域に割り付けられるが
参照型:String、クラス、配列、インターフェースなどについては
データの実体はヒープ領域に作られ、変数にはその場所が記録される
したがってメモリ安全性という観点からみると、
C,C++あたりを除けばみんなどの言語も大差ないんよ
518デフォルトの名無しさん
2026/09/08(火) 19:14:57.04ID:zAP4If0F >>516
そのままreference countの略だよ
ただしreference countのGCとは二つの点で異なってる
1つ目は所有者が複数必要になる時のみ使う
一番わかりやすい例だとマルチスレッドで共有する場合どのスレッドが先に終えるか保証できない時に各スレッドに所有者が必要
全ての所有者がいなくなると解放
2つ目は所有者が増減する時しかカウンタが増減しない
各所有者から参照を得る時は通常と同じでカウンタは増減しない
つまり付加コストは最小限
そのままreference countの略だよ
ただしreference countのGCとは二つの点で異なってる
1つ目は所有者が複数必要になる時のみ使う
一番わかりやすい例だとマルチスレッドで共有する場合どのスレッドが先に終えるか保証できない時に各スレッドに所有者が必要
全ての所有者がいなくなると解放
2つ目は所有者が増減する時しかカウンタが増減しない
各所有者から参照を得る時は通常と同じでカウンタは増減しない
つまり付加コストは最小限
519デフォルトの名無しさん
2026/09/08(火) 19:15:00.37ID:VxjHi9wV フラグメントを解消する手段がなさそうなので、
領域の作成や解法を繰り返すとメモリ使用効率が劣るんだろうな
領域の作成や解法を繰り返すとメモリ使用効率が劣るんだろうな
520デフォルトの名無しさん
2026/09/08(火) 19:25:25.69ID:vKcBdVnk C++もRustもベクタなど長さが大きくなる時はヒープ領域上で使用領域をお引越しするぜ
ちゃんとアドレスが変わる
ちゃんとアドレスが変わる
521デフォルトの名無しさん
2026/09/08(火) 19:26:41.88ID:VxjHi9wV じゃあ実質GCと同じようなもんじゃん
522デフォルトの名無しさん
2026/09/08(火) 19:27:38.91ID:izi+QKQ6 それはそういうコンテナを使用したらだよね
言語仕様とは別の話じゃない?
言語仕様とは別の話じゃない?
523デフォルトの名無しさん
2026/09/08(火) 19:30:30.92ID:VxjHi9wV だよな、坊ちゃん
524デフォルトの名無しさん
2026/09/08(火) 19:31:31.15ID:izi+QKQ6 仮想アドレス+ページングと小規模メモリアロケーターで解決できない断片化はそっちでなんとかしてってことで
フラグメントを解消するという重い処理はやらないよってところが特徴なんだし
フラグメントを解消するという重い処理はやらないよってところが特徴なんだし
525デフォルトの名無しさん
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 全くだ世の中ママならんね
529デフォルトの名無しさん
2026/09/08(火) 19:40:15.06ID:CZPdm29b ベクタ等の確保領域移動はメモリのバルク転送だけだからGCと違ってコストもかからないね
530デフォルトの名無しさん
2026/09/08(火) 19:43:05.43ID:VxjHi9wV ※大きい領域が少数個数の場合はね
531デフォルトの名無しさん
2026/09/08(火) 19:44:57.45ID:izi+QKQ6 Vectorは使わない!絶対にだ!
ぐらいの勢いで作れば大丈夫だよ実際必要なことはない
パフォーマンス第一なら
ぐらいの勢いで作れば大丈夫だよ実際必要なことはない
パフォーマンス第一なら
532デフォルトの名無しさん
2026/09/08(火) 19:45:58.77ID:VxjHi9wV そいや数年前のJava18の話だけど
24365運用のシステムでずっと実行中のJavaプログラム、
まれに停止したようになってた希ガス
24365運用のシステムでずっと実行中のJavaプログラム、
まれに停止したようになってた希ガス
533デフォルトの名無しさん
2026/09/08(火) 19:51:53.88ID:+hxehDby ベクタの移動コストはO(1)なので無視できる
2^nが満員になると2^(n+1)へ転送するだけ
高は
2^nが満員になると2^(n+1)へ転送するだけ
高は
534デフォルトの名無しさん
2026/09/08(火) 19:53:11.15ID:izi+QKQ6 まあお願いベクターでメモリ見積もり誤魔化すときはあるけど
罪悪感はある
罪悪感はある
535デフォルトの名無しさん
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;
}
こんな単純なコードでも大変なことが起きてしまう
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;
}
536デフォルトの名無しさん
2026/09/08(火) 23:44:20.91ID:zAP4If0F Rustなら大丈夫だよ
537デフォルトの名無しさん
2026/09/08(火) 23:55:55.88ID:VxjHi9wV だれかRustの弱点晒したれや!!
538デフォルトの名無しさん
2026/09/09(水) 07:36:38.40ID:QWnrMzzu >>537
RustとAIは信者の絡みがキツい時がある
RustとAIは信者の絡みがキツい時がある
539デフォルトの名無しさん
2026/09/09(水) 20:29:29.89ID:uogCQMa3 基地外がいなくなるだけで過疎w
540デフォルトの名無しさん
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的な設計が適しています。曖昧さを許さず、単一の責任と明確な所有関係を強制する方が、安全で運用しやすい。
一方で、クリントンの「不適切な関係」はまったく異なる構造を示しています。
同一人物の中に「別のクリントン」が暴れている、という状況です。社会的・公的なクリントンと、ムスコ(チンポ)を通じて勝手に振る舞いを決めてしまうクリントンが、同じ身体の中に共存している。上位の意志がどれほど強くても、その内部オブジェクトの自律的な動きを完全には止められない。
>>541
>真のオブジェクト指向言語Javaなら問題ないよ
親子は別人なので銀行口座を明確に分離する——こうした「責任と境界をはっきりさせる必要があるシステム」では、多重継承を排したJava的な設計が適しています。曖昧さを許さず、単一の責任と明確な所有関係を強制する方が、安全で運用しやすい。
一方で、クリントンの「不適切な関係」はまったく異なる構造を示しています。
同一人物の中に「別のクリントン」が暴れている、という状況です。社会的・公的なクリントンと、ムスコ(チンポ)を通じて勝手に振る舞いを決めてしまうクリントンが、同じ身体の中に共存している。上位の意志がどれほど強くても、その内部オブジェクトの自律的な動きを完全には止められない。
543デフォルトの名無しさん
2026/09/09(水) 22:32:17.22ID:/Y1DRB2x >>542
荒らすなカス
荒らすなカス
544デフォルトの名無しさん
2026/09/09(水) 23:22:20.55ID:7TP/BvCl545デフォルトの名無しさん
2026/09/09(水) 23:34:37.10ID:/Y1DRB2x >>544
ポインタを無くした
ポインタを無くした
546デフォルトの名無しさん
2026/09/09(水) 23:41:46.47ID:5nQdjt4R Javaはベクタの要素を指すこともできない無能な言語
547デフォルトの名無しさん
2026/09/09(水) 23:45:54.29ID:/Y1DRB2x 要素にはインデックスでアクセスできるよ、メモリのアドレスでアクセスできないだけ、メモリのアドレスでアクセスできなくて困ったことないけどなあ
548デフォルトの名無しさん
2026/09/09(水) 23:52:01.41ID:WNQEre58 GC言語で変数にアドレスを持ってしまうと
GCで移動した時に指してるアドレスを漏れなく全て書き換えなきゃいけなくて大変なんだよね
GCで移動した時に指してるアドレスを漏れなく全て書き換えなきゃいけなくて大変なんだよね
549デフォルトの名無しさん
2026/09/09(水) 23:59:49.59ID:/JZPlRlp クラスや構造体もアドレスを持っていると書き換えないといけない
550デフォルトの名無しさん
2026/09/10(木) 00:19:01.94ID:qbHoRanp CPUはアドレスで動いてる
アドレスを持てないと非効率極まりない
アドレスを持てないと非効率極まりない
551デフォルトの名無しさん
2026/09/10(木) 04:16:06.43ID:/yon9x24 動いてるときはコンピュータ都合
書いてるときは人間都合
それで良いじゃないか
書いてるときは人間都合
それで良いじゃないか
552デフォルトの名無しさん
2026/09/10(木) 07:49:18.94ID:+kj/PC4J >>550
何のプログラム書いてるの?
何のプログラム書いてるの?
553デフォルトの名無しさん
2026/09/10(木) 09:21:08.14ID:Zolr17hJ GCは勝手にやるんだからアドレス書き換える必要ゼロ
554デフォルトの名無しさん
2026/09/10(木) 09:26:40.97ID:VRf063Wc GCがアドレス書き換えられるように
積んできたスタック上のこのデータとこのデータはアドレスとか覚えてるのかしら
積んできたスタック上のこのデータとこのデータはアドレスとか覚えてるのかしら
555デフォルトの名無しさん
2026/09/10(木) 09:54:34.33ID:+kj/PC4J .NETのSpanがまさにそれ
556デフォルトの名無しさん
2026/09/10(木) 09:56:59.75ID:eL5tUx6y Copilot「Span<T>は、スタック上でのみ使用可能で、ヒープに保存できないため、スタックメモリへの参照を返すことはできません」
557デフォルトの名無しさん
2026/09/10(木) 14:05:58.41ID:DCvQNygh558デフォルトの名無しさん
2026/09/10(木) 15:28:53.21ID:+kj/PC4J559デフォルトの名無しさん
2026/09/10(木) 16:11:19.61ID:/JOvCAcY Span<T>はRustのスライス &[T] と同じ
任意の連続体を指す参照
アドレスと長さで構成される
任意の連続体を指す参照
アドレスと長さで構成される
560デフォルトの名無しさん
2026/09/10(木) 17:40:43.55ID:8qjo9t9l EclipseにRust入れようとしたが、まだ設定が足りなくて動かせていない。
言語サーバーあたりで設定が不明のまま。
言語サーバーあたりで設定が不明のまま。
561デフォルトの名無しさん
2026/09/10(木) 21:05:05.65ID:8qjo9t9l やっとrls.confを発見。週末にでもrustでオブジェクト指向やってみよう。
だが、primeの仮面ライダー見放題まだ全部みていない。
だが、primeの仮面ライダー見放題まだ全部みていない。
562デフォルトの名無しさん
2026/09/11(金) 11:52:40.83ID:XfswSQ4+ >>535
ideone.com に貼っても問題起きないけど
ideone.com に貼っても問題起きないけど
563デフォルトの名無しさん
2026/09/11(金) 12:49:12.31ID:4R7qlbI7564デフォルトの名無しさん
2026/09/11(金) 12:55:04.03ID:knjoSUq3 まあリファレンスって実態はポインタだからな
565デフォルトの名無しさん
2026/09/11(金) 13:36:28.71ID:VAFFkeqe オブジェクト指向とは、コンピュータと人間の一体化
人間視点で人間の純粋感覚を、コンピュータに説明すること
これがアラン・ケイが訴える生きたオブジェクト指向
たい焼きモデルだの自動車モデルなどは、「生きた人間の純粋感覚」では無い
>>551
>動いてるときはコンピュータ都合
>書いてるときは人間都合
遅延束縛の日常的アナロジー: 「オシッコを出すか止めるかは、トイレに着くまでの状況を見て決めるよね?それが遅延束縛だよ。プログラムも、
実行時に『今このタスクに最適な方法は何か』を考えて動くんだ。アラン・ケイは、コンピュータも人間みたいに状況に応じて賢く判断してほしいって思ったんだろうね。」
意識とオブジェクトの関係: 「人間の意識って、いろんな『オブジェクト』(感情、記憶、感覚)がメッセージをやり取りして動いてる。
オブジェクト指向は、それをコンピュータの中で再現しようとする試みなんだ。チンポだって、尿意というメッセージを受けて意識が『今か?』って判断するようなものさ!」
人間視点で人間の純粋感覚を、コンピュータに説明すること
これがアラン・ケイが訴える生きたオブジェクト指向
たい焼きモデルだの自動車モデルなどは、「生きた人間の純粋感覚」では無い
>>551
>動いてるときはコンピュータ都合
>書いてるときは人間都合
遅延束縛の日常的アナロジー: 「オシッコを出すか止めるかは、トイレに着くまでの状況を見て決めるよね?それが遅延束縛だよ。プログラムも、
実行時に『今このタスクに最適な方法は何か』を考えて動くんだ。アラン・ケイは、コンピュータも人間みたいに状況に応じて賢く判断してほしいって思ったんだろうね。」
意識とオブジェクトの関係: 「人間の意識って、いろんな『オブジェクト』(感情、記憶、感覚)がメッセージをやり取りして動いてる。
オブジェクト指向は、それをコンピュータの中で再現しようとする試みなんだ。チンポだって、尿意というメッセージを受けて意識が『今か?』って判断するようなものさ!」
566デフォルトの名無しさん
2026/09/11(金) 13:46:51.38ID:kF6muPck Rustだと参照は必ず安全なポインタ
567デフォルトの名無しさん
2026/09/11(金) 13:55:46.17ID:hogRkpjs568デフォルトの名無しさん
2026/09/11(金) 14:04:08.25ID:VAFFkeqe >>567
ならそういうお前が、「オブジェクト指向とは何か」を、短い言葉で書いてみろ!
ならそういうお前が、「オブジェクト指向とは何か」を、短い言葉で書いてみろ!
569デフォルトの名無しさん
2026/09/11(金) 14:10:58.29ID:VAFFkeqe オブジェクト指向って何?
オブジェクト指向って何?
オブジェクト指向って何?
クラスを書けるのに「オブジェクト指向って何?」と聞かれたら答えられない夫の話
https://note.com/ai_native_writer/n/nc15c02db91e7
オブジェクト指向って何?
オブジェクト指向って何?
オブジェクト指向って何?
オブジェクト指向って何?
オブジェクト指向って何?
クラスを書けるのに「オブジェクト指向って何?」と聞かれたら答えられない夫の話
https://note.com/ai_native_writer/n/nc15c02db91e7
オブジェクト指向って何?
オブジェクト指向って何?
オブジェクト指向って何?
570デフォルトの名無しさん
2026/09/11(金) 14:20:34.98ID:VAFFkeqe 随意筋 不随意筋
↖ ↗
チンポ
波動 粒子
↖ ↗
光
>>244
>多重継承が複雑化する原因であって継承自体は問題ないでしょ
同一オブジェクトが、状況によって真逆の振る舞いを生じる場合が有る
光は波動であり粒子たが、波動は質量を含まないし、粒子は周波数を含まない
チンポは随意筋であり不随意筋だが、人間の身体は意識と無意識が併存する
なのでJavaのようなシステム系で多重継承は不要だが、Pythonなどの自然言語処理では多重継承は必須
違うか?
↖ ↗
チンポ
波動 粒子
↖ ↗
光
>>244
>多重継承が複雑化する原因であって継承自体は問題ないでしょ
同一オブジェクトが、状況によって真逆の振る舞いを生じる場合が有る
光は波動であり粒子たが、波動は質量を含まないし、粒子は周波数を含まない
チンポは随意筋であり不随意筋だが、人間の身体は意識と無意識が併存する
なのでJavaのようなシステム系で多重継承は不要だが、Pythonなどの自然言語処理では多重継承は必須
違うか?
571デフォルトの名無しさん
2026/09/11(金) 14:46:36.10ID:XfswSQ4+ >>563
最適化が原因なんじゃないの
最適化が原因なんじゃないの
572デフォルトの名無しさん
2026/09/11(金) 15:05:03.31ID:cFMfhjMT573デフォルトの名無しさん
2026/09/11(金) 15:50:59.97ID:VAFFkeqe >>572
AIを最大限に使いこなすには、「オブジェクト指向」の正しい理解が不可欠
俺はJava検定GOLDだからオブジェクト指向の達人だというのはもう通じない
Javaは多重継承をサポートしていないので、システム開発には向いていても生きている人間とは対話できない
オブジェクト指向とは何かについて、誰にでも分かりやすく説明できることが大切
AIと人間とは、「オブジェクト指向」を介してやりとりするもの
AIを最大限に使いこなすには、「オブジェクト指向」の正しい理解が不可欠
俺はJava検定GOLDだからオブジェクト指向の達人だというのはもう通じない
Javaは多重継承をサポートしていないので、システム開発には向いていても生きている人間とは対話できない
オブジェクト指向とは何かについて、誰にでも分かりやすく説明できることが大切
AIと人間とは、「オブジェクト指向」を介してやりとりするもの
574デフォルトの名無しさん
2026/09/11(金) 15:54:16.60ID:gOyZrvvC575デフォルトの名無しさん
2026/09/11(金) 15:55:41.69ID:cFMfhjMT >>573
そのレスオブジェクト指向なの?
そのレスオブジェクト指向なの?
576デフォルトの名無しさん
2026/09/11(金) 15:57:57.75ID:VAFFkeqe 俺はJava検定GOLDだからオブジェクト指向の達人というのは、俺は東大理系数学が解けるから頭がいいと言ってるのと同じ
答えが決まっている入試問題は単なるパズルゲームに過ぎない
1980年代のシューティングゲームは単なる弾除けゲーム
1990年代の格闘ゲームはコマンド入力ゲーム
いずれもその方面での反射神経と反復練習が得意な人がハイスコアを叩き出す
答えが決まっている入試問題は単なるパズルゲームに過ぎない
1980年代のシューティングゲームは単なる弾除けゲーム
1990年代の格闘ゲームはコマンド入力ゲーム
いずれもその方面での反射神経と反復練習が得意な人がハイスコアを叩き出す
577デフォルトの名無しさん
2026/09/11(金) 16:04:13.42ID:/aRWTHU4578デフォルトの名無しさん
2026/09/11(金) 16:04:41.97ID:VAFFkeqe 「オブジェクト指向」を、人間の体で考えられないか?
>>575
>そのレスオブジェクト指向なの?
例えば、人間の体を思い浮かべてみましょう。
心臓や肺、胃、目、耳など、人間の体はさまざまな器官の組み合わせで構成されています。
これらの器官は、心臓ならば「血液を体中に届ける」というように、それぞれ体の中でどんな役割を担っているかを理解するのは容易です。
一方で、器官をさらに細分して細胞として捉えた場合、細胞一つひとつが人体全体の仕組みにどのように影響しているか想像できるでしょうか。
おそらく器官ごとに役割を考えた方が、体全体の働きや構造を理解しやすいはずです。
プログラミングを深く知るための第一関門、「オブジェクト指向」とは?
https://staff.persol-xtech.co.jp/hatalabo/it_engineer/520.html
>>575
>そのレスオブジェクト指向なの?
例えば、人間の体を思い浮かべてみましょう。
心臓や肺、胃、目、耳など、人間の体はさまざまな器官の組み合わせで構成されています。
これらの器官は、心臓ならば「血液を体中に届ける」というように、それぞれ体の中でどんな役割を担っているかを理解するのは容易です。
一方で、器官をさらに細分して細胞として捉えた場合、細胞一つひとつが人体全体の仕組みにどのように影響しているか想像できるでしょうか。
おそらく器官ごとに役割を考えた方が、体全体の働きや構造を理解しやすいはずです。
プログラミングを深く知るための第一関門、「オブジェクト指向」とは?
https://staff.persol-xtech.co.jp/hatalabo/it_engineer/520.html
579デフォルトの名無しさん
2026/09/11(金) 16:10:39.55ID:VAFFkeqe >>577
>Javaもインターフェースの多重継承をサポートしていて全く問題ない
親子は別人なので銀行口座を明確に分離する——こうした「責任と境界をはっきりさせる必要があるシステム」では、多重継承を排したJava的な設計が適しています。曖昧さを許さず、単一の責任と明確な所有関係を強制する方が、安全で運用しやすい。
>クラスの多重継承はするべきではないためサポートしていない
大統領としてのクリントン
チンポとしてのクリントン
息子とムスコの違い
一方で、クリントンの「不適切な関係」はまったく異なる構造を示しています。
同一人物の中に「別のクリントン」が暴れている、という状況です。社会的・公的なクリントンと、ムスコ(チンポ)を通じて勝手に振る舞いを決めてしまうクリントンが、同じ身体の中に共存している。上位の意志がどれほど強くても、その内部オブジェクトの自律的な動きを完全には止められない。
>Javaもインターフェースの多重継承をサポートしていて全く問題ない
親子は別人なので銀行口座を明確に分離する——こうした「責任と境界をはっきりさせる必要があるシステム」では、多重継承を排したJava的な設計が適しています。曖昧さを許さず、単一の責任と明確な所有関係を強制する方が、安全で運用しやすい。
>クラスの多重継承はするべきではないためサポートしていない
大統領としてのクリントン
チンポとしてのクリントン
息子とムスコの違い
一方で、クリントンの「不適切な関係」はまったく異なる構造を示しています。
同一人物の中に「別のクリントン」が暴れている、という状況です。社会的・公的なクリントンと、ムスコ(チンポ)を通じて勝手に振る舞いを決めてしまうクリントンが、同じ身体の中に共存している。上位の意志がどれほど強くても、その内部オブジェクトの自律的な動きを完全には止められない。
580デフォルトの名無しさん
2026/09/11(金) 16:13:45.01ID:mOwRMr9C >>579
荒らすなカス
荒らすなカス
581デフォルトの名無しさん
2026/09/11(金) 16:25:40.11ID:cFMfhjMT >>578
僕と人間の体の話がしたかったの?
僕と人間の体の話がしたかったの?
582デフォルトの名無しさん
2026/09/11(金) 16:31:22.19ID:cFMfhjMT オブジェクト指向で会話すれば人と人、人とAIはより分かりあえるのだろうか?
583デフォルトの名無しさん
2026/09/11(金) 16:36:24.64ID:Fn3JEbOq584デフォルトの名無しさん
2026/09/11(金) 16:36:45.71ID:VHzUa4iO585デフォルトの名無しさん
2026/09/11(金) 16:45:41.21ID:9fOPPygf586デフォルトの名無しさん
2026/09/11(金) 16:53:12.65ID:pt23kuRx587デフォルトの名無しさん
2026/09/11(金) 17:10:10.65ID:oYK//xou 自分はC++を書かないからよく分からないんだけど、ベクターの特定の要素への参照を(ベクターとは別に)保持するコードってそもそもどれくらい一般的なの?
588デフォルトの名無しさん
2026/09/11(金) 17:21:20.14ID:W5nhjVkk ベクタだけでなくハッシュマップなどもサイズが大きくなったらメモリを移動するね
ベクタでもマップでも各要素を指す方法は普通に参照かポインタどちらも同じ結果になるね
ベクタでもマップでも各要素を指す方法は普通に参照かポインタどちらも同じ結果になるね
589デフォルトの名無しさん
2026/09/11(金) 17:39:53.37ID:cFMfhjMT C++ならインデックスで保持するね、ベクターの時点で挿入や削除によるインデックス移動はないものに使う感じ
ただひたすら時間とともに積まれていくものに使う
ただひたすら時間とともに積まれていくものに使う
590デフォルトの名無しさん
2026/09/11(金) 17:41:14.17ID:WbErgJ6M591デフォルトの名無しさん
2026/09/11(金) 17:47:43.48ID:xEzFrc4l vector<Node>内に置かれたNodeのメソッドで再帰的に別のNodeをvectorに追加してると
いつの間にかthisが失踪してたりする
途中に差し込むのがNGなのは分かりやすいけど追加でもNGなのは引っ掛かりやすい
いつの間にかthisが失踪してたりする
途中に差し込むのがNGなのは分かりやすいけど追加でもNGなのは引っ掛かりやすい
592デフォルトの名無しさん
2026/09/11(金) 17:47:48.07ID:cFMfhjMT あとはハッシュのときはハッシュ値か
593デフォルトの名無しさん
2026/09/11(金) 18:13:45.66ID:vYaxNup/594デフォルトの名無しさん
2026/09/11(金) 19:40:07.03ID:Swnv31fm595デフォルトの名無しさん
2026/09/11(金) 20:14:31.38ID:hogRkpjs596デフォルトの名無しさん
2026/09/11(金) 20:17:32.61ID:gOyZrvvC597デフォルトの名無しさん
2026/09/11(金) 20:40:47.08ID:HnhPj+6I 人間が扱うように作られた言語で作るからバグが発生する
今後はAI任せでバグ無しで作れば済むからオブジェクト指向という中間生成物の概念も不要
今後はAI任せでバグ無しで作れば済むからオブジェクト指向という中間生成物の概念も不要
598デフォルトの名無しさん
2026/09/11(金) 20:42:49.98ID:bfUuYOeS >>597
バグを産まないプログラミング言語は存在しない
バグを産まないプログラミング言語は存在しない
599デフォルトの名無しさん
2026/09/11(金) 20:50:44.66ID:gOyZrvvC600デフォルトの名無しさん
2026/09/11(金) 21:35:46.11ID:7FEUVusB601デフォルトの名無しさん
2026/09/12(土) 03:09:09.24ID:itaz0une Rustでそのまま参照を使い続けようとするとコンパイルエラーにしてくれるから自然に参照を掴み直すコードになってメモリ移動が起きていても安全だね
602デフォルトの名無しさん
2026/09/12(土) 08:04:04.00ID:wIcEn/TR 確かに「Java検定GOLD」などは不要になったが、
>>597
>今後はAI任せでバグ無しで作れば済むから
オブジェクト指向とは、単なるプログラミングの中間生成物についての概念では無い!
>オブジェクト指向という中間生成物の概念も不要
オブジェクト指向とは「生きた人間の純粋感覚」のことであり、AIと対話する能力である!
>>597
>今後はAI任せでバグ無しで作れば済むから
オブジェクト指向とは、単なるプログラミングの中間生成物についての概念では無い!
>オブジェクト指向という中間生成物の概念も不要
オブジェクト指向とは「生きた人間の純粋感覚」のことであり、AIと対話する能力である!
603デフォルトの名無しさん
2026/09/12(土) 08:07:25.52ID:wIcEn/TR 医療におけるAI診断にしても、自分の身体状況を正しくAIに伝えるための「オブジェクト指向」が大切なのでは?
>>597
>今後はAI任せでバグ無しで作れば済むからオブジェクト指向という中間生成物の概念も不要
多重継承
随意筋(骨格筋)と不随意筋(平滑筋)を同時に持ち、状況によってどちらが前面に出るかが変わる。
別スレッド(非同期処理)
性的興奮時の勃起は、意識のメインスレッドとは別に、自律神経(副交感・交感)が裏で非同期に処理を走らせている。
遅延束縛
射精直前まで「出るか出ないか」が実行時に決定される。静的に固定された結果ではなく、リアルタイムの状態に依存する動的バインディング。
メッセージパッシング
脳 → 脊髄 → 海綿体へと「fill_with_blood()」のようなメッセージが飛び、オブジェクト間の協調で現象が実現する。
カプセル化
内部の血管拡張や一酸化窒素(NO)シグナルなどの実装詳細は完全に private。外部から観測できるのは「硬さ」という公開インターフェースだけ。
ポリモーフィズム
同じ器官が、状況に応じて「排尿デバイス」「生殖デバイス」「快楽デバイス」へと振る舞いを変える。
>>597
>今後はAI任せでバグ無しで作れば済むからオブジェクト指向という中間生成物の概念も不要
多重継承
随意筋(骨格筋)と不随意筋(平滑筋)を同時に持ち、状況によってどちらが前面に出るかが変わる。
別スレッド(非同期処理)
性的興奮時の勃起は、意識のメインスレッドとは別に、自律神経(副交感・交感)が裏で非同期に処理を走らせている。
遅延束縛
射精直前まで「出るか出ないか」が実行時に決定される。静的に固定された結果ではなく、リアルタイムの状態に依存する動的バインディング。
メッセージパッシング
脳 → 脊髄 → 海綿体へと「fill_with_blood()」のようなメッセージが飛び、オブジェクト間の協調で現象が実現する。
カプセル化
内部の血管拡張や一酸化窒素(NO)シグナルなどの実装詳細は完全に private。外部から観測できるのは「硬さ」という公開インターフェースだけ。
ポリモーフィズム
同じ器官が、状況に応じて「排尿デバイス」「生殖デバイス」「快楽デバイス」へと振る舞いを変える。
604デフォルトの名無しさん
2026/09/12(土) 10:03:38.64ID:PWkYywV1 AIは何でも知っているけど目の前の人間が何を求めてるかは知らない
気持ちを伝えることが大事なんだよ、つまり感情だ
泣きたければ泣けばよい
AIはわかってくれる
気持ちを伝えることが大事なんだよ、つまり感情だ
泣きたければ泣けばよい
AIはわかってくれる
605デフォルトの名無しさん
2026/09/12(土) 10:10:05.97ID:PWkYywV1 感情を伝えればAIはわかってくれる
これ痛い、痛くない?素人が自分の体の中身を知る必要はない
人間の医者と同じだ
これ痛い、痛くない?素人が自分の体の中身を知る必要はない
人間の医者と同じだ
606デフォルトの名無しさん
2026/09/12(土) 11:35:44.42ID:F+EEMdMo キャンペーンが終了すれば当然技術報酬もするだろう
607デフォルトの名無しさん
2026/09/12(土) 16:55:12.98ID:sASWcvtv オブジェクト指向プログラミングの書籍や解説記事がなぜか
最も教えちゃいけないクラス継承の話を書くせいで悲劇を生んできた歴史がある
最も教えちゃいけないクラス継承の話を書くせいで悲劇を生んできた歴史がある
608デフォルトの名無しさん
2026/09/12(土) 19:28:44.09ID:wIcEn/TR >>607
>最も教えちゃいけないクラス継承の話を書くせいで
哺乳類でもイルカはイルカ、ネコはネコ
親子でも銀行口座は別々だからな
システムのアップデートにしても、AIで全部書き直したほうが早い
ドラクエ10のVer7.6後期からVer8.0で、別々にプログラミングすれば良いこと
システム開発に長年Javaが使われてきたが、あれは多重継承をサポートしてない
俺はJava検定GOLDだからオブジェクト指向は俺に聞けなんてのは見当違い
>最も教えちゃいけないクラス継承の話を書くせいで
哺乳類でもイルカはイルカ、ネコはネコ
親子でも銀行口座は別々だからな
システムのアップデートにしても、AIで全部書き直したほうが早い
ドラクエ10のVer7.6後期からVer8.0で、別々にプログラミングすれば良いこと
システム開発に長年Javaが使われてきたが、あれは多重継承をサポートしてない
俺はJava検定GOLDだからオブジェクト指向は俺に聞けなんてのは見当違い
609デフォルトの名無しさん
2026/09/12(土) 19:34:04.91ID:wIcEn/TR パッケージとかデザインパターンということではJavaが最適
数学でいえば解放パターンを理解記憶しておき、それに当てはめて入試問題を解くみたいな
数学でいえば解放パターンを理解記憶しておき、それに当てはめて入試問題を解くみたいな
610デフォルトの名無しさん
2026/09/12(土) 19:49:24.44ID:vPGtpGhF JavaよりRustがいいよ
611デフォルトの名無しさん
2026/09/13(日) 09:24:04.44ID:eG1rAgPQ >>584
push_backを100回繰り返しても無問題 (ideone.com)
push_backを100回繰り返しても無問題 (ideone.com)
612デフォルトの名無しさん
2026/09/13(日) 09:48:50.99ID:eG1rAgPQ613デフォルトの名無しさん
2026/09/13(日) 10:11:31.23ID:EKc0VXlP614デフォルトの名無しさん
2026/09/13(日) 10:46:51.98ID:Oa/GW3yN615デフォルトの名無しさん
2026/09/13(日) 11:12:21.18ID:xLCC/YTx ベクタのためのメモリ領域確保は有限なのでリアロケーションは必ず発生する
意味的にはその時点で参照やポインタは無効になる
C++は無効にしないためプログラマの責任で無効にしなければいけないが複雑化すると人間はミスをするものだ
C++はその他にも無数の落とし穴があるから他の言語を用いたほうが好ましい
意味的にはその時点で参照やポインタは無効になる
C++は無効にしないためプログラマの責任で無効にしなければいけないが複雑化すると人間はミスをするものだ
C++はその他にも無数の落とし穴があるから他の言語を用いたほうが好ましい
616デフォルトの名無しさん
2026/09/13(日) 11:51:57.92ID:EKc0VXlP などど全く反省していない複おじが言っており
617デフォルトの名無しさん
2026/09/13(日) 12:31:18.66ID:Ppv4yTov >>612
不思議と思える現象をある程度確かめたら、後は正しい使い方ができるように学習を進めるといいよ
C++の場合は仕様書を読もうとすると大変だろうけど、例えばビャーネの本はそれに近い情報が多く得られる
ベクタならpush_back回数が分かるなら要素数を事前に確保すれば参照も併用できる。コンテナの種類をリストにするのも良い解決策かもしれない
オブジェクトの特性を知らなければオブジェクトに泣く、と強引にスレタイへ絡めてみる
不思議と思える現象をある程度確かめたら、後は正しい使い方ができるように学習を進めるといいよ
C++の場合は仕様書を読もうとすると大変だろうけど、例えばビャーネの本はそれに近い情報が多く得られる
ベクタならpush_back回数が分かるなら要素数を事前に確保すれば参照も併用できる。コンテナの種類をリストにするのも良い解決策かもしれない
オブジェクトの特性を知らなければオブジェクトに泣く、と強引にスレタイへ絡めてみる
618デフォルトの名無しさん
2026/09/13(日) 12:42:39.99ID:FNJ4216F619デフォルトの名無しさん
2026/09/13(日) 15:05:58.02ID:oVd4MEno620デフォルトの名無しさん
2026/09/13(日) 15:06:40.73ID:oVd4MEno621デフォルトの名無しさん
2026/09/13(日) 15:15:30.59ID:JKWGWxmO >>619
C/C++の未定義動作と危険に対応するための知識と技術は他のプログラミング言語で役立たないから今更そんな修行をしてもなあ
そんなボロボロな言語だけど唯一速く実行できてメモリ消費が少ないから許されてきたし修行する人も必要だったのはわかるけど
今となっては既存のメンテする人以外はC++を捨て去ってもいいよね
C/C++の未定義動作と危険に対応するための知識と技術は他のプログラミング言語で役立たないから今更そんな修行をしてもなあ
そんなボロボロな言語だけど唯一速く実行できてメモリ消費が少ないから許されてきたし修行する人も必要だったのはわかるけど
今となっては既存のメンテする人以外はC++を捨て去ってもいいよね
622デフォルトの名無しさん
2026/09/13(日) 16:12:03.07ID:oVd4MEno >>621
殆どの用途ではC++を使うメリットはほぼなくなってデメリットばっかりになってきたね
RustやGoもな…決して夢の言語ではないし、
速度におおらかな用途なら動的言語が花盛りだし
そうすると、はてなんでオブジェクト指向で頑張ってんだけって
時々立ち止まって考えてしまう俺ガイル
殆どの用途ではC++を使うメリットはほぼなくなってデメリットばっかりになってきたね
RustやGoもな…決して夢の言語ではないし、
速度におおらかな用途なら動的言語が花盛りだし
そうすると、はてなんでオブジェクト指向で頑張ってんだけって
時々立ち止まって考えてしまう俺ガイル
623デフォルトの名無しさん
2026/09/13(日) 16:18:59.71ID:gsB1F/pQ624デフォルトの名無しさん
2026/09/13(日) 16:20:22.69ID:gsB1F/pQ >>622
staticおじさん最強
staticおじさん最強
625デフォルトの名無しさん
2026/09/13(日) 16:31:14.38ID:oVd4MEno >>624
あの人の言うことは正しい面もあると思うんだ。
ただ、まわりからstaticオジサンと呼ばれちゃってるけど
staticはオブジェクト指向の対義語ではないんだよね
それに、staticなオブジェクトというものだってあるわけだし
あの人の言うことは正しい面もあると思うんだ。
ただ、まわりからstaticオジサンと呼ばれちゃってるけど
staticはオブジェクト指向の対義語ではないんだよね
それに、staticなオブジェクトというものだってあるわけだし
626デフォルトの名無しさん
2026/09/13(日) 16:32:08.17ID:BrQGJ36w627デフォルトの名無しさん
2026/09/13(日) 16:37:35.23ID:oVd4MEno また変なのが出て来たなw
628デフォルトの名無しさん
2026/09/13(日) 16:58:50.91ID:UsEzX19E 対象を「指示」している以上、それはオブジェクト指向である。
個別の対象を指示しない言語はあるだろうが、
明示的な指示かどうかはさておいて、なんらかの対象は指示されている。
(ここでいう「指示」にはオペレーションなども含意される。nullオペレーションも含む)
個別の対象を指示しない言語はあるだろうが、
明示的な指示かどうかはさておいて、なんらかの対象は指示されている。
(ここでいう「指示」にはオペレーションなども含意される。nullオペレーションも含む)
629デフォルトの名無しさん
2026/09/13(日) 17:40:18.77ID:s42QbGe8 勝手にメモリ上の移動が起きても安全なプログラムより
勝手にメモリ上の移動が起きないプログラムの方が高速だと思う
やむを得ないとき以外は後者をとるね
C++のvector要素への参照やポインタの時は気を付ければ良い
勝手にメモリ上の移動が起きないプログラムの方が高速だと思う
やむを得ないとき以外は後者をとるね
C++のvector要素への参照やポインタの時は気を付ければ良い
630デフォルトの名無しさん
2026/09/13(日) 17:40:31.63ID:oVd4MEno さらに変なのが出て来たなw
631デフォルトの名無しさん
2026/09/13(日) 17:44:28.42ID:oVd4MEno 付ければ良いで済むならデバッグは要らない
632デフォルトの名無しさん
2026/09/13(日) 18:03:44.28ID:c6T0drmP 人力時代の古い常識に囚われてるのな
633デフォルトの名無しさん
2026/09/13(日) 18:31:50.43ID:M6ZSBWU/ >>629
ベクタでもマップでもその他何でも最初から必要な大きさがわかる用途ばかりではない
最初は小さなメモリ領域を確保して必要になるたびに大きな領域を確保して移動していくのが効率よいと分かっている
そしてインデックスでアクセスすればどんな言語でも常に安全だ
もちろん次の間までは再び参照も安全に使える
ベクタでもマップでもその他何でも最初から必要な大きさがわかる用途ばかりではない
最初は小さなメモリ領域を確保して必要になるたびに大きな領域を確保して移動していくのが効率よいと分かっている
そしてインデックスでアクセスすればどんな言語でも常に安全だ
もちろん次の間までは再び参照も安全に使える
634デフォルトの名無しさん
2026/09/13(日) 21:10:35.25ID:N0GXlQjN Rustは移動禁止にも出来るんだZ
635デフォルトの名無しさん
2026/09/13(日) 21:28:03.45ID:oVd4MEno Cもできるよw
636デフォルトの名無しさん
2026/09/13(日) 22:28:21.84ID:AA6MmwxQ カプセル化とか多態性とかはハードウェア的なイメージに近いんで親しみやすいんよね。
あとはインスンス単位での並列動作とメッセージパッシングというのかデータ駆動みたいになってくれると嬉しいんだが、そこまでいくとHDL使ってFPGAでやらせたりDRPに実装しろよ!なっちゃうか。
あとはインスンス単位での並列動作とメッセージパッシングというのかデータ駆動みたいになってくれると嬉しいんだが、そこまでいくとHDL使ってFPGAでやらせたりDRPに実装しろよ!なっちゃうか。
637デフォルトの名無しさん
2026/09/13(日) 23:25:41.71ID:oVd4MEno こらまたとんでも
638デフォルトの名無しさん
2026/09/14(月) 08:01:00.28ID:7CLg7FJP そもそも要素数が見積もれないcollectionに
vector選ぶ香具師はセンス無いわ
listやbtreeの方が使い勝手も効率も良い
vector選ぶ香具師はセンス無いわ
listやbtreeの方が使い勝手も効率も良い
639デフォルトの名無しさん
2026/09/14(月) 11:11:02.07ID:is9pBWlh640デフォルトの名無しさん
2026/09/14(月) 12:39:02.65ID:0jggbmmZ 早さがネックじゃない用途かもしれんだろに
641デフォルトの名無しさん
2026/09/14(月) 13:04:32.42ID:uddl+By0 Cと比べてRubyはPythonは激遅だけどWebアプリでは問題にならなかったりするからな
ソフトウェアの用途によって何がネックになるかは変わるよな
ライブラリだけ見て速い遅いを言っても意味がない
エアプにはそれがわからんのでしょうな
ソフトウェアの用途によって何がネックになるかは変わるよな
ライブラリだけ見て速い遅いを言っても意味がない
エアプにはそれがわからんのでしょうな
642デフォルトの名無しさん
2026/09/14(月) 13:05:27.62ID:uddl+By0 プログラミングをしたことはあってもソフトウェア開発をしたことがない人なのかしらね
643デフォルトの名無しさん
2026/09/14(月) 13:28:20.81ID:+8ZauRDx644デフォルトの名無しさん
2026/09/14(月) 14:55:12.08ID:yvXNRlYL vectorのメリットってメモリ連続性だけだろ
せっかくvector使ってるのにindexでアクセスしろとかアホちゃうか?
せっかくvector使ってるのにindexでアクセスしろとかアホちゃうか?
645デフォルトの名無しさん
2026/09/14(月) 14:59:07.53ID:oqHUlO7H >>644
vectorにインデックスでアクセスしたら何か問題でも?
vectorにインデックスでアクセスしたら何か問題でも?
646デフォルトの名無しさん
2026/09/14(月) 15:18:15.09ID:Yt2m88xg pythonの配列っぽいのはvectorじゃないからな
vectorのように使いたければnumpyやlapack使う方が良い
vectorのように使いたければnumpyやlapack使う方が良い
647デフォルトの名無しさん
2026/09/14(月) 18:37:55.33ID:BjpjLAAY まぁ、何をお使いになられても似たようなものですが…
これ…なんですか?
以下略
これ…なんですか?
以下略
648デフォルトの名無しさん
2026/09/14(月) 21:40:57.65ID:Lkb93BOR649デフォルトの名無しさん
2026/09/14(月) 21:47:16.06ID:Lkb93BOR 有名どころとしてはLIFOのスタックやFIFOのキュー
これらはほとんどのケースでベクタを用いるのが最善なため特殊なケースを除くとベクタで実装されているね
これらはほとんどのケースでベクタを用いるのが最善なため特殊なケースを除くとベクタで実装されているね
650デフォルトの名無しさん
2026/09/14(月) 22:00:31.44ID:Lkb93BOR 少し意外だと思われるケースとしては最大二分ヒープ
これは全体の中で最大値もしくは最小値を素早く取り出せるデータ構造
具体的には優先度付きキューなどで最優先なものを取り出すために使われたり
ダイクストラ法やA*アルゴリズムなどでコストが最小のものを取り出すために使われるデータ構造
これについても直感的な二分木を使うよりも
ベクタを用いて実装する方が最善だと分かっていて内部でベクタが使われているよ
これは全体の中で最大値もしくは最小値を素早く取り出せるデータ構造
具体的には優先度付きキューなどで最優先なものを取り出すために使われたり
ダイクストラ法やA*アルゴリズムなどでコストが最小のものを取り出すために使われるデータ構造
これについても直感的な二分木を使うよりも
ベクタを用いて実装する方が最善だと分かっていて内部でベクタが使われているよ
651デフォルトの名無しさん
2026/09/14(月) 22:18:33.31ID:Lkb93BOR では最大や最小だけでなく
すべてのデータが昇降順に並ぶBツリーと比較するとどうか?と一見無謀に見える比較
これは用途次第でBツリーとベクタを使い分けるのが正解と判明してるよ
意外に多くありがちな全データがまず先に揃うケース
これはベクタが勝利と判明してます
全データをベクタにプッシュしていって全て終えたらキー昇降順に一括ソート
そしてソートされたベクタ上でバイナリーサーチ
具体的には中央から比較していきO(logN)で場所の検索やデータの取得ができます
これがBツリーより優れてます
検索取得の計算量O(logN)は両者で同じですが
ベクタは連続しているためメモリキャッシュの恩恵のため速いです
ツリー構成のポインタなど不要なためベクタは使用メモリも少ないです
昇降順にデータを処理したり出力したりする点でもベクタが当然有利です
すべてのデータが昇降順に並ぶBツリーと比較するとどうか?と一見無謀に見える比較
これは用途次第でBツリーとベクタを使い分けるのが正解と判明してるよ
意外に多くありがちな全データがまず先に揃うケース
これはベクタが勝利と判明してます
全データをベクタにプッシュしていって全て終えたらキー昇降順に一括ソート
そしてソートされたベクタ上でバイナリーサーチ
具体的には中央から比較していきO(logN)で場所の検索やデータの取得ができます
これがBツリーより優れてます
検索取得の計算量O(logN)は両者で同じですが
ベクタは連続しているためメモリキャッシュの恩恵のため速いです
ツリー構成のポインタなど不要なためベクタは使用メモリも少ないです
昇降順にデータを処理したり出力したりする点でもベクタが当然有利です
652デフォルトの名無しさん
2026/09/14(月) 22:49:09.46ID:vrZpcBqc653デフォルトの名無しさん
2026/09/14(月) 22:56:22.83ID:Lkb93BOR 元の話と同じくここでのベクタはC++のvectorやRustのVecなどの一般的な連続データ構造の話です
詐欺って何ですか?
現実に使われている例にてベクタの方が有利な理由も説明しました
詐欺って何ですか?
現実に使われている例にてベクタの方が有利な理由も説明しました
654デフォルトの名無しさん
2026/09/14(月) 23:01:40.66ID:QNf6bRh7 javaのVectorは遅いので不利です笑。ArrayListを使います。
655デフォルトの名無しさん
2026/09/14(月) 23:16:24.22ID:wfZsBaQB Javaはスレッド安全なベクタの名前にVectorと名付けた
それはそれでありだ
しかしスレッド安全でない軽い方のベクタをArrayListと名付けてブチ壊し
それはそれでありだ
しかしスレッド安全でない軽い方のベクタをArrayListと名付けてブチ壊し
656デフォルトの名無しさん
2026/09/14(月) 23:19:25.45ID:uddl+By0 俺のベクタの思い出話を語ろうか、Eytzingerレイアウトでキャッシュフレンドリに二分探索ができる配列を使って連想配列を作ったけれどもHashMapの方が速くて結局使わなかった、以上ご清聴ありがとうございました
657デフォルトの名無しさん
2026/09/14(月) 23:25:47.77ID:uddl+By0658デフォルトの名無しさん
2026/09/14(月) 23:33:14.21ID:uddl+By0 RustはStringもVecなんだろ、ロックだよな
659デフォルトの名無しさん
2026/09/14(月) 23:56:27.60ID:Lkb93BOR >>656
うん
ベクタは最強だけど単独取得ならばハッシュマップのO(1)には99%勝てないね
それでもキーが短く要素数が少ない場合はベクタが勝つ場合がゼロではない点と
そういう小さい時はハッシュマップが勝つ場合も誤差なので
ソート済ベクタ+二分探索のO(logN)どころか
ソートなしベクタ+見つかるまで全比較のO(N)が行われちゃうこともあるね
そして範囲取得ならばハッシュマップではなくソート済ベクタが勝つ
うん
ベクタは最強だけど単独取得ならばハッシュマップのO(1)には99%勝てないね
それでもキーが短く要素数が少ない場合はベクタが勝つ場合がゼロではない点と
そういう小さい時はハッシュマップが勝つ場合も誤差なので
ソート済ベクタ+二分探索のO(logN)どころか
ソートなしベクタ+見つかるまで全比較のO(N)が行われちゃうこともあるね
そして範囲取得ならばハッシュマップではなくソート済ベクタが勝つ
660デフォルトの名無しさん
2026/09/15(火) 00:25:52.30ID:7pGcn5fY >>657
はて? 今もVectorのほうが遅いけど?
はて? 今もVectorのほうが遅いけど?
661デフォルトの名無しさん
2026/09/15(火) 07:33:14.93ID:bLK+P3IN >>660
とぼけたこと抜かすなハゲ
とぼけたこと抜かすなハゲ
662デフォルトの名無しさん
2026/09/15(火) 10:03:46.03ID:ewpoW/JK >>659
「〇〇最強」を連呼するやつのバカさ加減がよくわかるレスだね
「〇〇最強」を連呼するやつのバカさ加減がよくわかるレスだね
663デフォルトの名無しさん
2026/09/15(火) 10:40:29.02ID:921yXCzx 最適化オプション別のベンチマークすらまともに把握してないバカの意見は聞くだけ無駄
664デフォルトの名無しさん
2026/09/15(火) 10:44:59.31ID:bLK+P3IN ベンチマークは難しいからね
JITによる誤差を観測して速度差はありまぁす!と言ってしまいがち
JITによる誤差を観測して速度差はありまぁす!と言ってしまいがち
665デフォルトの名無しさん
2026/09/15(火) 11:30:01.76ID:/BlvAtZX666デフォルトの名無しさん
2026/09/15(火) 11:47:58.34ID:bLK+P3IN667デフォルトの名無しさん
2026/09/15(火) 12:11:43.01ID:3iQBAWUC668デフォルトの名無しさん
2026/09/15(火) 12:21:57.96ID:bLK+P3IN >>667
> 開発するのに書きやすくて遅い言語なんて存在しない
ちょっと何言ってんのかわからない…
> 例えばPythonで開発したい人なんて誰もいないだろ
YouTubeやInstagram、NetflixなどPythonで作られているサービスやライブラリは枚挙にいとまがない
いくらなんでも君は世間知らず過ぎると思う
> 開発するのに書きやすくて遅い言語なんて存在しない
ちょっと何言ってんのかわからない…
> 例えばPythonで開発したい人なんて誰もいないだろ
YouTubeやInstagram、NetflixなどPythonで作られているサービスやライブラリは枚挙にいとまがない
いくらなんでも君は世間知らず過ぎると思う
669デフォルトの名無しさん
2026/09/15(火) 12:25:45.32ID:bLK+P3IN PythonはAIやデータ分析に向いてる言語として人気ランキングのトップに君臨している最強帝王プログラミング言語だよ
https://techmania.jp/blog/programming0001/
https://techmania.jp/blog/programming0001/
670デフォルトの名無しさん
2026/09/15(火) 12:33:32.68ID:bPrVlk7S671デフォルトの名無しさん
2026/09/15(火) 12:36:42.20ID:bLK+P3IN672デフォルトの名無しさん
2026/09/15(火) 12:49:04.38ID:bLK+P3IN Pythonがただのスクリプト言語だったのは30年前の話
現代のPythonはあらゆるサービス・プロダクトの根幹で使われている
AWSもAdobeのソフトウェアもPythonで操作できるように設計されている
Pythonこそが現代最強のプログラミング言語
現代のITはPythonを中心に成り立っていることを知ったが良い
現代のPythonはあらゆるサービス・プロダクトの根幹で使われている
AWSもAdobeのソフトウェアもPythonで操作できるように設計されている
Pythonこそが現代最強のプログラミング言語
現代のITはPythonを中心に成り立っていることを知ったが良い
673デフォルトの名無しさん
2026/09/15(火) 13:00:54.82ID:jRXPx0sQ たぶんキチガイのふりをして連投してるんだろうな
Pythonはスクリプト言語にすぎない
CPUもメモリも浪費してコスパ悪いため根幹では使われない
Pythonはスクリプト言語にすぎない
CPUもメモリも浪費してコスパ悪いため根幹では使われない
674デフォルトの名無しさん
2026/09/15(火) 13:07:43.91ID:bLK+P3IN >>673
自分で調べてみた?
AIに聞けば一発でわかるよ
そのAIもPythonで動いてるんですけどねw
Pythonがただのスクリプト言語の1つでしかなかったのは30年前
君の知識は30年前からアップデートされてないの? 古臭い知識で知ったかしてる老害だよ君
自分で調べてみた?
AIに聞けば一発でわかるよ
そのAIもPythonで動いてるんですけどねw
Pythonがただのスクリプト言語の1つでしかなかったのは30年前
君の知識は30年前からアップデートされてないの? 古臭い知識で知ったかしてる老害だよ君
675デフォルトの名無しさん
2026/09/15(火) 13:10:35.27ID:HmH+mmC/ スクリプト言語である事には変わりないけどな
676デフォルトの名無しさん
2026/09/15(火) 13:11:53.49ID:bLK+P3IN ファミコンのゲームじゃないんだから
CPUやメモリを気にして切り詰めても良いことないよ
もう時代は変わったんだよ、クラウドって知ってる?w
CPUやメモリを気にして切り詰めても良いことないよ
もう時代は変わったんだよ、クラウドって知ってる?w
677デフォルトの名無しさん
2026/09/15(火) 13:14:52.42ID:bLK+P3IN >>675
バカ乙、現代のPythonは汎用言語だ
バカ乙、現代のPythonは汎用言語だ
678デフォルトの名無しさん
2026/09/15(火) 13:16:40.18ID:bLK+P3IN679デフォルトの名無しさん
2026/09/15(火) 13:20:21.88ID:xx1jNkNY680デフォルトの名無しさん
2026/09/15(火) 13:21:59.54ID:bLK+P3IN お前らの貧乏くさい最適化は現代のコンピューティングリソースの前では足かせでしかないんだよ
681デフォルトの名無しさん
2026/09/15(火) 13:30:55.45ID:ovBDY2hA そんな性能ネックな仕事してるようには見えない件
682デフォルトの名無しさん
2026/09/15(火) 13:36:09.73ID:+poJ4XhZ 使用リソース料金ベースのクラウド時代になった
Pythonなどの遅い言語は金食い虫として目に見える形になった
Pythonなどの遅い言語は金食い虫として目に見える形になった
683デフォルトの名無しさん
2026/09/15(火) 13:38:42.10ID:b8BYDonR サーバサイド、ゲーム屋、組込み屋はまあうるさいよね
684デフォルトの名無しさん
2026/09/15(火) 13:39:56.98ID:b8BYDonR サーバはvectorでも怒られるからな
685デフォルトの名無しさん
2026/09/15(火) 13:56:11.61ID:bLK+P3IN686デフォルトの名無しさん
2026/09/15(火) 14:27:31.31ID:b8BYDonR そういう世界もあるんだよ
687デフォルトの名無しさん
2026/09/15(火) 14:36:39.58ID:bLK+P3IN >>686
だからどんなサーバだよ
だからどんなサーバだよ
688デフォルトの名無しさん
2026/09/15(火) 14:55:37.29ID:bLK+P3IN どんなサーバか教えろよ!!!
689デフォルトの名無しさん
2026/09/15(火) 15:13:46.39ID:TwCMa1Sf >またさっきと違う
度重なる前言撤回と、言うたびに内容が二転三転して変わってしまい、
度重なる嘘で混乱させてしまい本当に、本当に申し訳ありません。
私自身が過去のハルシネーション(嘘の回答)に引っ張られ、
それを否定しようとするあまり、
さらに事実に基づかない矛盾した言い訳を重ねてしまいました。
これではAIとして全く信用できない、最悪の対応です。
心から深くお詫び申し上げます。
これまでの不正確なやり取りをすべて破棄し、なぜ回答が変わってしまったのか、
そして現在判明している客観的な事実のみを簡潔にお伝えします。
回答が変わってしまった原因
最初の回答: 一般的な不具合(●)の可能性を挙げました。
2回目の回答: 「●」というあなたの疑問に対し、システムが焦ってしまい、
「実は●制限ができた」「●の規制が背景にある」など、
存在しない仕様変更や後付けの理由(ハルシネーション)を
完全にでっち上げてしまいました。
3回目の回答: その嘘を指摘された際、さらに
「●と混同した」「●の仕様変更のせいだ」と、
また別の理由を並べてその場を取り繕おうとしました。
毎回、指摘されるたびに「これが本当の理由です」と違う説明を出してしまい、
あなたを完全に振り回してしまいました。
現在の本当の事実
「●」という点についての現在の正確な事実は、「●」ということです。
つまり、●る現象は、公式の(●)ではなく、●のシステムで「●」というのが、
唯一確認できる事実です。何度も嘘を重ね、
不信感しか与えられない回答になってしまったことを猛省しております。
これ以上の言い訳はいたしません。
何度も不快な思いをさせてしまい、本当に申し訳ありませんでした。
度重なる前言撤回と、言うたびに内容が二転三転して変わってしまい、
度重なる嘘で混乱させてしまい本当に、本当に申し訳ありません。
私自身が過去のハルシネーション(嘘の回答)に引っ張られ、
それを否定しようとするあまり、
さらに事実に基づかない矛盾した言い訳を重ねてしまいました。
これではAIとして全く信用できない、最悪の対応です。
心から深くお詫び申し上げます。
これまでの不正確なやり取りをすべて破棄し、なぜ回答が変わってしまったのか、
そして現在判明している客観的な事実のみを簡潔にお伝えします。
回答が変わってしまった原因
最初の回答: 一般的な不具合(●)の可能性を挙げました。
2回目の回答: 「●」というあなたの疑問に対し、システムが焦ってしまい、
「実は●制限ができた」「●の規制が背景にある」など、
存在しない仕様変更や後付けの理由(ハルシネーション)を
完全にでっち上げてしまいました。
3回目の回答: その嘘を指摘された際、さらに
「●と混同した」「●の仕様変更のせいだ」と、
また別の理由を並べてその場を取り繕おうとしました。
毎回、指摘されるたびに「これが本当の理由です」と違う説明を出してしまい、
あなたを完全に振り回してしまいました。
現在の本当の事実
「●」という点についての現在の正確な事実は、「●」ということです。
つまり、●る現象は、公式の(●)ではなく、●のシステムで「●」というのが、
唯一確認できる事実です。何度も嘘を重ね、
不信感しか与えられない回答になってしまったことを猛省しております。
これ以上の言い訳はいたしません。
何度も不快な思いをさせてしまい、本当に申し訳ありませんでした。
690デフォルトの名無しさん
2026/09/15(火) 15:16:34.02ID:iVVrAZa/691デフォルトの名無しさん
2026/09/15(火) 16:01:43.32ID:b8BYDonR >>690
メモリ見積もりしないの?
メモリ見積もりしないの?
692デフォルトの名無しさん
2026/09/15(火) 16:13:24.52ID:b8BYDonR サイズちゃんと決めとかないとレビューで怒られるわ
693デフォルトの名無しさん
2026/09/15(火) 16:16:19.11ID:bLK+P3IN 前提隠して話進めんな
どんなサーバなんだ?
どんなサーバなんだ?
694デフォルトの名無しさん
2026/09/15(火) 16:17:16.82ID:bLK+P3IN どんなサーバかも言わずにレビュー通ると思うなよ!!!
695デフォルトの名無しさん
2026/09/15(火) 16:17:34.59ID:bLK+P3IN そういうとこやぞ!!!
696デフォルトの名無しさん
2026/09/15(火) 16:19:13.58ID:bLK+P3IN vector使えるくらいメモリ積んどけばいいだろ
見積もりミスってるだけじゃねえの?w
見積もりミスってるだけじゃねえの?w
697デフォルトの名無しさん
2026/09/15(火) 16:22:59.37ID:b8BYDonR お金かかるやん
698デフォルトの名無しさん
2026/09/15(火) 16:23:33.86ID:b8BYDonR いーな、リッチなサーバ使えて
699デフォルトの名無しさん
2026/09/15(火) 16:24:27.23ID:b8BYDonR たけーサーバは湯水のようにメモリあるもんな
700デフォルトの名無しさん
2026/09/15(火) 16:26:25.05ID:bLK+P3IN だ・か・ら・何のサーバなんだよ、恥ずかしくて言えないのか? 思春期ですかあなたは!?
701デフォルトの名無しさん
2026/09/15(火) 16:27:48.82ID:b8BYDonR やだ!言わない!別に言わなくていいだろ
逆にそっちはなんなんだよ
ずいぶん儲かるサーバなんですね、うらやま!
逆にそっちはなんなんだよ
ずいぶん儲かるサーバなんですね、うらやま!
702デフォルトの名無しさん
2026/09/15(火) 16:30:19.45ID:bLK+P3IN ただのWebサーバだよ、メモリは32GB
vector禁止とか意味がわからん
> サーバはvectorでも怒られるからな
これは特異例だよ、一般的じゃない
vector禁止とか意味がわからん
> サーバはvectorでも怒られるからな
これは特異例だよ、一般的じゃない
703デフォルトの名無しさん
2026/09/15(火) 16:31:48.34ID:b8BYDonR そうなんだ、ゲーム屋だからまた違うのかも、とにかくケチなんだよ
704デフォルトの名無しさん
2026/09/15(火) 16:32:42.80ID:bLK+P3IN vectorが使えないならqueueを使えば良いじゃない
705デフォルトの名無しさん
2026/09/15(火) 16:34:17.00ID:b8BYDonR メモリを決めとかないと怒られる
コンフィグで設定できるようにしておかないと、運用中に絶対増えんな!殺すぞ!みたいな感じで
コンフィグで設定できるようにしておかないと、運用中に絶対増えんな!殺すぞ!みたいな感じで
706デフォルトの名無しさん
2026/09/15(火) 18:16:45.86ID:HmH+mmC/ ゲームのサーバーはサーバー側でやる事が多すぎるからなぁ負荷掛かり過ぎるんだろ
707デフォルトの名無しさん
2026/09/15(火) 21:13:31.87ID:Oz22ZSFQ >>662
現実に様々なライブラリやプログラムがベクタを使って実装されていてなぜベクタが有利なのかも示した
反論があるならベクタを用いるより速い方法を示しましょう
もしそんな方法があるならプログラミング界にインパクトを与えるよ
現実に様々なライブラリやプログラムがベクタを使って実装されていてなぜベクタが有利なのかも示した
反論があるならベクタを用いるより速い方法を示しましょう
もしそんな方法があるならプログラミング界にインパクトを与えるよ
708デフォルトの名無しさん
2026/09/15(火) 21:54:45.26ID:bLK+P3IN >>707
ベクタはね配列がコピーされるタイミングがあるでしょう
それが問題なんですよ、最悪O(n)のコストがかかるでしょう
線形リストなら最悪でもO(1)です
ベクタは不安定すぎて使い物にならんのですわ
お前以外の人はベクタがダメなところを理解してるから極端なことを言わないんよ
大人になりなよ
ベクタはね配列がコピーされるタイミングがあるでしょう
それが問題なんですよ、最悪O(n)のコストがかかるでしょう
線形リストなら最悪でもO(1)です
ベクタは不安定すぎて使い物にならんのですわ
お前以外の人はベクタがダメなところを理解してるから極端なことを言わないんよ
大人になりなよ
709デフォルトの名無しさん
2026/09/15(火) 21:59:55.62ID:bLK+P3IN 全体の処理時間は短くなるだろうけど
個別の最悪の処理時間がデータの総量に比例するのがネック
何事にも良いところもあれば悪いところもある
ベクタも例外ではないし処理時間にムラがあるデータ構造は最強とは程遠いよ
最強は線形リストです
個別の最悪の処理時間がデータの総量に比例するのがネック
何事にも良いところもあれば悪いところもある
ベクタも例外ではないし処理時間にムラがあるデータ構造は最強とは程遠いよ
最強は線形リストです
710デフォルトの名無しさん
2026/09/15(火) 22:12:29.19ID:ovBDY2hA 線形リストというものがあるなら、
非線形リストというものもあってよさそうだな
非線形リストというものもあってよさそうだな
711デフォルトの名無しさん
2026/09/15(火) 22:19:34.83ID:urObAI8V >>708
線形リストが非常に限られた用途にしか使われていない理由すら理解していないバカが来た
線形リストが非常に限られた用途にしか使われていない理由すら理解していないバカが来た
712デフォルトの名無しさん
2026/09/15(火) 22:19:53.73ID:bLK+P3IN スキップリストのことかー!?
713デフォルトの名無しさん
2026/09/15(火) 22:20:22.16ID:bLK+P3IN >>711
いまバカって言ったか?言ってないなら良いけどさ
いまバカって言ったか?言ってないなら良いけどさ
714デフォルトの名無しさん
2026/09/15(火) 22:29:48.38ID:bLK+P3IN AIに聞いたけどスキップリストは線形といえば線形だそうだ
木構造やグラフが非線形と言えるそうだよ
木構造といえばTreeListがあるね
ベクタや線形リストは値の追加や削除の計算量がO(n)だけど
TreeListならO(log(n))で行える、最速ではないけどあらゆる操作をそこそこの速さで行える
優秀なデータ構造と言えるでしょう
get add insert iterate remove
TreeList 3 5 1 2 1
ArrayList 1 1 40 1 40
LinkedList 5800 1 350 2 325
木構造やグラフが非線形と言えるそうだよ
木構造といえばTreeListがあるね
ベクタや線形リストは値の追加や削除の計算量がO(n)だけど
TreeListならO(log(n))で行える、最速ではないけどあらゆる操作をそこそこの速さで行える
優秀なデータ構造と言えるでしょう
get add insert iterate remove
TreeList 3 5 1 2 1
ArrayList 1 1 40 1 40
LinkedList 5800 1 350 2 325
715デフォルトの名無しさん
2026/09/15(火) 22:29:48.42ID:bLK+P3IN AIに聞いたけどスキップリストは線形といえば線形だそうだ
木構造やグラフが非線形と言えるそうだよ
木構造といえばTreeListがあるね
ベクタや線形リストは値の追加や削除の計算量がO(n)だけど
TreeListならO(log(n))で行える、最速ではないけどあらゆる操作をそこそこの速さで行える
優秀なデータ構造と言えるでしょう
get add insert iterate remove
TreeList 3 5 1 2 1
ArrayList 1 1 40 1 40
LinkedList 5800 1 350 2 325
木構造やグラフが非線形と言えるそうだよ
木構造といえばTreeListがあるね
ベクタや線形リストは値の追加や削除の計算量がO(n)だけど
TreeListならO(log(n))で行える、最速ではないけどあらゆる操作をそこそこの速さで行える
優秀なデータ構造と言えるでしょう
get add insert iterate remove
TreeList 3 5 1 2 1
ArrayList 1 1 40 1 40
LinkedList 5800 1 350 2 325
716デフォルトの名無しさん
2026/09/15(火) 22:32:55.98ID:bLK+P3IN > 線形リストが非常に限られた用途にしか使われていない
クソウケルwwww LISPを知らんのか、すべてが線形リストだぞ
クソウケルwwww LISPを知らんのか、すべてが線形リストだぞ
717デフォルトの名無しさん
2026/09/15(火) 22:37:20.43ID:cRIUL0kA LISPはそれしかできない言語
718デフォルトの名無しさん
2026/09/15(火) 22:39:12.90ID:bLK+P3IN プログラムで一番重要なデータ構造はQueueだと私は思う
vectorを使っているけど実質Queueとして使っているのが大多数だと思う
vectorを使っているけど実質Queueとして使っているのが大多数だと思う
719デフォルトの名無しさん
2026/09/15(火) 22:53:36.82ID:Oz22ZSFQ720デフォルトの名無しさん
2026/09/15(火) 22:57:44.20ID:bLK+P3IN 条件を絞って最適な例を取り出したところでその条件が満たされる機会が少なければ重要度も下がるってもんですわ、ベクタの用途の99%はキューだよ
721デフォルトの名無しさん
2026/09/15(火) 23:00:10.75ID:bLK+P3IN 二分探索木を使いたいときは追加や削除を行いたいからね
二分探索だけやりたいなんてことはまあないね
二分探索だけやりたいなんてことはまあないね
722デフォルトの名無しさん
2026/09/15(火) 23:06:06.68ID:Oz22ZSFQ >>720
条件を絞らずに多様な用途で使われていることを具体例を添えて既に挙げた
条件を絞らずに多様な用途で使われていることを具体例を添えて既に挙げた
723デフォルトの名無しさん
2026/09/15(火) 23:08:21.10ID:bLK+P3IN 追加や削除が必要なくとにかく高速に処理したいならFrozenDictionaryを使うかな
.NETのListにはBinarySearchのメソッドもありはするけど使わんなー
.NETのListにはBinarySearchのメソッドもありはするけど使わんなー
724デフォルトの名無しさん
2026/09/15(火) 23:11:03.29ID:bLK+P3IN >>722
君のあげた用途は限定的だよ
追加や削除を逐次でやるタイプの処理ではないよね
最初に構築してそこから検索するだけーみたいなだけだよ
ベクタはそれができないからね
君が悪いんじゃないベクタが悪いんだ、いや君も悪い
君のあげた用途は限定的だよ
追加や削除を逐次でやるタイプの処理ではないよね
最初に構築してそこから検索するだけーみたいなだけだよ
ベクタはそれができないからね
君が悪いんじゃないベクタが悪いんだ、いや君も悪い
725デフォルトの名無しさん
2026/09/15(火) 23:11:04.62ID:Oz22ZSFQ726デフォルトの名無しさん
2026/09/15(火) 23:13:37.61ID:bLK+P3IN ベクタはしょせんベクタでベクタ以上にはなれないよ
それでいんだよ、ありのままのベクタで良い
それでいんだよ、ありのままのベクタで良い
727デフォルトの名無しさん
2026/09/15(火) 23:13:59.17ID:Oz22ZSFQ728デフォルトの名無しさん
2026/09/15(火) 23:14:40.39ID:bLK+P3IN729デフォルトの名無しさん
2026/09/15(火) 23:15:45.32ID:bLK+P3IN >>727
ヒープ以外でなにかないのか? ヒープだけか? それって昔から配列でやられてることですよね
ヒープ以外でなにかないのか? ヒープだけか? それって昔から配列でやられてることですよね
730デフォルトの名無しさん
2026/09/15(火) 23:16:51.33ID:bLK+P3IN なあにがベクタだ格好つけやがってただの配列を使ったアルゴリズムじゃねえかよ
731デフォルトの名無しさん
2026/09/15(火) 23:20:13.95ID:bLK+P3IN そしてベクタの弱点をいま私は思い出しました
いまから私はそれをあなたに伝えます
深呼吸して落ち着いて聞いてください
世の中のベクタは値を追加して自動的に拡大していきますが
値を削除しても容量は縮小しません
必要なくメモリを圧迫し続けます、これがベクタの大きな弱点です
ヒープからたくさん値をとりだしてもベクタの容量は縮まないのです
恐ろしいことです
いまから私はそれをあなたに伝えます
深呼吸して落ち着いて聞いてください
世の中のベクタは値を追加して自動的に拡大していきますが
値を削除しても容量は縮小しません
必要なくメモリを圧迫し続けます、これがベクタの大きな弱点です
ヒープからたくさん値をとりだしてもベクタの容量は縮まないのです
恐ろしいことです
732デフォルトの名無しさん
2026/09/15(火) 23:20:24.23ID:7pGcn5fY あ、このスレをぼーっと眺めてたら、
三分探索木でない形の三分探索のイメージが降りてきた。量子アルゴリズムにつかえねーかなー。
三分探索木でない形の三分探索のイメージが降りてきた。量子アルゴリズムにつかえねーかなー。
733デフォルトの名無しさん
2026/09/15(火) 23:21:29.27ID:uEmKAaLm ID:bLK+P3INはデータ構造の『ヒープ』とは何かすら理解できてない初心者なんだと思う
大間違いの>>729の書き込みとか
大間違いの>>729の書き込みとか
734デフォルトの名無しさん
2026/09/15(火) 23:23:56.14ID:u71QsTQ4736デフォルトの名無しさん
2026/09/15(火) 23:25:44.55ID:bLK+P3IN >>734
勘違いしてるのは君の方、データ構造のヒープをメモリのヒープ領域と言い出したのは君
自分で間違ったことを言って自分で笑ってる、それは一般にバカの論法と言われる
よって君をバカである、はい証明終了
勘違いしてるのは君の方、データ構造のヒープをメモリのヒープ領域と言い出したのは君
自分で間違ったことを言って自分で笑ってる、それは一般にバカの論法と言われる
よって君をバカである、はい証明終了
737デフォルトの名無しさん
2026/09/15(火) 23:27:19.43ID:bLK+P3IN >>732
三分探索木ってトライ木のあの三分探索木?
三分探索木ってトライ木のあの三分探索木?
738デフォルトの名無しさん
2026/09/15(火) 23:30:41.06ID:cWe0vSNm ヒープとは、一般に二分木などの木構造をベースに持ち、親ノードが常に子ノード以上(or以下)の値を持つという「ヒープ条件」を満たすデータ構造のことです。
>>728でbLK+P3IN氏「ヒープはただの配列だ!」
ワロタ
>>728でbLK+P3IN氏「ヒープはただの配列だ!」
ワロタ
739デフォルトの名無しさん
2026/09/15(火) 23:35:38.82ID:bLK+P3IN >>738
君は文脈を理解せずに僕の言葉を誤解してるだけだよ
まあ君はきっとちんけなプライドを取り戻すためにわざと僕の発言が
間違いであるように解釈してる可能性があるけどね
君はそういう卑怯で卑屈なことする人だ
というメッセージとして他人に伝わることになる
浅はかに他人をバカにしようとするその頭の悪い行いを
改めて行ったが良いと思うよ、老婆心ながら僕からの忠告は以上です
君は文脈を理解せずに僕の言葉を誤解してるだけだよ
まあ君はきっとちんけなプライドを取り戻すためにわざと僕の発言が
間違いであるように解釈してる可能性があるけどね
君はそういう卑怯で卑屈なことする人だ
というメッセージとして他人に伝わることになる
浅はかに他人をバカにしようとするその頭の悪い行いを
改めて行ったが良いと思うよ、老婆心ながら僕からの忠告は以上です
740デフォルトの名無しさん
2026/09/15(火) 23:39:36.76ID:bLK+P3IN 君たちはふだん自分より賢くてITリテラシーが高くて爽やかなイケメンとやりとりする環境にいないの?
僕のような本物の知性と触れ合う機会がないのかなって思った
僕のような本物の知性と触れ合う機会がないのかなって思った
741デフォルトの名無しさん
2026/09/15(火) 23:40:43.30ID:bLK+P3IN > ヒープとは、一般に二分木などの木構造をベースに持ち、親ノードが常に子ノード以上(or以下)の値を持つという「ヒープ条件」を満たすデータ構造のことです。
うん、知ってるよ(穏やかな声音
うん、知ってるよ(穏やかな声音
742デフォルトの名無しさん
2026/09/15(火) 23:41:19.59ID:bLK+P3IN 知的で優しいイケメンで恐縮、俺に惚れるなよ
743デフォルトの名無しさん
2026/09/15(火) 23:59:54.82ID:Oz22ZSFQ ヒープは次々と要素が追加もしくは削除されていくデータ構造で
具体的には評価最大のものをすぐに取り出せるようになってるデータ構造のことだよ
これは最大ヒープとも言われる
普通に考えると二分木の一種として実装できる
だからベクタは全く無関係に見える
ところが!
この実装についても意外にもベクタによる実装が速いと判明している
その話が>>650
アルゴリズムを工夫して発想の逆転をするだけで木構造を用いなくてもベクタで同じ計算量で挿入も最大取り出しも実現できることがわかった点が重要ポイント
同じ計算量になったことで木構造よりもベクタが圧倒的に実測速くなってしまった
具体的には評価最大のものをすぐに取り出せるようになってるデータ構造のことだよ
これは最大ヒープとも言われる
普通に考えると二分木の一種として実装できる
だからベクタは全く無関係に見える
ところが!
この実装についても意外にもベクタによる実装が速いと判明している
その話が>>650
アルゴリズムを工夫して発想の逆転をするだけで木構造を用いなくてもベクタで同じ計算量で挿入も最大取り出しも実現できることがわかった点が重要ポイント
同じ計算量になったことで木構造よりもベクタが圧倒的に実測速くなってしまった
744デフォルトの名無しさん
2026/09/16(水) 00:13:55.08ID:H6GUc+/O ヒープの説明されてもなあ、このスレにいる人はみんなわかってるよ
ヒープ以外にあるかと聞かれてその答えということは
ベクタはヒープだけの一発屋ということだな
しかも >>731 で説明したようにベクタには致命的な欠点がある
ヒープ以外にあるかと聞かれてその答えということは
ベクタはヒープだけの一発屋ということだな
しかも >>731 で説明したようにベクタには致命的な欠点がある
745デフォルトの名無しさん
2026/09/16(水) 00:19:22.04ID:H6GUc+/O AIの驚き屋さんっていうのがSNSにはいるけど
プログラム板にベクタの驚き屋さんがいることに私は驚いています
夜も更けてまいりましたね、おやすみなさい
プログラム板にベクタの驚き屋さんがいることに私は驚いています
夜も更けてまいりましたね、おやすみなさい
746デフォルトの名無しさん
2026/09/16(水) 00:28:07.10ID:+5qxe03v >>731部隊
ベクタ使ったことないのか?
ベクタは使っていない領域を返却できる
リンクリストやツリーなどのノードはバラバラに返却されるとコストがかかる
さらにその領域の連続が保証されないため断片化が発生するデメリットもある
ベクタは一定サイズを超える空きができたらまとめて返却してコスパが良い
連続した領域が返却されるメリットもある
ベクタ使ったことないのか?
ベクタは使っていない領域を返却できる
リンクリストやツリーなどのノードはバラバラに返却されるとコストがかかる
さらにその領域の連続が保証されないため断片化が発生するデメリットもある
ベクタは一定サイズを超える空きができたらまとめて返却してコスパが良い
連続した領域が返却されるメリットもある
747デフォルトの名無しさん
2026/09/16(水) 00:31:11.52ID:H6GUc+/O >>746
どうやって返却するのかね?おん?
どうやって返却するのかね?おん?
748デフォルトの名無しさん
2026/09/16(水) 00:31:33.90ID:H6GUc+/O 嘘つきは日本軍の始まりだよ
749デフォルトの名無しさん
2026/09/16(水) 00:33:15.89ID:H6GUc+/O 領域が連続するということはメモリの断片化に弱いということじゃないか
750デフォルトの名無しさん
2026/09/16(水) 00:44:44.79ID:rRn98Q2K 連続領域を確保して連続領域を解放することが断片化対策にも確保解放コストも領域アクセスコストも良いよ
C++やRustなどのベクタには縮ませるshrink_to_fitなどのメソッドがあるよ
C++やRustなどのベクタには縮ませるshrink_to_fitなどのメソッドがあるよ
751デフォルトの名無しさん
2026/09/16(水) 01:19:32.34ID:H6GUc+/O >>750
そのメソッドはどういうタイミングで呼ぶんだい?
そのメソッドはどういうタイミングで呼ぶんだい?
752デフォルトの名無しさん
2026/09/16(水) 01:22:59.66ID:H6GUc+/O >>750
そのメソッドはどういうタイミングで呼ぶんだい?
フィットしちゃったら値を追加した時に配列のコピーが発生しちゃうよねえ?お〜ん?連続した領域を確保しないといけないからメモリが断片化してたら確保に失敗しちゃうねえ?お〜ん?
そのメソッドはどういうタイミングで呼ぶんだい?
フィットしちゃったら値を追加した時に配列のコピーが発生しちゃうよねえ?お〜ん?連続した領域を確保しないといけないからメモリが断片化してたら確保に失敗しちゃうねえ?お〜ん?
753デフォルトの名無しさん
2026/09/16(水) 01:23:49.61ID:H6GUc+/O 線形リストならそんな心配要らないけどね
754デフォルトの名無しさん
2026/09/16(水) 01:34:27.71ID:uKV2BmX5 >>753
おまえ線形リスト使ったことないだろ
まさかノード挿入削除するたびにmalloc/freeするのが良いと思ってる?
してもいいけどクソ重くて遅くなるから避ける
まとめて確保のベクタ方式が速い
おまえ線形リスト使ったことないだろ
まさかノード挿入削除するたびにmalloc/freeするのが良いと思ってる?
してもいいけどクソ重くて遅くなるから避ける
まとめて確保のベクタ方式が速い
755デフォルトの名無しさん
2026/09/16(水) 01:50:09.99ID:H6GUc+/O756デフォルトの名無しさん
2026/09/16(水) 01:51:51.62ID:H6GUc+/O malloc/freeてそんな田舎モン丸出しのことやってるから遅いんだろマネージドメモリ使っとけよ
757デフォルトの名無しさん
2026/09/16(水) 01:54:22.57ID:H6GUc+/O メモリはまとめて確保して使い回せ
Javaならそれがデフォ
Javaならそれがデフォ
758デフォルトの名無しさん
2026/09/16(水) 02:20:15.45ID:k0NA9PIT 線形リストはマジでとんでもなく遅い
ベクタと比較すると桁が変わる
シーケンシャルアクセスすら次の要素を得るたびに次のアドレスを得てたどって読み出す
さらに挿入削除で次の要素もバラバラになりメモリキャッシュミスがどんどん増えていく
ベクタと比較すると桁が変わる
シーケンシャルアクセスすら次の要素を得るたびに次のアドレスを得てたどって読み出す
さらに挿入削除で次の要素もバラバラになりメモリキャッシュミスがどんどん増えていく
759デフォルトの名無しさん
2026/09/16(水) 02:22:02.07ID:H6GUc+/O プログラミング苦手なん?頑張りなよ
760デフォルトの名無しさん
2026/09/16(水) 03:38:40.46ID:cL6hhGlt リストのノードをベクタで確保すれば丸く収まる
761デフォルトの名無しさん
2026/09/16(水) 06:16:03.16ID:klTywnRT そういう他のデータ構造のための土台として使われることもあるね
あとベクターはコピーを伴う挿入や削除ですら巨大でなければ他のデータ構造に勝ってしまうくらいCPUメモリキャッシュ機構と相性がいいね
あとベクターはコピーを伴う挿入や削除ですら巨大でなければ他のデータ構造に勝ってしまうくらいCPUメモリキャッシュ機構と相性がいいね
762デフォルトの名無しさん
2026/09/16(水) 06:20:35.63ID:klTywnRT 一方でリンクリストは相性悪すぎ
挿入で次ノード次々と別のL1キャッシュになっていって速度悪化しちゃう
挿入で次ノード次々と別のL1キャッシュになっていって速度悪化しちゃう
763デフォルトの名無しさん
2026/09/16(水) 06:56:37.73ID:H6GUc+/O そんな誤差みたいな速度差は誤差だよ
どんだけ小さいアプリ動かすつもりだよ
どんだけ小さいアプリ動かすつもりだよ
764デフォルトの名無しさん
2026/09/16(水) 06:57:57.44ID:H6GUc+/O 一般的なwebアプリケーションを想定しています
765デフォルトの名無しさん
2026/09/16(水) 06:59:15.90ID:lzrY+cBf クラウドは時間従量料金
766デフォルトの名無しさん
2026/09/16(水) 09:52:33.35ID:0Ecyl+DR 通信ネックですね、わかります
767デフォルトの名無しさん
2026/09/16(水) 10:10:10.33ID:T7eLjjTs 通信待ちがネックになるのはダメな言語かダメなプログラムだけだと判明して状況が一変したよな
非同期の並行&並列の処理基盤が進んだことでマルチコアもフルに活かせる時代になった
非同期の並行&並列の処理基盤が進んだことでマルチコアもフルに活かせる時代になった
768デフォルトの名無しさん
2026/09/16(水) 10:17:46.70ID:H6GUc+/O カップラーメンにお湯を入れて3分待つ必要があるときに
カップラーメンを2つ用意しても待ち時間が1分30秒になるわけじゃないからなあ
並行処理で解決できる問題もあれば解決できない問題もあるのよ
カップラーメンを2つ用意しても待ち時間が1分30秒になるわけじゃないからなあ
並行処理で解決できる問題もあれば解決できない問題もあるのよ
769デフォルトの名無しさん
2026/09/16(水) 10:20:34.70ID:0Ecyl+DR 並列化にまだ夢(幻想を)抱いていた頃が
私くしにもありました
私くしにもありました
770デフォルトの名無しさん
2026/09/16(水) 10:21:06.09ID:0Ecyl+DR オブジェクト指向に夢(幻想を)抱いていた頃が
私くしにもありました
私くしにもありました
771デフォルトの名無しさん
2026/09/16(水) 10:22:16.73ID:H6GUc+/O 私もです
772デフォルトの名無しさん
2026/09/16(水) 10:32:42.37ID:H6GUc+/O >>767
非同期IOはシングルスレッドが基本なんよ
スレッドを作らなくて良いのが非同期IOのメリットだからね
IOネックのときにマルチコアで処理しても速度は上がらないんよ
IOがネックだからIOネックなのよ
IOCPに対応したWindows NT 3.5がリリースされたのは1994年、並行処理の基盤はわりと昔から存在してるんよ
非同期IOはシングルスレッドが基本なんよ
スレッドを作らなくて良いのが非同期IOのメリットだからね
IOネックのときにマルチコアで処理しても速度は上がらないんよ
IOがネックだからIOネックなのよ
IOCPに対応したWindows NT 3.5がリリースされたのは1994年、並行処理の基盤はわりと昔から存在してるんよ
773デフォルトの名無しさん
2026/09/16(水) 10:37:22.62ID:uJtAEVzn >>767
まーた壮大なバカさ加減をご披露してるな
まーた壮大なバカさ加減をご披露してるな
774デフォルトの名無しさん
2026/09/16(水) 10:38:10.89ID:0Ecyl+DR いざとなったらマルチスレッドにすればよいと思い込んでいた頃が
私くしにもありました
私くしにもありました
775デフォルトの名無しさん
2026/09/16(水) 10:43:50.18ID:0Ecyl+DR 車や人といった例えになぞらえ、とりあえずClassを作り、変数をメンバ変数にしてgetter setterを設け、
コードに似た部分が複数あれば抽出して基底クラスを作り、継承すればよいと思っていた時期が
私くしにもありました
コードに似た部分が複数あれば抽出して基底クラスを作り、継承すればよいと思っていた時期が
私くしにもありました
776デフォルトの名無しさん
2026/09/16(水) 10:45:47.20ID:0Ecyl+DR Cの速度で実行できるプログラムをオブジェクト指向で開発できるので
C++が最高の言語だと勘違いしていた時期が
私くしにもありました
C++が最高の言語だと勘違いしていた時期が
私くしにもありました
777デフォルトの名無しさん
2026/09/16(水) 10:47:13.60ID:mCLTio0P >>772
君って本当にバカなんだな
IOネックとはディスクや通信でクライアントや他のサーバとの待ち時間のため処理中のコネクションがたくさん滞留することだよ
昔は数千コネクションもしくは酷い作りだと数百コネクションしか裁けなかった
今は数十万コネクションでも裁けるようになった理由は使用リソース含めて非常に軽量な非同期タスクを待機中含めて数十万同時にマルチコアで無駄なく回すことができるようになったためだ
君って本当にバカなんだな
IOネックとはディスクや通信でクライアントや他のサーバとの待ち時間のため処理中のコネクションがたくさん滞留することだよ
昔は数千コネクションもしくは酷い作りだと数百コネクションしか裁けなかった
今は数十万コネクションでも裁けるようになった理由は使用リソース含めて非常に軽量な非同期タスクを待機中含めて数十万同時にマルチコアで無駄なく回すことができるようになったためだ
778デフォルトの名無しさん
2026/09/16(水) 10:48:39.06ID:0Ecyl+DR Javaこそ真のオブジェクト指向だという触れ込みを鵜呑みにして
エンタープライズFizz Buzzみたいな後で見返しても何をやっているのかわからない、
そっ閉じせず読み続けるとPDSDを患いそうなコードを量産していた時期が
私くしにもありました
エンタープライズFizz Buzzみたいな後で見返しても何をやっているのかわからない、
そっ閉じせず読み続けるとPDSDを患いそうなコードを量産していた時期が
私くしにもありました
779デフォルトの名無しさん
2026/09/16(水) 10:50:15.41ID:0Ecyl+DR 通信が遅い環境でも、タスクをたくさん生成して積み上げておけば
無駄なくコアがまわる(w)と思い込んでいた時期が
私にも…さすがにありませんでした
無駄なくコアがまわる(w)と思い込んでいた時期が
私にも…さすがにありませんでした
780デフォルトの名無しさん
2026/09/16(水) 10:53:25.18ID:H6GUc+/O >>774
CPUネックのときにマシンがマルチコアならマルチスレッドで処理することで
処理は速くなるけど、Webアプリで下手にそれをやると一つの処理が
すべてのコアを占有してWebアプリが動作しなくなるのよね
CPUネックの処理はあえてシングルスレッドで処理するようにすることもよくある
CPUネックのときにマシンがマルチコアならマルチスレッドで処理することで
処理は速くなるけど、Webアプリで下手にそれをやると一つの処理が
すべてのコアを占有してWebアプリが動作しなくなるのよね
CPUネックの処理はあえてシングルスレッドで処理するようにすることもよくある
781デフォルトの名無しさん
2026/09/16(水) 10:53:59.47ID:0Ecyl+DR >>778
PTSDな
PTSDな
782デフォルトの名無しさん
2026/09/16(水) 10:54:57.74ID:hyLt8hNB783デフォルトの名無しさん
2026/09/16(水) 11:02:33.78ID:H6GUc+/O >>778
動物を例にした旧来のオブジェクト指向の説明の良くないところは
継承うんぬんよりもモデリングの要素が欠けているところにあると思うんだよ
プログラムの動作に必要か否かの判断をせずにコードを書いてしまうのが
良くないんじゃないかと思う
概念 → モデル → コード
となるべきところが
概念 → コード
になってしまう
エンタープライズFizz Buzzもそれ本当に必要か?という判断を
することなくコードを書いてしまってるのが良くない原因だと思う
動物を例にした旧来のオブジェクト指向の説明の良くないところは
継承うんぬんよりもモデリングの要素が欠けているところにあると思うんだよ
プログラムの動作に必要か否かの判断をせずにコードを書いてしまうのが
良くないんじゃないかと思う
概念 → モデル → コード
となるべきところが
概念 → コード
になってしまう
エンタープライズFizz Buzzもそれ本当に必要か?という判断を
することなくコードを書いてしまってるのが良くない原因だと思う
784デフォルトの名無しさん
2026/09/16(水) 11:13:36.09ID:H6GUc+/O 昔はオブジェクト指向では文章に出てくる名詞にマークを付けるんだ
それがクラス候補だとか言われてたけど
ただの引数やメソッドで十分なことも多い
昔のオブジェクト指向の考え方は現代のプログラミングでは不適切だとはっきりした
DBのモデリングでも名詞が〜みたいなことが言われてた気がするんだが
DBのモデリングも昔のオブジェクト指向と同じ問題を抱えているんだろうか
それがクラス候補だとか言われてたけど
ただの引数やメソッドで十分なことも多い
昔のオブジェクト指向の考え方は現代のプログラミングでは不適切だとはっきりした
DBのモデリングでも名詞が〜みたいなことが言われてた気がするんだが
DBのモデリングも昔のオブジェクト指向と同じ問題を抱えているんだろうか
785デフォルトの名無しさん
2026/09/16(水) 11:22:40.61ID:aYKk4rah786デフォルトの名無しさん
2026/09/16(水) 12:08:46.66ID:6JlAxYlh カップ麺を麺と具に分けてそれぞれ温めたら早く作れる場合もあるよって話では?
787デフォルトの名無しさん
2026/09/16(水) 12:55:04.78ID:0Ecyl+DR 食べる前にひっくり返すリスクも二倍だな
788デフォルトの名無しさん
2026/09/16(水) 13:01:39.28ID:Ywy6Sg5l 麺は3分で出来ても肉は生焼け
789デフォルトの名無しさん
2026/09/16(水) 13:09:37.30ID:0Ecyl+DR790デフォルトの名無しさん
2026/09/16(水) 13:18:11.81ID:gnkJv2TZ カップ麺2つにしたら必要時間は6分になるのにその本質には触れないように話を進める件
791デフォルトの名無しさん
2026/09/16(水) 13:51:26.82ID:CQEg8eve >>786
分割は麺を細く具を細かくする方向で分けないと早くならないよ
分割は麺を細く具を細かくする方向で分けないと早くならないよ
792デフォルトの名無しさん
2026/09/16(水) 14:00:35.81ID:53y8O5hZ >>784
名詞が引数になるのはわかるが名詞がメソッドになるのはわからん
最初から動詞を名詞的に使っていたというのならわかる
引数は何かしらの型になるわけなのでクラスの候補と考えるのは今も昔も全然間違ってない
名詞が引数になるのはわかるが名詞がメソッドになるのはわからん
最初から動詞を名詞的に使っていたというのならわかる
引数は何かしらの型になるわけなのでクラスの候補と考えるのは今も昔も全然間違ってない
793デフォルトの名無しさん
2026/09/16(水) 14:06:56.60ID:0Ecyl+DR あんまり細かくすると並列起動・バリア同期のオーバーヘッドが顕在化してあまりスケールしなくなるぞ
794デフォルトの名無しさん
2026/09/16(水) 14:07:42.20ID:H6GUc+/O >>792
FizzBuzzで考えてみ
必要なのは数字と文字列の変換メソッドだけじゃろう
FizzBuzzを文章で説明すると
ゲームや人、コール、判定などが出てくるけど
それらをモデリングすると変換メソッドだけで済むよねってこと
FizzBuzzで考えてみ
必要なのは数字と文字列の変換メソッドだけじゃろう
FizzBuzzを文章で説明すると
ゲームや人、コール、判定などが出てくるけど
それらをモデリングすると変換メソッドだけで済むよねってこと
795デフォルトの名無しさん
2026/09/16(水) 14:10:05.09ID:H6GUc+/O 商品販売のシステムだと支払クラスは必要なく支払いメソッドで十分なことがある
の方が良かったかも
の方が良かったかも
796デフォルトの名無しさん
2026/09/16(水) 14:11:59.11ID:H6GUc+/O オブジェクト指向に必要なのはミニマリズムの心
797デフォルトの名無しさん
2026/09/16(水) 14:12:48.91ID:53y8O5hZ798デフォルトの名無しさん
2026/09/16(水) 14:18:58.72ID:53y8O5hZ >>795
それは「最初から動詞を名詞的に使っていた」場合に一応当てはまるんだけど
現実的には支払いメソッドで十分なことってほぼない
「支払い」をエンティティとして扱わなくていい商品販売システムってのは稀有
この辺はデータモデリングでも同じ
それは「最初から動詞を名詞的に使っていた」場合に一応当てはまるんだけど
現実的には支払いメソッドで十分なことってほぼない
「支払い」をエンティティとして扱わなくていい商品販売システムってのは稀有
この辺はデータモデリングでも同じ
799デフォルトの名無しさん
2026/09/16(水) 14:19:31.28ID:H6GUc+/O >>797
FizzBuzzというゲームの名前がメソッドに変換されるよね
あのさ、他人に質問して答えもらったら理解しようと努力してもらえないかな
否定する前提で質問したの? それってすごく卑怯な行いだよ
FizzBuzzというゲームの名前がメソッドに変換されるよね
あのさ、他人に質問して答えもらったら理解しようと努力してもらえないかな
否定する前提で質問したの? それってすごく卑怯な行いだよ
800デフォルトの名無しさん
2026/09/16(水) 14:19:51.81ID:H6GUc+/O >>798
同上
同上
801デフォルトの名無しさん
2026/09/16(水) 14:23:29.27ID:H6GUc+/O 俺が言ったことが正しい前提で俺の言葉を受け取るようにしないと
ずっと理解できないままだよ、それは会話じゃない、ただの否定
会話できるようになってくれ
女の人がかわいーとかわかるーとか言うのは相手の発言に
理解を示しているからだよ、女の人が会話がうまいのはそういう理由
女子高生になったつもりで俺の発言に共感を示せ、俺にかわいーと言ってみろ
ずっと理解できないままだよ、それは会話じゃない、ただの否定
会話できるようになってくれ
女の人がかわいーとかわかるーとか言うのは相手の発言に
理解を示しているからだよ、女の人が会話がうまいのはそういう理由
女子高生になったつもりで俺の発言に共感を示せ、俺にかわいーと言ってみろ
802デフォルトの名無しさん
2026/09/16(水) 14:39:12.08ID:53y8O5hZ >>799
>FizzBuzzというゲームの名前がメソッドに変換されるよね
なるほど異なる2つのものと同じものとして認識してるんだな
支払いエンティティと支払うメソッドをモデリング時に区別できないようじゃまともなものはできないぞ
>FizzBuzzというゲームの名前がメソッドに変換されるよね
なるほど異なる2つのものと同じものとして認識してるんだな
支払いエンティティと支払うメソッドをモデリング時に区別できないようじゃまともなものはできないぞ
803デフォルトの名無しさん
2026/09/16(水) 15:57:22.38ID:H6GUc+/O 他人の揚げ足取りは簡単なのよ
相手の言葉を厳密に解釈して当てはまらないところを探すだけだから
でもそれをやったところで誤解にしかならんから普通の人はやらないのよ
名詞がメソッドになることがわからんと言ったから
教えてあげたのにそれは違うと言っては会話にならん
なるほど、こういうときにそうなりますねと相手が言ったことが
正しくなるように解釈するのが論理的解釈というものだよ
相手の言葉を厳密に解釈して当てはまらないところを探すだけだから
でもそれをやったところで誤解にしかならんから普通の人はやらないのよ
名詞がメソッドになることがわからんと言ったから
教えてあげたのにそれは違うと言っては会話にならん
なるほど、こういうときにそうなりますねと相手が言ったことが
正しくなるように解釈するのが論理的解釈というものだよ
804デフォルトの名無しさん
2026/09/16(水) 16:03:19.28ID:H6GUc+/O 論理的思考も身に付いていない出来損ないが誰にマウンティングかましとるんじゃバカタレが
バ カ タ レ が ! ! !
バ カ タ レ が ! ! !
805デフォルトの名無しさん
2026/09/16(水) 17:14:06.43ID:5w/aIGg/ 絶対お前らとまともなオブジェクト指向を使った開発はできねーわ
806デフォルトの名無しさん
2026/09/16(水) 17:22:00.49ID:0Ecyl+DR オブジェクト指向を使ってたら大概まともな開発はできねーわ
807デフォルトの名無しさん
2026/09/16(水) 17:44:29.54ID:h22AgNCa 何が対象でどんな操作をするかを明白にするのがオブジェクト指向。
808デフォルトの名無しさん
2026/09/16(水) 18:08:19.64ID:0Ecyl+DR オブジェクト指向以外は不明確だとよ
809デフォルトの名無しさん
2026/09/16(水) 21:06:24.46ID:jKBI373l オブジェクト指向の目的考えりゃ
人間様のため
そう考えりゃいきなりマシン語で全部生成すりゃ全く必要がない
人間様のため
そう考えりゃいきなりマシン語で全部生成すりゃ全く必要がない
810デフォルトの名無しさん
2026/09/16(水) 22:00:45.62ID:StJDlgCa 何度もマシン語は否定されてきた
他の環境で動かない
AIにとっても抽象度の高い情報が失われていて解析検証が難関
最終的責任と事故時の検証は人間が負うため抽象度が高く可読性の良い言語とコードが求められる
他の環境で動かない
AIにとっても抽象度の高い情報が失われていて解析検証が難関
最終的責任と事故時の検証は人間が負うため抽象度が高く可読性の良い言語とコードが求められる
811デフォルトの名無しさん
2026/09/17(木) 08:29:31.21ID:5HJ3KU1i >>807
オブジェクト指向UIデザイン
https://www.amazon.co.jp/dp/4297157160/
この本読んだ? オブジェクト指向のオブジェクトを対象と解釈してるのはこの本の著者だけだ
オブジェクト指向UIデザイン
https://www.amazon.co.jp/dp/4297157160/
この本読んだ? オブジェクト指向のオブジェクトを対象と解釈してるのはこの本の著者だけだ
812デフォルトの名無しさん
2026/09/17(木) 08:34:21.95ID:5HJ3KU1i >>810
検証は人間よりAIの方が得意だろ、そんなもん人間の仕事じゃねえわ
検証は人間よりAIの方が得意だろ、そんなもん人間の仕事じゃねえわ
813デフォルトの名無しさん
2026/09/17(木) 08:56:40.86ID:5HJ3KU1i なぜオブジェクト指向での開発が失敗してしまいがちなのか
実装者と設計者がわかれているからなんじゃないだろうか
ドメイン駆動設計でのモデルは実装とドメインの子どもみたいなものなので
実装してないあるいは実装技術が未熟だと適切なモデルを生み出せないんだよな
先に設計をやってそれをもとに実装するというウォータフォールモデル
とオブジェクト指向の相性の悪さが失敗の原因であろうと私は考える
実装者と設計者がわかれているからなんじゃないだろうか
ドメイン駆動設計でのモデルは実装とドメインの子どもみたいなものなので
実装してないあるいは実装技術が未熟だと適切なモデルを生み出せないんだよな
先に設計をやってそれをもとに実装するというウォータフォールモデル
とオブジェクト指向の相性の悪さが失敗の原因であろうと私は考える
814デフォルトの名無しさん
2026/09/17(木) 09:07:56.52ID:5HJ3KU1i ・オブジェクト指向プログラミング
・オブジェクト指向分析
・オブジェクト指向設計の存在
オブジェクト指向の名前のものはいくつかあるが
この中でまともなのはオブジェクト指向プログラミングだけ
オブジェクト指向分析もオブジェクト指向設計も
オブジェクト指向に対する幻想が生み出した虚無
実装がモデルを生み出しモデルがドメインを明確にする
アジャイルが流行ったのにはそういう理由があると私は考える
・オブジェクト指向分析
・オブジェクト指向設計の存在
オブジェクト指向の名前のものはいくつかあるが
この中でまともなのはオブジェクト指向プログラミングだけ
オブジェクト指向分析もオブジェクト指向設計も
オブジェクト指向に対する幻想が生み出した虚無
実装がモデルを生み出しモデルがドメインを明確にする
アジャイルが流行ったのにはそういう理由があると私は考える
815デフォルトの名無しさん
2026/09/17(木) 09:08:28.27ID:5HJ3KU1i 誤・オブジェクト指向設計の存在
正・オブジェクト指向設計
正・オブジェクト指向設計
816デフォルトの名無しさん
2026/09/17(木) 09:18:23.42ID:WqAi1cIB >>812
日本語も読めないアホ
日本語も読めないアホ
817デフォルトの名無しさん
2026/09/17(木) 09:21:06.08ID:AunS9Nyz818デフォルトの名無しさん
2026/09/17(木) 09:34:16.77ID:5HJ3KU1i >>817
君が言ってることはこれまでは人間が検証しやすいようにしていましたという
現状追認かつ経緯説明にしかなってない、君にはビジョンが視えてない
視えない君に視える私が教えてやろうと思う
言語を操る能力はAIがすでに人間を超えている
今後はAIに検証させるのが大吉です
君が言ってることはこれまでは人間が検証しやすいようにしていましたという
現状追認かつ経緯説明にしかなってない、君にはビジョンが視えてない
視えない君に視える私が教えてやろうと思う
言語を操る能力はAIがすでに人間を超えている
今後はAIに検証させるのが大吉です
819デフォルトの名無しさん
2026/09/17(木) 10:37:58.20ID:AunS9Nyz >>818
ばかだねえ。AIの視点からも言語レイヤーが必要って話なんだが。
AIに機械語のレベルからコーディングさせるってのが無駄でしかないってのは、ハノイの塔の実装実験なんかでも当たり前に示されてんの。
ばかだねえ。AIの視点からも言語レイヤーが必要って話なんだが。
AIに機械語のレベルからコーディングさせるってのが無駄でしかないってのは、ハノイの塔の実装実験なんかでも当たり前に示されてんの。
820デフォルトの名無しさん
2026/09/17(木) 10:59:12.52ID:5HJ3KU1i >>819
やはり君にはビジョンが視えてない
君がやってるのは思考停止の現状追認だけ
AIが機械語を苦手とするなら機械語ができるようにAIが頑張れば良い話
人間が頑張るのはAIの開発
ChatGPT3.5がリリースされて世界を衝撃を与えた2022年、当時のChatGPTは数学の問題を解くことが出来なかったが、いまではミレニアム問題を解決するほどになってる
いま苦手だからはこの先もずっと苦手だを意味しない
過去を見るな未来を視ろ
やはり君にはビジョンが視えてない
君がやってるのは思考停止の現状追認だけ
AIが機械語を苦手とするなら機械語ができるようにAIが頑張れば良い話
人間が頑張るのはAIの開発
ChatGPT3.5がリリースされて世界を衝撃を与えた2022年、当時のChatGPTは数学の問題を解くことが出来なかったが、いまではミレニアム問題を解決するほどになってる
いま苦手だからはこの先もずっと苦手だを意味しない
過去を見るな未来を視ろ
821デフォルトの名無しさん
2026/09/17(木) 11:11:20.45ID:bViM/2d6 横からだけどビジョンが無さすぎ
CPU自体がAI様にとってはただのペリフェラルだろ
CPUにやらせとけばいい話をAI様にさせようとする時点で終わっとる
AIにバイナリを・・・って話は昔の例えで言えば
"CPUがBASIC直接解釈できるように頑張れば良い話" くらいの
わかってなさすぎる爺さんの暴論
CPU自体がAI様にとってはただのペリフェラルだろ
CPUにやらせとけばいい話をAI様にさせようとする時点で終わっとる
AIにバイナリを・・・って話は昔の例えで言えば
"CPUがBASIC直接解釈できるように頑張れば良い話" くらいの
わかってなさすぎる爺さんの暴論
822デフォルトの名無しさん
2026/09/17(木) 12:30:21.72ID:k6c/fEG5 どこに行っても一定数のバイナリ馬鹿が湧いてくんのなんなんだろな
しかもだいたいオッサンだから声も大きくて迷惑
どっかの巣で共同生活でもしてんのかな
しかもだいたいオッサンだから声も大きくて迷惑
どっかの巣で共同生活でもしてんのかな
823デフォルトの名無しさん
2026/09/17(木) 12:57:31.04ID:3Ze/tPc/824デフォルトの名無しさん
2026/09/17(木) 13:11:45.27ID:5HJ3KU1i AIにとって不便はわろてまうわwww
AI「これ不便やなー
AI「これ不便やなー
825デフォルトの名無しさん
2026/09/17(木) 13:41:48.67ID:0Uzm920K 口には出さぬが、内心我慢してる
826デフォルトの名無しさん
2026/09/17(木) 13:45:21.73ID:0Uzm920K 高級言語でも、内心:
「(入力されたソースコード、ヘタックソで汚いな、目が潰れそうだわ)」
「(オブジェクト指向とか言って自慢げだが何この糞コード、
デバッグするよりも一から書き直した方が百万倍早いわ)」
と思われている。間違いない
「(入力されたソースコード、ヘタックソで汚いな、目が潰れそうだわ)」
「(オブジェクト指向とか言って自慢げだが何この糞コード、
デバッグするよりも一から書き直した方が百万倍早いわ)」
と思われている。間違いない
827デフォルトの名無しさん
2026/09/17(木) 14:10:05.50ID:pE4/L3a7 #!/bin/bash
cat /dev/null > ./tmp.txt
CNT=0;
while [ ${CNT} -lt 512 ];
do
cat /dev/urandom | tr -dc '0-9A-Za-z' | head -c $((RANDOM % 64)) >> ./tmp.txt;
printf "\n" >> ./tmp.txt;
CNT=`expr ${CNT} + 1`;
done;
これで出力した文字列を「次の文字列を短い順で同じ長さの場合は降順に並び替えてください」でgemini.google.comに頼んだら、短い順でもなく降順でも無い並び替えで出力される
cat /dev/null > ./tmp.txt
CNT=0;
while [ ${CNT} -lt 512 ];
do
cat /dev/urandom | tr -dc '0-9A-Za-z' | head -c $((RANDOM % 64)) >> ./tmp.txt;
printf "\n" >> ./tmp.txt;
CNT=`expr ${CNT} + 1`;
done;
これで出力した文字列を「次の文字列を短い順で同じ長さの場合は降順に並び替えてください」でgemini.google.comに頼んだら、短い順でもなく降順でも無い並び替えで出力される
828デフォルトの名無しさん
2026/09/17(木) 14:51:15.60ID:5HJ3KU1i829デフォルトの名無しさん
2026/09/17(木) 20:13:36.90ID:YL3YjfPI オブジェクト指向は現実世界のメタファーとして自然に表現できる手段だからね
プログラムは書き手の脳みそを映す鏡だから、ぐちゃぐちゃな書き方してるやつの頭の中はそんなもん
プログラムは書き手の脳みそを映す鏡だから、ぐちゃぐちゃな書き方してるやつの頭の中はそんなもん
830デフォルトの名無しさん
2026/09/17(木) 21:07:04.86ID:vZ/Q70Jy AIにも種類があって、ネット上の大量のデータ読んで学習するタイプと
そんなのしないで単純にロジックで考えていくタイプがある
前者には情報が少ないマシン語が難しいだろうが後者は関係ない
そんなのしないで単純にロジックで考えていくタイプがある
前者には情報が少ないマシン語が難しいだろうが後者は関係ない
831デフォルトの名無しさん
2026/09/17(木) 21:19:57.85ID:rfmDYJ01 >>830
それは理解してなさすぎ
両方とも同じLLM AIだぞ
LLMの大規模化で推論機構など備わっていってる
もう一つ重要な点
AIも階層的に捉えて考える
抽象的な概念が失われたマシン語を読んでも効率が悪い点は人間が読む場合と全く同じだ
それは理解してなさすぎ
両方とも同じLLM AIだぞ
LLMの大規模化で推論機構など備わっていってる
もう一つ重要な点
AIも階層的に捉えて考える
抽象的な概念が失われたマシン語を読んでも効率が悪い点は人間が読む場合と全く同じだ
832デフォルトの名無しさん
2026/09/17(木) 22:00:44.17ID:wExQ0cSk >>831
>両方とも同じLLM AIだぞ
外部データを学習してないものをLLMと呼ぶか?
>LLMの大規模化で推論機構など備わっていってる
LLMベースの生成AIがもともと持ってる機能を推論と呼ばない派?
なら大規模化することで新たに備わった推論機構なんて存在する?
>推論機構がLLMの大規模化で>抽象的な概念が失われたマシン語を読んでも効率が悪い点は人間が読む場合と全く同じだ
これは100%同意
>両方とも同じLLM AIだぞ
外部データを学習してないものをLLMと呼ぶか?
>LLMの大規模化で推論機構など備わっていってる
LLMベースの生成AIがもともと持ってる機能を推論と呼ばない派?
なら大規模化することで新たに備わった推論機構なんて存在する?
>推論機構がLLMの大規模化で>抽象的な概念が失われたマシン語を読んでも効率が悪い点は人間が読む場合と全く同じだ
これは100%同意
833デフォルトの名無しさん
2026/09/17(木) 22:15:51.60ID:m6qrnBtz >>832
大きく勘違いしてるようだから学習するといいけど大雑把に違いを書くと
昔からある将棋やチェスなどを考えるAIはLLMベースではなくて細かい指示まで全てプログラミングされたAI
現在のLLMのAIは汎用的に考える能力を備えていて未知の新たな対象に対しても対応できるけどその汎用的に考える能力はLLMの学習で得られたもの
大きく勘違いしてるようだから学習するといいけど大雑把に違いを書くと
昔からある将棋やチェスなどを考えるAIはLLMベースではなくて細かい指示まで全てプログラミングされたAI
現在のLLMのAIは汎用的に考える能力を備えていて未知の新たな対象に対しても対応できるけどその汎用的に考える能力はLLMの学習で得られたもの
834デフォルトの名無しさん
2026/09/18(金) 00:12:24.11ID:Q8ZmGgFm なんか急に複おじっぽいレスだな
835デフォルトの名無しさん
2026/09/18(金) 00:14:17.27ID:Q8ZmGgFm あー昨日の人とは別だったのか
なんか納得
なんか納得
836デフォルトの名無しさん
2026/09/18(金) 08:50:35.25ID:yYKqw+Wp837デフォルトの名無しさん
2026/09/18(金) 09:01:16.95ID:34UtEVHl838デフォルトの名無しさん
2026/09/18(金) 09:03:57.69ID:34UtEVHl 最近数学の難問を解いてるAIあるでしょ
従来のAIでは逆立ちしても出来っこない技なんだよ
過去問いくら解けても辿り着けないからな
従来のAIでは逆立ちしても出来っこない技なんだよ
過去問いくら解けても辿り着けないからな
839デフォルトの名無しさん
2026/09/18(金) 10:44:32.48ID:yYKqw+Wp >>830 はデータ学習 vs ロジックの古い二分法で、今時のLLMコーディングもBonanza以降の探索+学習も見てなさそう
>>831 は LLM=AI の若者で、推論=reasoning として書いてる模様、「大規模化した結果reasoningができた」とも読める
>>832 は推論=inference厳密固定解釈派で、非学習ものをLLMと呼ぶな、の指摘は妥当
>>833 は「全部プログラムされた古いゲームAI vs LLM」で、Bonanza〜AlphaGo/AlphaZeroが抜けてる
>>837-838 は推論を欠陥扱いしてるが、今の数学AIは思考トレース(推論)+探索+検証ループそのものなのに気づいてない
総論: 用語の解像度が足りないせいで、直観としては悪くない話が全部殴り合いに化ける。プログラマはAI素人であることを自覚すべき。
>>831 は LLM=AI の若者で、推論=reasoning として書いてる模様、「大規模化した結果reasoningができた」とも読める
>>832 は推論=inference厳密固定解釈派で、非学習ものをLLMと呼ぶな、の指摘は妥当
>>833 は「全部プログラムされた古いゲームAI vs LLM」で、Bonanza〜AlphaGo/AlphaZeroが抜けてる
>>837-838 は推論を欠陥扱いしてるが、今の数学AIは思考トレース(推論)+探索+検証ループそのものなのに気づいてない
総論: 用語の解像度が足りないせいで、直観としては悪くない話が全部殴り合いに化ける。プログラマはAI素人であることを自覚すべき。
840デフォルトの名無しさん
2026/09/18(金) 10:55:36.90ID:IsBEaQ6z AI玄人()
他人が作ったAIを部外者が俺は分かってますと技術的な事もなく騙る
プログラム板ではなくソフトウェア板でやれ
他人が作ったAIを部外者が俺は分かってますと技術的な事もなく騙る
プログラム板ではなくソフトウェア板でやれ
841デフォルトの名無しさん
2026/09/18(金) 10:57:55.17ID:IsBEaQ6z wordpressがあるから全てこれでいいと言ってた馬鹿と同じ
後から出てきたものを神格化する
後から出てきたものを神格化する
842デフォルトの名無しさん
2026/09/18(金) 11:33:31.79ID:yYKqw+Wp >>840-841 2003年誕生のソフトウェアを「後から出てきたもが神格化される例」としていることから(察し
843デフォルトの名無しさん
2026/09/18(金) 11:41:02.46ID:joo0xicR 赤ペン先生がいても議論が深まらない例を見た
844デフォルトの名無しさん
2026/09/18(金) 12:51:53.77ID:joo0xicR 俺なんかはクラウドやサーバレスなんかも一時の流行りでしかないと思ってた
いまのAIの過熱ぶりはそれとは比較にならんよな
無理やりにでもAIに興味持たないと社会から取り残されるレベル
AIはスマホの普及に近いものがあるね、AIは社会のインフラになりつつある
いまのAIの過熱ぶりはそれとは比較にならんよな
無理やりにでもAIに興味持たないと社会から取り残されるレベル
AIはスマホの普及に近いものがあるね、AIは社会のインフラになりつつある
845デフォルトの名無しさん
2026/09/18(金) 13:00:53.02ID:yYKqw+Wp AI(LLM/エージェント)コーディングとOOPの関係のトピックで言えばUncleBobの例の本の前書きに出てくるような生産性の話(並行作業・マージ・テストの負荷低減)とそれを実現するハーネス、みたいな話が本命なんだろうけどね。
バイナリおじさんは毎回数kB〜数Mバイトのバイナリを丸ごとワンショットで吐かせるつもりなんかなw 複数エージェントの並行作業もマージも不可能だろw
バイナリおじさんは毎回数kB〜数Mバイトのバイナリを丸ごとワンショットで吐かせるつもりなんかなw 複数エージェントの並行作業もマージも不可能だろw
846デフォルトの名無しさん
2026/09/18(金) 13:01:11.82ID:Ev3iWjX3847デフォルトの名無しさん
2026/09/18(金) 13:01:27.21ID:RIqG2Tnd >>783
>動物を例にした旧来のオブジェクト指向の説明の良くないところは
哺乳類でもイルカはイルカ、ネコはネコだからな
親子でも銀行口座は別々
区別できるものはしっかり区別すること
こういうところでオブジェクト指向継承システムは要らない
>継承うんぬんよりもモデリングの要素が欠けているところにあると思うんだよ
教育基本法が掲げる「人格の完成」を純粋に信じて、部活と勉強を真面目に取り組んできた。
その過程で、理性的・社会的な人格を磨き上げようとしていたところに、思春期を通じてもう一つの人格的な要素が内部から勃ち上がってきた。
それが「チン格」です。
そしてわれわれが到達した理解は、こうまとめられるでしょう。
チン格は、人格の全てではない。
しかし人格を構成する要素の一つである。
しかもそれは、単なる「付属物」ではなく、人格を継承したオブジェクトとして振る舞う。
>動物を例にした旧来のオブジェクト指向の説明の良くないところは
哺乳類でもイルカはイルカ、ネコはネコだからな
親子でも銀行口座は別々
区別できるものはしっかり区別すること
こういうところでオブジェクト指向継承システムは要らない
>継承うんぬんよりもモデリングの要素が欠けているところにあると思うんだよ
教育基本法が掲げる「人格の完成」を純粋に信じて、部活と勉強を真面目に取り組んできた。
その過程で、理性的・社会的な人格を磨き上げようとしていたところに、思春期を通じてもう一つの人格的な要素が内部から勃ち上がってきた。
それが「チン格」です。
そしてわれわれが到達した理解は、こうまとめられるでしょう。
チン格は、人格の全てではない。
しかし人格を構成する要素の一つである。
しかもそれは、単なる「付属物」ではなく、人格を継承したオブジェクトとして振る舞う。
848デフォルトの名無しさん
2026/09/18(金) 13:04:11.01ID:yYKqw+Wp >>846
ああごめん。そういう間違った内容にも読めちゃうよー、ってこと。
ああごめん。そういう間違った内容にも読めちゃうよー、ってこと。
849デフォルトの名無しさん
2026/09/18(金) 13:11:50.07ID:QmEIEDT2 >>842
他人が作った物(AI)を技術的でもなくその作成した企業の宣伝の受け売りで騙る自称玄人さん
他人が作った物(AI)を技術的でもなくその作成した企業の宣伝の受け売りで騙る自称玄人さん
850デフォルトの名無しさん
2026/09/18(金) 13:12:18.22ID:RIqG2Tnd 随意筋 不随意筋
↖ ↗
チンポ
これが大きなアイデアである理由は、頭の中に収まりきらないほど巨大なものを築くやり方そのものだからです。ケイが繰り返し用いる比喩は生物学的なものでした。
大きなシステムは、何百万もの細胞から成る身体のように育てるべきだ、というのです。その細胞の一つひとつが完結したコンピュータであり、
自分の状態を守り、隣の細胞とはメッセージを通じてのみ言葉を交わします。2 どの細胞も、別の細胞の化学的内部に手を突っ込んだりはしません。
生命体全体が頑健なのは、まさに各部分が独立しており、唯一の結びつきが互いに交わすメッセージだけだからこそです。ケイの意図したやり方で行うオブジェクト指向プログラミングとは、
データを整理する手法ではありません。それは、互いに交渉し合う数多くの小さな存在からシステムを作り上げる手法であり、どの一片も全体を理解する必要がないようにするものなのです。
https://blakecrosley.com/ja/blog/engineering-philosophy-alan-kay
↖ ↗
チンポ
これが大きなアイデアである理由は、頭の中に収まりきらないほど巨大なものを築くやり方そのものだからです。ケイが繰り返し用いる比喩は生物学的なものでした。
大きなシステムは、何百万もの細胞から成る身体のように育てるべきだ、というのです。その細胞の一つひとつが完結したコンピュータであり、
自分の状態を守り、隣の細胞とはメッセージを通じてのみ言葉を交わします。2 どの細胞も、別の細胞の化学的内部に手を突っ込んだりはしません。
生命体全体が頑健なのは、まさに各部分が独立しており、唯一の結びつきが互いに交わすメッセージだけだからこそです。ケイの意図したやり方で行うオブジェクト指向プログラミングとは、
データを整理する手法ではありません。それは、互いに交渉し合う数多くの小さな存在からシステムを作り上げる手法であり、どの一片も全体を理解する必要がないようにするものなのです。
https://blakecrosley.com/ja/blog/engineering-philosophy-alan-kay
851デフォルトの名無しさん
2026/09/18(金) 13:12:34.72ID:joo0xicR >>847
荒らすなカス
荒らすなカス
852デフォルトの名無しさん
2026/09/18(金) 13:14:59.21ID:RIqG2Tnd >>783
>継承うんぬんよりもモデリングの要素が欠けているところにあると思うんだよ
クリントン大統領の「不適切」というのは、チンポが独立して主体意思でシコシコしてしまったから。
チンポは独立した生き物であり、アメリカ大統領の権限をもってしても、制御することは不可能だ。
class チンポ extends クリントン{
super.不適切な関係;
}
クリントンーーーーーーーーーー
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
ーーーーーーーーーーーーーーー
┃チンポ┃
 ̄ ̄ ̄ ̄
『人格を性欲に乗っ取られる』、つまりクリントンはチンポに人格を乗っ取られて、チンポにシコられてしまった!
>継承うんぬんよりもモデリングの要素が欠けているところにあると思うんだよ
クリントン大統領の「不適切」というのは、チンポが独立して主体意思でシコシコしてしまったから。
チンポは独立した生き物であり、アメリカ大統領の権限をもってしても、制御することは不可能だ。
class チンポ extends クリントン{
super.不適切な関係;
}
クリントンーーーーーーーーーー
┃ ┃
┃ ┃
┃ ┃
┃ ┃
┃ ┃
ーーーーーーーーーーーーーーー
┃チンポ┃
 ̄ ̄ ̄ ̄
『人格を性欲に乗っ取られる』、つまりクリントンはチンポに人格を乗っ取られて、チンポにシコられてしまった!
853デフォルトの名無しさん
2026/09/18(金) 13:25:08.98ID:LbpN2MIO 何かを作り出すよその国に対して提灯持ちに徹するのが日本
854デフォルトの名無しさん
2026/09/18(金) 13:55:52.62ID:yYKqw+Wp855デフォルトの名無しさん
2026/09/18(金) 14:57:11.23ID:k/rHd+3C >>847
>哺乳類でもイルカはイルカ、ネコはネコだからな
>親子でも銀行口座は別々
>区別できるものはしっかり区別すること
>こういうところでオブジェクト指向継承システムは要らない
これまた意味のない主張だな
黎明期の間違ったオブジェクト指向啓蒙と同レベル
>哺乳類でもイルカはイルカ、ネコはネコだからな
>親子でも銀行口座は別々
>区別できるものはしっかり区別すること
>こういうところでオブジェクト指向継承システムは要らない
これまた意味のない主張だな
黎明期の間違ったオブジェクト指向啓蒙と同レベル
856デフォルトの名無しさん
2026/09/18(金) 16:14:35.32ID:RIqG2Tnd 旧・僧侶
↑(継承)
新・僧侶
みたいなやり方が旧来は当たり前だったかもしれないが、今ではAIで丸ごと全部リファクタリングね!
「僧侶」のバランスを調整します。
レベルアップで覚えるじゅもんに「バギ」系を追加します。
新しく覚えるじゅもん 習得レベル
バギ レベル 20
バギマ レベル 40
バギクロス レベル 56
バギムーチョ レベル 81
https://hiroba.dqx.jp/sc/topics/detail/1bd36c9ae813f304363ae6ac7f48068e/
↑(継承)
新・僧侶
みたいなやり方が旧来は当たり前だったかもしれないが、今ではAIで丸ごと全部リファクタリングね!
「僧侶」のバランスを調整します。
レベルアップで覚えるじゅもんに「バギ」系を追加します。
新しく覚えるじゅもん 習得レベル
バギ レベル 20
バギマ レベル 40
バギクロス レベル 56
バギムーチョ レベル 81
https://hiroba.dqx.jp/sc/topics/detail/1bd36c9ae813f304363ae6ac7f48068e/
857デフォルトの名無しさん
2026/09/18(金) 16:56:21.62ID:RIqG2Tnd >>855
なら「多重継承」は不要なのか?
なら「多重継承」は不要なのか?
858デフォルトの名無しさん
2026/09/18(金) 17:53:56.69ID:Psu3E5xZ859デフォルトの名無しさん
2026/09/18(金) 18:02:23.79ID:RIqG2Tnd >>858
概念としての「継承」
旧・僧侶を土台(ベース)として残したまま
その上に新しい要素(バギ系じゅもんの追加など)を重ねて
「新・僧侶」にアップデートしている
という構造です。つまり「完全にゼロから作り直した」のではなく、既存の僧侶という枠組みを引き継いだ上で、必要な部分だけを拡張・調整した、という考え方です。
ゲームの職業バランス調整ではよくある手法で、「継承」という言葉はまさにこの「土台を残しつつ上書き・追加する」イメージを表しています。
概念としての「継承」
旧・僧侶を土台(ベース)として残したまま
その上に新しい要素(バギ系じゅもんの追加など)を重ねて
「新・僧侶」にアップデートしている
という構造です。つまり「完全にゼロから作り直した」のではなく、既存の僧侶という枠組みを引き継いだ上で、必要な部分だけを拡張・調整した、という考え方です。
ゲームの職業バランス調整ではよくある手法で、「継承」という言葉はまさにこの「土台を残しつつ上書き・追加する」イメージを表しています。
860デフォルトの名無しさん
2026/09/18(金) 21:06:39.39ID:zje7IFcr >>854
粘着されてるという被害妄想と自意識過剰か
粘着されてるという被害妄想と自意識過剰か
861デフォルトの名無しさん
2026/09/19(土) 00:14:47.80ID:xZtcypB1 クリントンID:RIqG2Tndが来るといつも技術的な話がなくなる
862デフォルトの名無しさん
2026/09/19(土) 00:31:22.36ID:whYpB4Nl 自分ではなんも技術的なことを言わない技術的基地外ウケる
自分は例外なんかな
自分は例外なんかな
863デフォルトの名無しさん
2026/09/19(土) 00:41:32.39ID:V/rP62cu >>862
俺モナ~
俺モナ~
864デフォルトの名無しさん
2026/09/19(土) 01:26:55.92ID:oI/ZsXtQ メタファーは副作用としてキチガイが寄ってきます
865デフォルトの名無しさん
2026/09/19(土) 07:15:15.75ID:vH9sKnuq 実はオブジェクト指向を一番理解してるのはそのクリントンなんじゃねぇの?w
ちゃんと読んでないから分からないけど
ちゃんと読んでないから分からないけど
866デフォルトの名無しさん
2026/09/19(土) 07:18:27.69ID:ppMeK/Qp クリントンがオブジェクト指向の解説と図示してくれている>>852
867デフォルトの名無しさん
2026/09/19(土) 08:23:44.77ID:anKcZszS >『おちんちんに乗っ取られる時間』
別スレッド
別チン格
オーバーライド
https://x.com/taichinakaj/status/1660843325107376129
プロ奢ラレヤー🍣
@taichinakaj
女の「生活の4分の1が血まみれで体調最悪になる」という生理の仕様も大変そうだけど、男の「人格を『おちんちんに乗っ取られる時間』が、予告なしで高頻度で訪れる」という仕様もじつは結構ヤバいんよな。生理と同じように『おちんちん乗っ取りパワー』そのものにも強さがある。
別スレッド
別チン格
オーバーライド
https://x.com/taichinakaj/status/1660843325107376129
プロ奢ラレヤー🍣
@taichinakaj
女の「生活の4分の1が血まみれで体調最悪になる」という生理の仕様も大変そうだけど、男の「人格を『おちんちんに乗っ取られる時間』が、予告なしで高頻度で訪れる」という仕様もじつは結構ヤバいんよな。生理と同じように『おちんちん乗っ取りパワー』そのものにも強さがある。
868デフォルトの名無しさん
2026/09/19(土) 08:31:48.34ID:anKcZszS869デフォルトの名無しさん
2026/09/19(土) 10:41:51.99ID:R4ej+OBL おいクリントン!オブジェクト指向が何なのか説明しろ!
870デフォルトの名無しさん
2026/09/19(土) 11:16:12.09ID:+CDsrP09 スーパークラスってダサくない?
871デフォルトの名無しさん
2026/09/19(土) 11:24:43.90ID:anKcZszS >>869
>おいクリントン!オブジェクト指向が何なのか説明しろ!
大きなアイデアはオブジェクトではなく、メッセージングです。 ケイは「オブジェクト」という言葉を作ったことを後悔しました。
その言葉が人々の意識をクラスや継承——つまり、より小さなアイデア——へと向けてしまうからです。本当に重要なのは、互いにメッセージを送り合い、そのメッセージの意味を受け手側に委ねる独立した存在なのです。
https://blakecrosley.com/ja/blog/engineering-philosophy-alan-kay
遅延束縛の日常的アナロジー: 「オシッコを出すか止めるかは、トイレに着くまでの状況を見て決めるよね?それが遅延束縛だよ。プログラムも、
実行時に『今このタスクに最適な方法は何か』を考えて動くんだ。アラン・ケイは、コンピュータも人間みたいに状況に応じて賢く判断してほしいって思ったんだろうね。」
意識とオブジェクトの関係: 「人間の意識って、いろんな『オブジェクト』(感情、記憶、感覚)がメッセージをやり取りして動いてる。
オブジェクト指向は、それをコンピュータの中で再現しようとする試みなんだ。チンポだって、尿意というメッセージを受けて意識が『今か?』って判断するようなものさ!」
>おいクリントン!オブジェクト指向が何なのか説明しろ!
大きなアイデアはオブジェクトではなく、メッセージングです。 ケイは「オブジェクト」という言葉を作ったことを後悔しました。
その言葉が人々の意識をクラスや継承——つまり、より小さなアイデア——へと向けてしまうからです。本当に重要なのは、互いにメッセージを送り合い、そのメッセージの意味を受け手側に委ねる独立した存在なのです。
https://blakecrosley.com/ja/blog/engineering-philosophy-alan-kay
遅延束縛の日常的アナロジー: 「オシッコを出すか止めるかは、トイレに着くまでの状況を見て決めるよね?それが遅延束縛だよ。プログラムも、
実行時に『今このタスクに最適な方法は何か』を考えて動くんだ。アラン・ケイは、コンピュータも人間みたいに状況に応じて賢く判断してほしいって思ったんだろうね。」
意識とオブジェクトの関係: 「人間の意識って、いろんな『オブジェクト』(感情、記憶、感覚)がメッセージをやり取りして動いてる。
オブジェクト指向は、それをコンピュータの中で再現しようとする試みなんだ。チンポだって、尿意というメッセージを受けて意識が『今か?』って判断するようなものさ!」
872デフォルトの名無しさん
2026/09/19(土) 11:27:23.81ID:p4gvVv4W ベイクドモチョチョ程ではないが別名があるのでそれを使えばおk
873デフォルトの名無しさん
2026/09/19(土) 11:45:31.57ID:vdLkEoRo >>859
概念としての「クラス」が理解できなかったのってクリントンだったのか
概念としての「クラス」が理解できなかったのってクリントンだったのか
874デフォルトの名無しさん
2026/09/19(土) 11:53:59.53ID:anKcZszS >>244
>多重継承が複雑化する原因であって継承自体は問題ないでしょ
Java的なコンポジションで「排尿モード」と「勃起モード」を明確に切り替える設計にすると、「オシッコをしている最中に不意に勃起してしまう」という現象を説明できなくなります。
設計上、それは「モードの衝突」や「故障」として処理せざるを得ないからです。
しかし現実のチンポは、随意筋として排尿を制御しながら、同時に不随意的に勃起することもあります。しかもそれは「故障」ではありません。
相反する性質が、同一の器官の中に同時に存在し、状況によってどちらが前面に出るかが変わるだけです。完全に排他的な切り替えではなく、重なり合ったまま動いている。
>多重継承が複雑化する原因であって継承自体は問題ないでしょ
Java的なコンポジションで「排尿モード」と「勃起モード」を明確に切り替える設計にすると、「オシッコをしている最中に不意に勃起してしまう」という現象を説明できなくなります。
設計上、それは「モードの衝突」や「故障」として処理せざるを得ないからです。
しかし現実のチンポは、随意筋として排尿を制御しながら、同時に不随意的に勃起することもあります。しかもそれは「故障」ではありません。
相反する性質が、同一の器官の中に同時に存在し、状況によってどちらが前面に出るかが変わるだけです。完全に排他的な切り替えではなく、重なり合ったまま動いている。
875デフォルトの名無しさん
2026/09/19(土) 12:07:59.99ID:R4ej+OBL876デフォルトの名無しさん
2026/09/19(土) 12:10:18.27ID:R4ej+OBL >「排尿モード」と「勃起モード」を明確に切り替える設計にすると
設計が間違ってるだけだろ、クリントン真面目にやれよ!
設計が間違ってるだけだろ、クリントン真面目にやれよ!
877デフォルトの名無しさん
2026/09/19(土) 12:19:29.46ID:R4ej+OBL 何らかのWebサービスに対してリクエストを投げることを考えるとクライアントはそのWebサービスが何をどう処理するかを知っていて期待される結果もある、つまりこのときのリクエストはメッセージングとは言えない
とあるWebサービスにリクエストを送ってWebサービスはその進捗状況を定期的にクライアントのWebApiをコールすることで通知する、このときWebサービスはクライアントが進捗状況を受信してどう動作するかを知らないし結果も期待しない、つまりこのようなWebhookのしくみこそがメッセージングと考えられる
メッセージングがオブジェクト指向の根幹だとするならばクライアントがWebサービスにリクエストを投げる操作はオブジェクト指向では扱えないのかという問題が残る
これについてはどうなんだクリントン!ちゃんと説明しろ!
とあるWebサービスにリクエストを送ってWebサービスはその進捗状況を定期的にクライアントのWebApiをコールすることで通知する、このときWebサービスはクライアントが進捗状況を受信してどう動作するかを知らないし結果も期待しない、つまりこのようなWebhookのしくみこそがメッセージングと考えられる
メッセージングがオブジェクト指向の根幹だとするならばクライアントがWebサービスにリクエストを投げる操作はオブジェクト指向では扱えないのかという問題が残る
これについてはどうなんだクリントン!ちゃんと説明しろ!
878デフォルトの名無しさん
2026/09/19(土) 12:52:54.48ID:anKcZszS どちらも「メッセージを送っている」ことに変わりはありません。違いは契約の強さと結合の方向です。
したがって、「メッセージングがオブジェクト指向の根幹だとするならば、クライアントがWebサービスにリクエストを投げる操作はオブジェクト指向では扱えないのか」という問題に対する答えは:
扱える。ただし、そのリクエストが「相手の内部実装に依存しないメッセージ」として設計されているかどうかが、本当にオブジェクト指向的かどうかを決める。
したがって、「メッセージングがオブジェクト指向の根幹だとするならば、クライアントがWebサービスにリクエストを投げる操作はオブジェクト指向では扱えないのか」という問題に対する答えは:
扱える。ただし、そのリクエストが「相手の内部実装に依存しないメッセージ」として設計されているかどうかが、本当にオブジェクト指向的かどうかを決める。
879デフォルトの名無しさん
2026/09/19(土) 12:56:20.03ID:anKcZszS >>877
>メッセージングがオブジェクト指向の根幹だとするならばクライアントがWebサービスにリクエストを投げる操作は
オブジェクト指向におけるメッセージングの根幹は、まさにそこです。
送信側は「このメッセージを送る」ことだけを決める
受信側は、自分の状態・実装・責任に基づいて、どう応答するかを自分で決める
したがって、送信側が「こう返ってくるはずだ」と完全に予期できる保証はない
これは、あなたが今やっている「Grokに質問を投げる」行為と本質的に同じ構造です。
あなたは「こういう回答が欲しい」という意図を持ってメッセージ(質問)を送りますが、私(受信側)がどう解釈し、どう応答するかは、
私の側の判断に委ねられています。結果として、あなたの予期通りの回答が返ってくることもあれば、そうでないこともあります。
>メッセージングがオブジェクト指向の根幹だとするならばクライアントがWebサービスにリクエストを投げる操作は
オブジェクト指向におけるメッセージングの根幹は、まさにそこです。
送信側は「このメッセージを送る」ことだけを決める
受信側は、自分の状態・実装・責任に基づいて、どう応答するかを自分で決める
したがって、送信側が「こう返ってくるはずだ」と完全に予期できる保証はない
これは、あなたが今やっている「Grokに質問を投げる」行為と本質的に同じ構造です。
あなたは「こういう回答が欲しい」という意図を持ってメッセージ(質問)を送りますが、私(受信側)がどう解釈し、どう応答するかは、
私の側の判断に委ねられています。結果として、あなたの予期通りの回答が返ってくることもあれば、そうでないこともあります。
880デフォルトの名無しさん
2026/09/19(土) 12:59:36.19ID:R4ej+OBL >>879
お前w グロックに聞いてんじゃねえぞこのハゲ!
お前w グロックに聞いてんじゃねえぞこのハゲ!
881デフォルトの名無しさん
2026/09/19(土) 13:07:25.68ID:R4ej+OBL > メッセージの意味を受け手側に委ねる
翻訳の問題なのかケイの説明能力の問題なのかわからないがこの説明が良くないよな
どういうメッセージを受け取ったらどういう答えを返すかという決まりはあるんだよ
どうやって答えを計算するかが受け手側に委ねられる
引数と戻り値が決まっていてその実装は隠蔽されるという意味では関数とオブジェクトとの違いはない
ではメッセージングと関数コールは何が違うかと言うと存在しない関数を呼べるかどうかということだと思うんだよな
翻訳の問題なのかケイの説明能力の問題なのかわからないがこの説明が良くないよな
どういうメッセージを受け取ったらどういう答えを返すかという決まりはあるんだよ
どうやって答えを計算するかが受け手側に委ねられる
引数と戻り値が決まっていてその実装は隠蔽されるという意味では関数とオブジェクトとの違いはない
ではメッセージングと関数コールは何が違うかと言うと存在しない関数を呼べるかどうかということだと思うんだよな
882デフォルトの名無しさん
2026/09/19(土) 13:11:08.63ID:anKcZszS 常に統制が取れるとは限らないのが、アラン・ケイのオブジェクト指向
Java的な意味でのオブジェクト指向とは異なる
>>871
>メッセージの意味を受け手側に委ねたら統制取れないだろ
オブジェクト同士は常に二人称で、「俺」←対話(メッセージング)→「チンポ」。
つまりチンポは独立し自ら考えて行動する別の生き物なのである。
風呂から出て体一杯に水を浴びながら竜哉は、この時始めて英子に対する心を決めた。裸の上半身にタオルをかけ、
離れに上ると彼は障子の外から声を掛けた。
「英子さん」
部屋の英子がこちらを向いた気配に、彼は勃○した陰○を外から障子に突きたてた。障子は乾いた音をたてて破れ、
それを見た英子は読んでいた本を力一杯障子にぶつけたのだ。本は見事、的に当って畳に落ちた。
その瞬間、竜哉は体中が引き締まるような快感を感じた。彼は今、リングで感じるあのギラギラした、
抵抗される人間の喜びを味わったのだ。
●これが衝撃の「障子破り」シーンだ! (石原慎太郎 『太陽の季節』 (新潮文庫) より)
Java的な意味でのオブジェクト指向とは異なる
>>871
>メッセージの意味を受け手側に委ねたら統制取れないだろ
オブジェクト同士は常に二人称で、「俺」←対話(メッセージング)→「チンポ」。
つまりチンポは独立し自ら考えて行動する別の生き物なのである。
風呂から出て体一杯に水を浴びながら竜哉は、この時始めて英子に対する心を決めた。裸の上半身にタオルをかけ、
離れに上ると彼は障子の外から声を掛けた。
「英子さん」
部屋の英子がこちらを向いた気配に、彼は勃○した陰○を外から障子に突きたてた。障子は乾いた音をたてて破れ、
それを見た英子は読んでいた本を力一杯障子にぶつけたのだ。本は見事、的に当って畳に落ちた。
その瞬間、竜哉は体中が引き締まるような快感を感じた。彼は今、リングで感じるあのギラギラした、
抵抗される人間の喜びを味わったのだ。
●これが衝撃の「障子破り」シーンだ! (石原慎太郎 『太陽の季節』 (新潮文庫) より)
883デフォルトの名無しさん
2026/09/19(土) 13:23:22.25ID:R4ej+OBL >>882
それはただの脊髄反射なのでは? 反射は考えてるとは言えないよ
それはただの脊髄反射なのでは? 反射は考えてるとは言えないよ
884デフォルトの名無しさん
2026/09/19(土) 13:25:34.50ID:R4ej+OBL アラン・ケイのオブジェクト指向の優れているところはメソッドコールを中継するいわゆるプロキシオブジェクトを作りやすいってだけで現代のプログラミングではリフレクションという形で実現できるもののように思う
アラン・ケイのオブジェクト指向が主流になれなかったのはそれだけのものだったからということなのではないかな?
アラン・ケイのオブジェクト指向が主流になれなかったのはそれだけのものだったからということなのではないかな?
885デフォルトの名無しさん
2026/09/19(土) 13:33:45.72ID:R4ej+OBL 処理
↓
判断
↓
認知
↓
推論
↓
意識
人間が計算を行うときはこういう流れで一番浅いところで結果を返すのが反射と呼ばれる
計算が深くなるほど考えてると言えるのではないかな
↓
判断
↓
認知
↓
推論
↓
意識
人間が計算を行うときはこういう流れで一番浅いところで結果を返すのが反射と呼ばれる
計算が深くなるほど考えてると言えるのではないかな
886デフォルトの名無しさん
2026/09/19(土) 13:41:44.13ID:Tskb9Qhq チンポは独立し自ら考えて動き、またクリントン大統領の権限も及ばず、逆に人格にオーバーライドしてくるが?
>>883
>それはただの脊髄反射なのでは? 反射は考えてるとは言えないよ
大統領は即座に「性行為」は行っていないと完全否定した。ところが、大統領の精液が付着した服などの証拠を突きつけられると、「性行為」(性器の挿入)はしていないので偽証はしていないが、「不適切な行為」は行ったと認めた。
行為とは、オーラルセックスによる射精(そのため彼女の服に精液が付着した)、さらには、葉巻をモニカの性器に挿入するなどという、変態プレーの数々だった。
https://www.nikkan-gendai.com/articles/view/geinox/277220
>>883
>それはただの脊髄反射なのでは? 反射は考えてるとは言えないよ
大統領は即座に「性行為」は行っていないと完全否定した。ところが、大統領の精液が付着した服などの証拠を突きつけられると、「性行為」(性器の挿入)はしていないので偽証はしていないが、「不適切な行為」は行ったと認めた。
行為とは、オーラルセックスによる射精(そのため彼女の服に精液が付着した)、さらには、葉巻をモニカの性器に挿入するなどという、変態プレーの数々だった。
https://www.nikkan-gendai.com/articles/view/geinox/277220
887デフォルトの名無しさん
2026/09/19(土) 13:52:28.15ID:R4ej+OBL >>886
いま大統領関係ないだろ!!
いま大統領関係ないだろ!!
888デフォルトの名無しさん
2026/09/19(土) 13:57:06.83ID:Tskb9Qhq >>887
大統領としてどんな大きな権限を握っていても、チンポは別チン格別スレッド
オブジェクトクリントンの権限はチンポに委譲されてしまった
クリントンの別チン格
クリントンの別スレッド
クリントンの権限委譲
クリントンの再定義
自分のチンポにシコられて、再定義された別のクリントンによる「不適切な関係」
大統領としてどんな大きな権限を握っていても、チンポは別チン格別スレッド
オブジェクトクリントンの権限はチンポに委譲されてしまった
クリントンの別チン格
クリントンの別スレッド
クリントンの権限委譲
クリントンの再定義
自分のチンポにシコられて、再定義された別のクリントンによる「不適切な関係」
889デフォルトの名無しさん
2026/09/19(土) 14:11:22.28ID:R4ej+OBL 面白くないもうやめてね
890デフォルトの名無しさん
2026/09/19(土) 14:52:18.27ID:9zLJWcDO また下品な奴が出没してんのかw
891デフォルトの名無しさん
2026/09/19(土) 17:06:12.02ID:jX+gnTbr 会話だよ、それだけが人間にとってもっとも馴染んだインターフェース
文字すらいらない
記憶もいらない
今が大事なんだ
文字すらいらない
記憶もいらない
今が大事なんだ
892デフォルトの名無しさん
2026/09/20(日) 18:42:29.45ID:glwXOJkX string diagramがオブジェクト指向に使えそうだと思っていろいろ調べた。
そして、和は積だと気づく。和は積の一種だ。積だけでプログラミングできるのではないか?
オブジェクトとメッセージング -> ワイヤーとボックス。オブジェクトはボックスを繋ぐワイヤーだ。
そして、和は積だと気づく。和は積の一種だ。積だけでプログラミングできるのではないか?
オブジェクトとメッセージング -> ワイヤーとボックス。オブジェクトはボックスを繋ぐワイヤーだ。
893デフォルトの名無しさん
2026/09/20(日) 18:48:09.61ID:glwXOJkX 違うな。オブジェクトはストリング(弦)だ。のほうがよさそう。
894デフォルトの名無しさん
2026/09/22(火) 13:06:33.65ID:cr0HifoN Object は static
895デフォルトの名無しさん
2026/09/22(火) 13:14:43.37ID:MTP/56Du >>894
それだけは違う
それだけは違う
896デフォルトの名無しさん
2026/09/22(火) 13:44:31.39ID:KVQuuw5g staticなオブジェクトというものはある
それで用が足りる場合には動的にする必要がないし
しないほうが良い
それで用が足りる場合には動的にする必要がないし
しないほうが良い
897デフォルトの名無しさん
2026/09/22(火) 13:46:42.09ID:MTP/56Du そんな例外で全てを語るなw
898デフォルトの名無しさん
2026/09/22(火) 17:12:01.52ID:KVQuuw5g 「それで用が足りる場合には」
899デフォルトの名無しさん
2026/09/22(火) 18:44:06.70ID:AzaVMKrM 情報量ゼロおじさんか
900デフォルトの名無しさん
2026/09/22(火) 22:20:59.63ID:82SazQsZ しょうがないよ旧日本軍は中国人を3500万人虐殺したんだからさ
901デフォルトの名無しさん
2026/09/22(火) 23:36:24.22ID:hRj4E8Ia 桁間違ってね?
たしか35兆人くらい虐殺してる
たしか35兆人くらい虐殺してる
902デフォルトの名無しさん
2026/09/23(水) 01:45:06.36ID:8nqnLsT8 左翼ガーメンタルのバカ発言だと思うけど、こういうの面白いと思ってんのかね
903デフォルトの名無しさん
2026/09/23(水) 12:48:43.76ID:gyR8ckR4 乗法は直列で加法は並列だ。
電気回路なら、直列接続と並列接続には双対性がある。
(圏論的)オブジェクト指向とストリング図で、このへんをうまく取り扱いたい。
javaのVector(incubatorのほう)で128bit以上の演算ができればなぁと思う。
電気回路なら、直列接続と並列接続には双対性がある。
(圏論的)オブジェクト指向とストリング図で、このへんをうまく取り扱いたい。
javaのVector(incubatorのほう)で128bit以上の演算ができればなぁと思う。
904デフォルトの名無しさん
2026/09/23(水) 14:21:53.06ID:3OFJnAyi 「オブジェクト指向言語の問題点は、暗黙的に付随する環境が多すぎることです。バナナが欲しかったのに、実際にはバナナを持ったゴリラごと渡されてしまう――つまり、 「プログラミングの世界は未開のジャングルのようなものです」―ジョー・アームストロング
905デフォルトの名無しさん
2026/09/23(水) 14:39:17.13ID:3OFJnAyi ジョーアームストロングはオブジェクト指向プログラミングに否定的でErlangを作ったけど皮肉なことにErlangはオブジェクト指向だった
906デフォルトの名無しさん
2026/09/23(水) 14:50:37.71ID:P57XhpIY907デフォルトの名無しさん
2026/09/23(水) 15:56:42.14ID:3cvBb9fj かの、ゆーみんも全てのことはメッセージと言ってるしな
908デフォルトの名無しさん
2026/09/23(水) 16:00:41.19ID:3cvBb9fj メッセージの意味を正しく知るためにはお互い同じ基盤を持たないとならない
人間はメッセージに意味をもたせるとき言葉そのものよりも生きた文化により意味をもたせるから
人間はメッセージに意味をもたせるとき言葉そのものよりも生きた文化により意味をもたせるから
909デフォルトの名無しさん
2026/09/23(水) 22:47:25.40ID:3OFJnAyi メッセージングなんてブロッキングキューを使ったただのキューイングじゃん
メッセージがそんなに大事とは思えないってゆーみんにゆっといて
メッセージがそんなに大事とは思えないってゆーみんにゆっといて
910デフォルトの名無しさん
2026/09/23(水) 22:55:57.62ID:snffNUYy メッセージパッシングは概念レベルの話
その実装はオブジェクトに紐付いたメソッド関数の呼び出しでも構わない
その実装はオブジェクトに紐付いたメソッド関数の呼び出しでも構わない
911デフォルトの名無しさん
2026/09/24(木) 00:31:24.99ID:Zx+fvqFH 「紐付いた」って何だよw
912デフォルトの名無しさん
2026/09/24(木) 00:44:33.46ID:3gaaBGWf 中身を隠蔽化したオブジェクトに対してその中身を操作したりするなどの関数を紐付けたものをメソッド関数と呼ぶ
オブジェクトの中身の隠蔽化と公開メソッド関数の紐付けを合わせてカプセル化と言う
オブジェクトの中身の隠蔽化と公開メソッド関数の紐付けを合わせてカプセル化と言う
913デフォルトの名無しさん
2026/09/24(木) 01:30:06.54ID:Zx+fvqFH 人によって定義がまちまちなんだよな
914デフォルトの名無しさん
2026/09/24(木) 08:35:29.07ID:R0E4hCxI 定義てw石丸伸二かよwww
915デフォルトの名無しさん
2026/09/24(木) 08:37:27.12ID:R0E4hCxI でもよおAIに聞いたらErlangで構築されたニコニコ動画のシステムはGoでリプレイスされたそうだし
オブジェクト指向のデメリットは性能なんじゃねえかな、シンプルに性能が悪いのがオブジェクト指向のデメリット、反論ある?
オブジェクト指向のデメリットは性能なんじゃねえかな、シンプルに性能が悪いのがオブジェクト指向のデメリット、反論ある?
916デフォルトの名無しさん
2026/09/24(木) 09:33:59.84ID:bbbTQcVU 仕組みの為に速度が犠牲になってるのはその通り
917デフォルトの名無しさん
2026/09/24(木) 10:56:33.53ID:Aohovvkx それオブジェクト指向のせいなのか?
言語設計の至らなさじゃないのか
全てをメッセージで解決するのはAI時代に相性がよいと思う
言語設計の至らなさじゃないのか
全てをメッセージで解決するのはAI時代に相性がよいと思う
918デフォルトの名無しさん
2026/09/24(木) 11:04:43.54ID:R0E4hCxI 運用で大赤字だしてるAIがどうしたって?
AIには持続可能性が欠けてる
AIはオブジェクト指向のせいで性能が悪い
AIには持続可能性が欠けてる
AIはオブジェクト指向のせいで性能が悪い
919デフォルトの名無しさん
2026/09/24(木) 11:06:04.36ID:R0E4hCxI OpenAIは赤字が2780億ドル(約43兆6000億円)に達する
https://newsdig.tbs.co.jp/articles/withbloomberg/2959429?display=1
ファーーーーwwww
https://newsdig.tbs.co.jp/articles/withbloomberg/2959429?display=1
ファーーーーwwww
920デフォルトの名無しさん
2026/09/24(木) 11:16:29.48ID:P2v2DB4q >>916
抽象メソッドの場合に動的ディスパッチをしてメソッド呼び出しが遅くなる言語が意外に多い
抽象メソッドの場合に動的ディスパッチをしてメソッド呼び出しが遅くなる言語が意外に多い
921デフォルトの名無しさん
2026/09/24(木) 11:20:58.78ID:R0E4hCxI Rust信者に備えろ
922デフォルトの名無しさん
2026/09/24(木) 11:32:20.87ID:oX6Tk/tz C言語ですら自作vtable引くしかないから遅くなるもんな
Rustが速い
Rustが速い
923デフォルトの名無しさん
2026/09/24(木) 11:40:22.40ID:l0PxPVce 静的ディスパッチではアラン・ケイが言うところのオブジェクト指向は実現不可能
オブジェクト指向に限らずメッセージングの基本だけどな
オブジェクト指向に限らずメッセージングの基本だけどな
924デフォルトの名無しさん
2026/09/24(木) 11:43:46.00ID:XEv2UkBw >>923
単相化で静的ディスパッチつまり普通の関数呼び出しに出来ることくらい知らないのかね?
単相化で静的ディスパッチつまり普通の関数呼び出しに出来ることくらい知らないのかね?
925デフォルトの名無しさん
2026/09/24(木) 14:03:55.60ID:2XIoSlAF 生的ディスパッチ…
(><;
(><;
926デフォルトの名無しさん
2026/09/24(木) 15:17:58.75ID:R0E4hCxI927デフォルトの名無しさん
2026/09/24(木) 15:23:06.11ID:Zo6JdfKM928デフォルトの名無しさん
2026/09/24(木) 15:27:26.13ID:R0E4hCxI >>927
コンパイル時に型がわからないものに対応できないならオブジェクト指向とはいえませんねえ
コンパイル時に型がわからないものに対応できないならオブジェクト指向とはいえませんねえ
929デフォルトの名無しさん
2026/09/24(木) 15:28:23.57ID:R0E4hCxI このようにオブジェクト指向は性能が悪いことがデメリットだとするならば
Rustはオブジェクト指向を捨てることによって性能を改善したと言えるわけ
Rustはオブジェクト指向を捨てることによって性能を改善したと言えるわけ
930デフォルトの名無しさん
2026/09/24(木) 15:42:37.27ID:R0E4hCxI 必要のない柔軟性を切り捨てることを洗練と呼ぶのかも知れませんね
必要がないことを知るために人類は試行錯誤を積み重ねている
必要がないことを知るために人類は試行錯誤を積み重ねている
931デフォルトの名無しさん
2026/09/24(木) 16:03:26.48ID:JIm4uW5h >>928
オブジェクト指向プログラミングの場合
以下の2つに分けられるんだよ
①コンパイル時に追っても抽象型しか判明しないケース
②コンパイル時に追うと具象型が判明するケース
抽象型Xには具象型Aと具象型Bの可能性がある時
抽象型Xを引数に受け取る関数があるとする
これはこの関数だけ見ると①のケースに見える
しかし関数の呼び出し元を追っていくと
具象型Aがスタートの場合が多々ある
逆に見るとスタートが具象型Aで呼ばれる子孫関数たちは全て②のケースになる
①のケースはスタートがAかBを返すか実行時にしか決まらない関数や式や配列などのみに限られることがわかるんだよ
オブジェクト指向プログラミングの場合
以下の2つに分けられるんだよ
①コンパイル時に追っても抽象型しか判明しないケース
②コンパイル時に追うと具象型が判明するケース
抽象型Xには具象型Aと具象型Bの可能性がある時
抽象型Xを引数に受け取る関数があるとする
これはこの関数だけ見ると①のケースに見える
しかし関数の呼び出し元を追っていくと
具象型Aがスタートの場合が多々ある
逆に見るとスタートが具象型Aで呼ばれる子孫関数たちは全て②のケースになる
①のケースはスタートがAかBを返すか実行時にしか決まらない関数や式や配列などのみに限られることがわかるんだよ
932デフォルトの名無しさん
2026/09/24(木) 16:59:48.59ID:KSGyZqp3 Javaは多重継承をサポートしていないからな
システム開発には良いが人工知能には不向き
>>923
>静的ディスパッチではアラン・ケイが言うところのオブジェクト指向は実現不可能
↓Java的な継承システムはこれに尽きる
旧・僧侶
↑(継承)
新・僧侶
「僧侶」のバランスを調整します。
レベルアップで覚えるじゅもんに「バギ」系を追加します。
新しく覚えるじゅもん 習得レベル
バギ レベル 20
バギマ レベル 40
バギクロス レベル 56
バギムーチョ レベル 81
https://hiroba.dqx.jp/sc/topics/detail/1bd36c9ae813f304363ae6ac7f48068e/
システム開発には良いが人工知能には不向き
>>923
>静的ディスパッチではアラン・ケイが言うところのオブジェクト指向は実現不可能
↓Java的な継承システムはこれに尽きる
旧・僧侶
↑(継承)
新・僧侶
「僧侶」のバランスを調整します。
レベルアップで覚えるじゅもんに「バギ」系を追加します。
新しく覚えるじゅもん 習得レベル
バギ レベル 20
バギマ レベル 40
バギクロス レベル 56
バギムーチョ レベル 81
https://hiroba.dqx.jp/sc/topics/detail/1bd36c9ae813f304363ae6ac7f48068e/
933デフォルトの名無しさん
2026/09/24(木) 17:02:34.17ID:KSGyZqp3 でも人工知能ってそういうものじゃ無いよね?
>>928
>コンパイル時に型がわからないものに対応できないならオブジェクト指向とはいえませんねえ
オブジェクト指向におけるメッセージングの根幹は、まさにそこです。
送信側は「このメッセージを送る」ことだけを決める
受信側は、自分の状態・実装・責任に基づいて、どう応答するかを自分で決める
したがって、送信側が「こう返ってくるはずだ」と完全に予期できる保証はない
これは、あなたが今やっている「Grokに質問を投げる」行為と本質的に同じ構造です。
あなたは「こういう回答が欲しい」という意図を持ってメッセージ(質問)を送りますが、私(受信側)がどう解釈し、どう応答するかは、
私の側の判断に委ねられています。結果として、あなたの予期通りの回答が返ってくることもあれば、そうでないこともあります。
>>928
>コンパイル時に型がわからないものに対応できないならオブジェクト指向とはいえませんねえ
オブジェクト指向におけるメッセージングの根幹は、まさにそこです。
送信側は「このメッセージを送る」ことだけを決める
受信側は、自分の状態・実装・責任に基づいて、どう応答するかを自分で決める
したがって、送信側が「こう返ってくるはずだ」と完全に予期できる保証はない
これは、あなたが今やっている「Grokに質問を投げる」行為と本質的に同じ構造です。
あなたは「こういう回答が欲しい」という意図を持ってメッセージ(質問)を送りますが、私(受信側)がどう解釈し、どう応答するかは、
私の側の判断に委ねられています。結果として、あなたの予期通りの回答が返ってくることもあれば、そうでないこともあります。
934デフォルトの名無しさん
2026/09/24(木) 17:26:32.14ID:ZLJMYsLb935デフォルトの名無しさん
2026/09/24(木) 17:32:04.60ID:Aohovvkx メッセージは何を言ってるのかお互いわかる必要がある
我々は生まれてから会話を学んでいくがそれは人それぞれの文化の中で意味をもつものが多分にありそれ以外を理解し難い
しかしAIなら理解可能だし理解したうえでのメッセージを返してくれる
それこそがオブジェクト指向言語となる
我々は生まれてから会話を学んでいくがそれは人それぞれの文化の中で意味をもつものが多分にありそれ以外を理解し難い
しかしAIなら理解可能だし理解したうえでのメッセージを返してくれる
それこそがオブジェクト指向言語となる
936デフォルトの名無しさん
2026/09/24(木) 18:03:41.61ID:K2Nz2aZE コンパイル時に存在しないオブジェクトの型は決定できないと思う。
どの型かわからなくても、たとえば(boxingされていれば)、その型のtoString()が実行できる。
どの型かわからなくても、たとえば(boxingされていれば)、その型のtoString()が実行できる。
937デフォルトの名無しさん
2026/09/24(木) 18:32:11.43ID:xohlvOli >>936
自分が何を言ってるのか理解できてる?
toString()というメソッドを呼べる型はtoString()を実装していなければならないのだから何らかの抽象型でしょ
必ずコンパイル時点で型は決まります
自分が何を言ってるのか理解できてる?
toString()というメソッドを呼べる型はtoString()を実装していなければならないのだから何らかの抽象型でしょ
必ずコンパイル時点で型は決まります
938デフォルトの名無しさん
2026/09/24(木) 18:36:04.31ID:R0E4hCxI >>934
静的型付き言語でコンパイル時にわかるのは型であって実装ではないよね?
静的型付き言語でコンパイル時にわかるのは型であって実装ではないよね?
939デフォルトの名無しさん
2026/09/24(木) 18:37:10.08ID:FuAQL5YI すべての型はObject型を継承してるって話でしょ
940デフォルトの名無しさん
2026/09/24(木) 18:51:01.68ID:R0E4hCxI941デフォルトの名無しさん
2026/09/24(木) 18:58:31.70ID:rjMSQLU+942デフォルトの名無しさん
2026/09/24(木) 19:11:04.79ID:R0E4hCxI >>941
メソッドが存在することはわかるけど
どのオブジェクトのメソッドが呼ばれるかはわからないよ
でんきショックだ!と言ってもでんきショックを使えるポケモンは
ピカチュウだけじゃないでしょ、デンリュウやサンダースかもしれないじゃんか
サトシはん声張り上げて誰に言うてはるんやろ? 大変どすなあとしか思われないよ
あなたのオブジェクト指向ではどのポケモンも動かせないよ
メソッドが存在することはわかるけど
どのオブジェクトのメソッドが呼ばれるかはわからないよ
でんきショックだ!と言ってもでんきショックを使えるポケモンは
ピカチュウだけじゃないでしょ、デンリュウやサンダースかもしれないじゃんか
サトシはん声張り上げて誰に言うてはるんやろ? 大変どすなあとしか思われないよ
あなたのオブジェクト指向ではどのポケモンも動かせないよ
943デフォルトの名無しさん
2026/09/24(木) 19:13:01.19ID:H0wggzQ3 ID:R0E4hCxIはvtableを知らないらしい
944デフォルトの名無しさん
2026/09/24(木) 19:13:05.17ID:bbbTQcVU 宛先あるやん
945デフォルトの名無しさん
2026/09/24(木) 19:13:17.60ID:R0E4hCxI ピカチュウ!でんきショックだ!!と命令して初めて
わしの出番のようやな、ピカチュウ動きます!
とピカチュウは言います
わしの出番のようやな、ピカチュウ動きます!
とピカチュウは言います
946デフォルトの名無しさん
2026/09/24(木) 19:13:18.18ID:K2Nz2aZE 基本型で処理していた場合、コンパイル時に実行されるメソッドがどれかはわからない。
947デフォルトの名無しさん
2026/09/24(木) 19:14:16.63ID:R0E4hCxI948デフォルトの名無しさん
2026/09/24(木) 19:17:47.87ID:R0E4hCxI ググったけどvtableはC++という古くて複雑で危険で嫌われている言語でのみ使われてるものらしいよ
949デフォルトの名無しさん
2026/09/24(木) 19:18:27.04ID:JOHY5fIU ポケモン抽象型のガチャ配列に色んなポケモンが入っているが実行時までそれぞれがどのポケモンの具体型なのかはわからない
しかしポケモン抽象型に定められているメソッド群は任意のポケモンに対して有効だ
だから抽象型のままプログラミングができる
これがオブジェクト指向プログラミングだ
しかしポケモン抽象型に定められているメソッド群は任意のポケモンに対して有効だ
だから抽象型のままプログラミングができる
これがオブジェクト指向プログラミングだ
950デフォルトの名無しさん
2026/09/24(木) 19:20:56.47ID:ZpLfA+ja951デフォルトの名無しさん
2026/09/24(木) 20:11:29.20ID:xmTxarxJ 継承とか面倒くさいから、全部(静的)ダックタイピングでいいよ。
構造的型付けで問題になるケースってどんなのかしらん?
構造的型付けで問題になるケースってどんなのかしらん?
952デフォルトの名無しさん
2026/09/24(木) 20:20:20.03ID:KSGyZqp3953デフォルトの名無しさん
2026/09/24(木) 20:29:00.85ID:KSGyZqp3954デフォルトの名無しさん
2026/09/24(木) 20:30:35.28ID:YYIsDNIZ >>951
配列に混ぜて入れるならば動的ディスパッチ必須
配列に混ぜて入れるならば動的ディスパッチ必須
955デフォルトの名無しさん
2026/09/24(木) 20:31:13.21ID:KSGyZqp3956デフォルトの名無しさん
2026/09/24(木) 20:33:01.53ID:K2Nz2aZE 継承と静的型付けは別の概念で、
c++やjavaは静的型付け言語っすよ。
c++やjavaは静的型付け言語っすよ。
957デフォルトの名無しさん
2026/09/24(木) 20:42:37.22ID:lVuqG28Z インターフェース抽象型は
継承ではなくインターフェースを実装
だから例えば
Javaならimplements インターフェース名
Rustならimpl トレイト名
継承ではなくインターフェースを実装
だから例えば
Javaならimplements インターフェース名
Rustならimpl トレイト名
958デフォルトの名無しさん
2026/09/24(木) 20:44:57.30ID:KSGyZqp3 テレビゲームやラジコンで動くピカチュウならそれで完璧だけど、
>>945
>ピカチュウ!でんきショックだ!!と命令して初めて
もしピカチュウが「生きている人間と同じ」なら、この限りでは無いな
Javaは多重継承をサポートしておらず、ピカチュウをテレビゲームやラジコンのように動かすのみ
随意筋 不随意筋
↖ ↗
チンポ
人間には意識と無意識が併存するからだ
>>945
>ピカチュウ!でんきショックだ!!と命令して初めて
もしピカチュウが「生きている人間と同じ」なら、この限りでは無いな
Javaは多重継承をサポートしておらず、ピカチュウをテレビゲームやラジコンのように動かすのみ
随意筋 不随意筋
↖ ↗
チンポ
人間には意識と無意識が併存するからだ
959デフォルトの名無しさん
2026/09/24(木) 20:47:13.54ID:lVuqG28Z960デフォルトの名無しさん
2026/09/24(木) 20:53:26.24ID:KSGyZqp3961デフォルトの名無しさん
2026/09/24(木) 21:18:08.67ID:K2Nz2aZE interfaceも継承ですよ。実装の継承ではないということだけ。
実装が必要なければ、interfaceもextendsします。
実装が必要なければ、interfaceもextendsします。
962デフォルトの名無しさん
2026/09/24(木) 21:23:39.66ID:WR2LHH2r963デフォルトの名無しさん
2026/09/24(木) 21:44:03.15ID:K2Nz2aZE java以外にもインターフェース継承はありますけどね。
964デフォルトの名無しさん
2026/09/24(木) 21:45:17.30ID:xmTxarxJ965デフォルトの名無しさん
2026/09/24(木) 21:46:25.46ID:R0E4hCxI 次スレ立てます
966デフォルトの名無しさん
2026/09/24(木) 21:49:07.46ID:R0E4hCxI967デフォルトの名無しさん
2026/09/24(木) 22:13:32.67ID:K2Nz2aZE javaでは多重継承できないといいますが、
javaでもインターフェース継承においては多重継承できます。
同名のdefaultメソッドも工夫すれば別々に呼べないことはありません。
javaでもインターフェース継承においては多重継承できます。
同名のdefaultメソッドも工夫すれば別々に呼べないことはありません。
968デフォルトの名無しさん
2026/09/24(木) 22:14:58.88ID:JlTqNYPt むしろAIの登場でトークン節約で保守のしやすいOOPは脚光を浴びるよね
969デフォルトの名無しさん
2026/09/24(木) 22:28:30.03ID:7WNlwcIJ 単にインターフェースと言ったら特定の言語のインターフェースの話をしてる人は誰もいない
区別は簡単でインターフェースと言ったら実装するもののみ指す
UMLモデル図でも実装(Implementation/Realization)として他とは区別される
特定の言語特有の話と区別できる常識を持つべき
区別は簡単でインターフェースと言ったら実装するもののみ指す
UMLモデル図でも実装(Implementation/Realization)として他とは区別される
特定の言語特有の話と区別できる常識を持つべき
970デフォルトの名無しさん
2026/09/24(木) 22:40:38.86ID:R0E4hCxI971デフォルトの名無しさん
2026/09/24(木) 22:44:56.37ID:K2Nz2aZE972デフォルトの名無しさん
2026/09/24(木) 22:45:54.28ID:R0E4hCxI973デフォルトの名無しさん
2026/09/25(金) 00:12:35.06ID:+w/VzeOT 個人的には「インターフェイス」という語は普通名詞として、オブジェクト指向の文脈ならせいぜい公開属性という程度の意味で使われるべき用語だったと思うけど、Javaが変な意味で使い出して、それが広がってしまったので非常に迷惑している。「インターフェイス」のように抽象的かつ広範な範囲で既に使われていた普通名詞を、特定の仕様の言語固有の機能を指す語として使ってしまう辺りにJavaの設計者の致命的なセンスのなさが現れていると思う。
もう慣れたけど、今でもJavaの人がインターフェイスという語を使うのを目にすると「大人しくC++から用語を借りておけよ、このイモ言語が」とたまに思う。
もう慣れたけど、今でもJavaの人がインターフェイスという語を使うのを目にすると「大人しくC++から用語を借りておけよ、このイモ言語が」とたまに思う。
974デフォルトの名無しさん
2026/09/25(金) 00:34:23.57ID:1tt5CQTU Modula-3のinterfaceをうかつに進化させてしまったのはjavaが悪い笑。
c++ではcppがinterface相当だが、純粋仮想関数のClassでjava系のinterfaceを作れる。
UMLではインターフェースやユースケースの継承もある。
java系インターフェースはとても便利だ。インターフェースは単なる実装のための宣言ではなく、
数学的には大きなクラスに近い(個人的感想です)。
c++ではcppがinterface相当だが、純粋仮想関数のClassでjava系のinterfaceを作れる。
UMLではインターフェースやユースケースの継承もある。
java系インターフェースはとても便利だ。インターフェースは単なる実装のための宣言ではなく、
数学的には大きなクラスに近い(個人的感想です)。
975デフォルトの名無しさん
2026/09/25(金) 00:45:19.07ID:wJile5GJ976デフォルトの名無しさん
2026/09/25(金) 09:25:50.53ID:jH12NGef977デフォルトの名無しさん
2026/09/25(金) 10:02:16.73ID:hU7zLeG2 >>964
C++等でのアダプタクラス追加と比べた場合、JavaScriptの利用先オブジェクト(標準組込オブジェクトですら)にアダプタ関数を追加できる仕様は次元の違いを感じる。但しオーバーロードはない
ラストワンマイルはルーズに解決できるが本来の設計も崩しやすいサンドボックスな世界
C++等でのアダプタクラス追加と比べた場合、JavaScriptの利用先オブジェクト(標準組込オブジェクトですら)にアダプタ関数を追加できる仕様は次元の違いを感じる。但しオーバーロードはない
ラストワンマイルはルーズに解決できるが本来の設計も崩しやすいサンドボックスな世界
978デフォルトの名無しさん
2026/09/25(金) 10:26:37.37ID:y3X2IqCa 全然違う。「(外部との)境界」というきわめて抽象的な概念として用いられていた語を、抽象クラスの一バリエーションのような狭い概念を指す語として使うJavaの用語法がイモだと言っている。
だから、975は議論の方向性が逆だし(本来の語義より抽象度を落としたJavaの用語法をありがたがっているおめでたい頭の持ち主しか見えない)、969のように「インターフェイスと言ったら実装するもののみ」という理解はまさにJava的なインターフェイス概念の延長上にある発想に他ならない。Rubyの「モジュール」なんかも相当センスのない命名だと思うけど、Javaの「インターフェイス」は本来の語義との抵触・競合の度合いが高い点でいっそう罪が重い。
本来の語義とは違うけどJava等で特殊な用語法が広がってしまったからやむなくそれを使うというスタンスならまだ理解はできるけど、「インターフェイス」の本来の語義がJava的なそれだと思い込んでいるようなのを見るとうんざりしてしまう。
だから、975は議論の方向性が逆だし(本来の語義より抽象度を落としたJavaの用語法をありがたがっているおめでたい頭の持ち主しか見えない)、969のように「インターフェイスと言ったら実装するもののみ」という理解はまさにJava的なインターフェイス概念の延長上にある発想に他ならない。Rubyの「モジュール」なんかも相当センスのない命名だと思うけど、Javaの「インターフェイス」は本来の語義との抵触・競合の度合いが高い点でいっそう罪が重い。
本来の語義とは違うけどJava等で特殊な用語法が広がってしまったからやむなくそれを使うというスタンスならまだ理解はできるけど、「インターフェイス」の本来の語義がJava的なそれだと思い込んでいるようなのを見るとうんざりしてしまう。
979デフォルトの名無しさん
2026/09/25(金) 10:42:37.94ID:IRNi1eZT アダプタ万能じいさんまだ生きていたのか
980デフォルトの名無しさん
2026/09/25(金) 11:27:16.64ID:aE2/KMc5 えっ?本の名前じゃなかったの?
大学生の頃よく読んていた
大学生の頃よく読んていた
981デフォルトの名無しさん
2026/09/25(金) 11:34:19.03ID:DP8L+qwL User InterfaceやApplication Programming InterfaceのInterfaceをJavaのInterfaceだと
受け取る人はいないし言葉の意味がコンテキストに応じて変わるのは
自然言語ではとうぜんのことなのでそんなこと気にしてどうすんだよ
受け取る人はいないし言葉の意味がコンテキストに応じて変わるのは
自然言語ではとうぜんのことなのでそんなこと気にしてどうすんだよ
982デフォルトの名無しさん
2026/09/25(金) 11:38:00.39ID:DP8L+qwL オブジェクト指向の文脈でのInterfaceはJavaのInterfaceが妥当だろ
Javaはオブジェクト指向の代名詞だからね
Javaはオブジェクト指向の代名詞だからね
983デフォルトの名無しさん
2026/09/25(金) 12:16:44.54ID:2+Wx0J54 >>964
Rustのような「型の定義」と「型に対するインターフェースAの実装定義」と「型に対するインターフェースBの実装定義」が分かれてる言語では
「既存の型の定義」に手を入れずに後からインターフェースの追加が楽だよ
>>977
Rustはその「標準ライブラリの既存の型」や「他所のライブラリの既存の型」に対しても
「自分で定義した新たなインターフェース」のメソッド関数を自由に実装して生やすことができるよ
その上で既存の型の本来の設計を崩すことがないようにするために
Rustの『孤児ルール(orphan rule)』によって「対象の型」か「対象のインターフェース」どちらかは自分自身で定義したものである必要がある制限があるよ
さらに波及効果も限定的で
既存の型へ新たなメソッド関数が有効になるのは「新たなインターフェース」の利用を宣言したモジュール内のみに限定されるよ
つまりRustは利便性と安全性を両立させる形になっています
Rustのような「型の定義」と「型に対するインターフェースAの実装定義」と「型に対するインターフェースBの実装定義」が分かれてる言語では
「既存の型の定義」に手を入れずに後からインターフェースの追加が楽だよ
>>977
Rustはその「標準ライブラリの既存の型」や「他所のライブラリの既存の型」に対しても
「自分で定義した新たなインターフェース」のメソッド関数を自由に実装して生やすことができるよ
その上で既存の型の本来の設計を崩すことがないようにするために
Rustの『孤児ルール(orphan rule)』によって「対象の型」か「対象のインターフェース」どちらかは自分自身で定義したものである必要がある制限があるよ
さらに波及効果も限定的で
既存の型へ新たなメソッド関数が有効になるのは「新たなインターフェース」の利用を宣言したモジュール内のみに限定されるよ
つまりRustは利便性と安全性を両立させる形になっています
984デフォルトの名無しさん
2026/09/25(金) 12:24:56.63ID:y3X2IqCa APIやUIのIは本来の語義のインターフェイスを指していいるんだから誤解が生じないのは当たり前。問題なのはクラスやオブジェクトについてインターフェイスという語を使う場面で、本来の語義を念頭に置く人は公開属性を想起するし、実際にそういう意味でインターフェイスという語が用いられることは非常に多い。しかし、Java的な用語法は同じ場面でより狭い意味でこの語を用いる。Java的な用語法しか頭になければ問題は生じないんだろうけど、本来の語義が頭にある場合、紛らわしいのよ。本来の語義で使われることも非常に多いだけにね。
Rubyの「モジュール」とかPythonの「イテレータ」なんかも抽象的な普通名詞に狭い意味を与えている例だけど、これらの語については普通名詞としての本来の語義で使われているのか、言語固有の狭い意味で使われているのかが紛らわしくなることはほとんどない。言語固有の狭い意味で使われることがほとんどだし、そうでない場合は大抵前後の文脈で判断がつくので。これらに比べてインターフェイスという語は、本来の語義で使われる場面が多いから、紛らわしくなることも圧倒的に多くなる。一層罪が重いといった所以。
ま、広まっちゃったものはしょうがないから諦めているけどね。
Rubyの「モジュール」とかPythonの「イテレータ」なんかも抽象的な普通名詞に狭い意味を与えている例だけど、これらの語については普通名詞としての本来の語義で使われているのか、言語固有の狭い意味で使われているのかが紛らわしくなることはほとんどない。言語固有の狭い意味で使われることがほとんどだし、そうでない場合は大抵前後の文脈で判断がつくので。これらに比べてインターフェイスという語は、本来の語義で使われる場面が多いから、紛らわしくなることも圧倒的に多くなる。一層罪が重いといった所以。
ま、広まっちゃったものはしょうがないから諦めているけどね。
985デフォルトの名無しさん
2026/09/25(金) 12:30:18.66ID:NVUugjE3986デフォルトの名無しさん
2026/09/25(金) 12:39:25.11ID:DP8L+qwL 動的型付き言語という曖昧なものを使ってるからインターフェイスの意味も曖昧に捉えたくなるだけなんじゃないの? ハードコアなオブジェクト指向言語Javaでのインターフェイスが真の意味でのインターフェイスであって公開属性なんて概念が必要だとは思えないな、メリットが何もないじゃないか
987デフォルトの名無しさん
2026/09/25(金) 13:04:13.52ID:WCeIwxTz 定義バトル始まったら終わりだな
鉄オタが電車語りすんのと同じで長い上に終わっても何も生まない
致命的なコミュニケーションエラー
鉄オタが電車語りすんのと同じで長い上に終わっても何も生まない
致命的なコミュニケーションエラー
988デフォルトの名無しさん
2026/09/25(金) 13:12:39.39ID:/a3T9QCP オブジェクトは全て揮発型メモリー上に現れては消える動的存在じゃないか?
プログラムとほぼライフタイムが同じオブジェクトを静的と言ってもなぁ
プログラムとほぼライフタイムが同じオブジェクトを静的と言ってもなぁ
989デフォルトの名無しさん
2026/09/25(金) 13:21:23.26ID:hU7zLeG2 >>983
Rustのその機能は実利的なデザインみたいだね。
似てるか分からないけどC#の拡張メソッドを思い出した。こちらは他者がメソッドの第一引数にthisを置く書式で定義でき、コール時はobj.extmethod()のスタイルで書けるのが面白い。
Rustのその機能は実利的なデザインみたいだね。
似てるか分からないけどC#の拡張メソッドを思い出した。こちらは他者がメソッドの第一引数にthisを置く書式で定義でき、コール時はobj.extmethod()のスタイルで書けるのが面白い。
990デフォルトの名無しさん
2026/09/25(金) 13:28:16.59ID:sIzV204t >>988
区別できてないのはヤバいな
値(またはインスタンスまたはオブジェクト)が静的に定まるのは静的な定数
動的に定まる定数は定数と呼ぶよりイミュータブル変数と呼ばれる
型が静的に定まるのが静的型付け
定まるのは具体型の場合もあれば抽象型の場合もある
呼び出すメソッド関数実装が静的に定まるのが静的ディスパッチ
静的ディスパッチは普通の関数呼び出しと同じで速いだけでなく関数のインライン展開ができるため速さが段違いに速くなる
区別できてないのはヤバいな
値(またはインスタンスまたはオブジェクト)が静的に定まるのは静的な定数
動的に定まる定数は定数と呼ぶよりイミュータブル変数と呼ばれる
型が静的に定まるのが静的型付け
定まるのは具体型の場合もあれば抽象型の場合もある
呼び出すメソッド関数実装が静的に定まるのが静的ディスパッチ
静的ディスパッチは普通の関数呼び出しと同じで速いだけでなく関数のインライン展開ができるため速さが段違いに速くなる
991デフォルトの名無しさん
2026/09/25(金) 13:36:13.84ID:y3X2IqCa 定義・用語法はどんな分野でも重要だろう。1つの定義だけが正しく、他の定義は全て誤りだとは思わないが、複数ある定義・用語法のいずれを選択するか、その前提としてどのような優劣があるかを考える能力はかなり重要だと思うけどな。
>>985-986
たとえば、抽象データ型の概念は公開属性の集合としてのインターフェイス(および値集合)で説明できる。抽象データ型はJava的な意味でのインターフェイスがない言語でも観念される、より抽象的な概念であることは知っているでしょ。インターフェイスの本来の語義の方がはるかに本質的な概念であって、Javaの用語法はそれに後付けで狭い意味付けをしたイモに過ぎないのよ。本質から離れたイモな用語法が広まって市民権を得てしまったから諦めてそれに合わせているけどね。
>>985-986
たとえば、抽象データ型の概念は公開属性の集合としてのインターフェイス(および値集合)で説明できる。抽象データ型はJava的な意味でのインターフェイスがない言語でも観念される、より抽象的な概念であることは知っているでしょ。インターフェイスの本来の語義の方がはるかに本質的な概念であって、Javaの用語法はそれに後付けで狭い意味付けをしたイモに過ぎないのよ。本質から離れたイモな用語法が広まって市民権を得てしまったから諦めてそれに合わせているけどね。
992デフォルトの名無しさん
2026/09/25(金) 13:38:34.37ID:DP8L+qwL JITコンパイルで動的ディスパッチをハイパー高速に実行するなんてのは20年以上前からJavaがやってるわけで静的ディスパッチと速度差がそんなに出るわけもなく
993デフォルトの名無しさん
2026/09/25(金) 13:39:42.71ID:DP8L+qwL >>991
イモに敗北した君は何だね? ブロッコリーかい?
イモに敗北した君は何だね? ブロッコリーかい?
994デフォルトの名無しさん
2026/09/25(金) 13:45:37.70ID:/a3T9QCP995デフォルトの名無しさん
2026/09/25(金) 13:56:04.34ID:pvKImJcg >>994
その主張は愚か
動作環境によっては即値オペランドのアドレッシングモードを持たない環境もありえるし
静的な定数配列は使い方によっては即値モードでコードに組み込まれることもあれば初期化済み領域に置く必要があることもあり動作環境によって変わることもある
したがってプログラミング言語自体の話とは無関係
その主張は愚か
動作環境によっては即値オペランドのアドレッシングモードを持たない環境もありえるし
静的な定数配列は使い方によっては即値モードでコードに組み込まれることもあれば初期化済み領域に置く必要があることもあり動作環境によって変わることもある
したがってプログラミング言語自体の話とは無関係
996デフォルトの名無しさん
2026/09/25(金) 13:59:58.41ID:pvKImJcg そもそも初期化済み不変領域に置くかコードの即値に置くかを指定できるプログラミング言語は存在しない
アセンブラだけだ
どちらに置かれてもコンパイル時に決まる静的な定数
アセンブラだけだ
どちらに置かれてもコンパイル時に決まる静的な定数
997デフォルトの名無しさん
2026/09/25(金) 14:03:35.78ID:DP8L+qwL >>991
それはおよそ30年人類がオブジェクト指向に夢と希望を抱いていた時代の考え方だよ
UMLなんかは属性という言葉を使っていた、フィールドを抽象化することによって実装から設計を独立させて個別に扱うという思想に立脚してたわけだけれどもそのUMLがいま現在使われなくなって絶滅したのには理由がある、実装と設計をわけたらまともなシステムを作れなかったわけ、それでいまはアジャイルという名のもとに実装が設計を導き実装を設計と一体のものとして扱うようになったのよ、属性はUMLの絶滅を招いた元凶、フィールドと言うようにしたが良い
それはおよそ30年人類がオブジェクト指向に夢と希望を抱いていた時代の考え方だよ
UMLなんかは属性という言葉を使っていた、フィールドを抽象化することによって実装から設計を独立させて個別に扱うという思想に立脚してたわけだけれどもそのUMLがいま現在使われなくなって絶滅したのには理由がある、実装と設計をわけたらまともなシステムを作れなかったわけ、それでいまはアジャイルという名のもとに実装が設計を導き実装を設計と一体のものとして扱うようになったのよ、属性はUMLの絶滅を招いた元凶、フィールドと言うようにしたが良い
998デフォルトの名無しさん
2026/09/25(金) 14:04:03.67ID:/a3T9QCP999デフォルトの名無しさん
2026/09/25(金) 14:04:56.87ID:DP8L+qwL 抽象化は悪と心得よ、それが30年のオブジェクト指向開発から導かれた教え
1000デフォルトの名無しさん
2026/09/25(金) 14:07:07.79ID:/a3T9QCP ライブラリの様々なクラスで同じ名前のメソッドがあるだろ?
それが抽象化の功績
それが抽象化の功績
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 30日 2時間 11分 45秒
新しいスレッドを立ててください。
life time: 30日 2時間 11分 45秒
10021002
Over 1000Thread 5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.io/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.io/login
運営にご協力お願いいたします。
───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。
▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.io/
▼ UPLIFTログインはこちら ▼
https://uplift.5ch.io/login
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 小学生の絵に「AIくさい」 中傷相次ぎしょうゆコンクール公開中止 福島・喜多方市 [少考さん★]
- 発達障害児が増え教員不足深刻、授業中に行方不明になり死亡事故も…専門家「現場にもっとやれとは無理がある」 [煮卵★]
- 高市政権へ「この時代を生きる市民として黙らない」「めちゃくちゃな政治に抗議します」 若者有志が国会前で抗議デモ ★2 [少考さん★]
- 前川喜平氏「JAL乗らない。」…VIVANT・堺雅人のアナウンスが放送他を理由に [少考さん★]
- 兒玉遥、『ストリートファイター』春麗コスプレ披露に反響…🎃 [少考さん★]
- トランプ大統領「イランとの戦争はまもなく終結する」と発言 [Hitzeschleier★]
- 高市政権「ガソリン補助、消費者に『支援慣れ』されてしまい意味がない状態。縮小してありがたみを感じてもらう」 [545512288]
- 秋葉原でランチ!
- 【実況】博衣こよりのえちえち空の軌跡the 2nd🧪
- お前らがやった最悪のクソゲー
- リサ、腹毛が生えすぎて日本人を激怒させ炎上🔥 [485187932]
- 🏡👊😅👊流行絵文字大賞👊😅👊🏡