新しいものを表示

うん><; オレンジもAda大好き(ほとんど使った事無いけど)ってくらいだしそう考えるし、その前の話的にはboolならって書いたじゃん?><;( mstdn.nere9.help/@orange_in_sp )
その上で、金具さんの案はどうなのって・・・><

orange さんがブースト

「成功したか失敗したか」は bool ではなく「成功したか失敗したか」型で返ってほしい

orange さんがブースト

Tryなんだから処理結果ではなく処理が成功したか失敗したかのboolを返すべきで設計が悪い

その上で、金具さんの案だと、オレンジの例示で言うintが帰ってくるわけだよね?>< hoge.fuga()なprocedureだった物でhogeを返して欲しいって事なんだから><

orange さんがブースト

mstdn.nere9.help/@orange_in_sp
これは型で表明されれば何の混乱も起きない話で、たとえば
fn TryIncrement(&mut self) -> Result<&mut Self, IncrementError>
なのか
fn TryIncrement(&self) -> Result<Self, IncrementError>
なのか、型を見れば mutability なんて自明なので

で、intにint int.TryIncrement()みたいなのがあったらとんでもなく混乱するかも><
int x=3;
int y=x.TryIncrement();
ってしたあとにxはどうなってるのかわけわからんってなるかも><(xが文字通りインクリメントされて破壊されて4になった?>< それともyに4が入るだけでxは3?>< ていうかそもそもTryIncrement()が返すのは結果なのか、それとも何らかの勝手な定義による成否の表現?><(例えば0なら成功とか))

スレッドを表示

あいまいな表現になるけど><;
オレンジ的には、その関数が示しているものをなるべく返して欲しいみたいな感覚があるかも><
例えば変な例示かもしれないけどTryIncrement()って関数があってboolが返ってくるのであれば、(不可能な場合がある状態で)インクリメントしてみて出来たかどうかを返すのかも?><(論理の正負はわからん)って解釈するかも><

orange さんがブースト

戻り値のある function が参照透過性を破壊しないというお約束は、あまり当然ではない気がする

スレッドを表示
orange さんがブースト

典型的には C++ における const 性なんかはそういう「オブジェクトについて、観測可能な変更が行われるか」みたいな制限された視野を提供している

スレッドを表示
orange さんがブースト

本来「副作用」という巨視的すぎる視点ではなく、コードの有無が開発者の意図した結果 (特に値) を変更するか、というもっと制限された視野で考えるべき事柄のような気はする

スレッドを表示
orange さんがブースト

これにはまあ同意するけど、「計算機の状態の全てが、あるオブジェクトから観測可能なわけではない」という観点もあり、つまりたとえばデバッグプリントは確かに副作用を発生させるけど、これが本当にコード上で何らかの観測可能な影響を及ぼすのか

orange さんがブースト

それは慣習に過ぎないのではという感想です (もっと言えば、状態を持つ/持たないは自明ではない (特にキャッシュとかがあると))

なんでそうなるかと言うと、(計算機の)状態が「必ず変化しない」procedureなんて、中の処理が実際には空っぽとかじゃなければありえないだろうし><

例えばfugaってprocedureとint piyo(int x);ってfunctionを持つhogeがあったとする><
int a=hoge.piyo(x);
hoge.fuga();
int b=hoge.piyo(x);
ってした時に、よりaとbという結果が異なる可能性が高くなるよね?><;
より参照透過性(?)が危険にさらされる(?)場面である可能性が高くなると看做せる(?)というか・・・><(状態を持つのであれば保障は出来ないのは当然として><)

orange さんがブースト

変更された結果返ってくる値が元の値のその後であるのか複製であるのか、これは単に (GC 付きの言語であれば) 元の値の参照が生存しているか否かの違い、所有権のその後の話であって、本質的に異なるものだと言えるのだろうか?

少なくともC# で、何らかの関数を実行した結果は、何らかの新たな物(結果なりリソースなり)か何らかの部分集合等であって、その名前の手続きを実行して変化した(=非破壊では無いという意味では破壊された)結果と解釈する事って少なくともオレンジは無いかも><;
関数型とかあんまり好きじゃないけど、「破壊されたその物が返ってくる」ってその逆方向に突っ走りまくりな発想では?><;

で、Linqでそんな変な場面ってあるの?><;

スレッドを表示

Pascal一族も別にfunctionで副作用を起こさないなんて意味は持ってないかも>< そうじゃなく、procedureって必ず・・・副作用?><; なんていうの?><;参照透過性の崩壊?><;
なんかそんな感じの関数型の言語が避けまくるような物を踏んづけてる場所だよって言う意味を結果的に持ってない?><;(そうじゃない場所では踏んで無いということではなく><;)

オレンジの説明が微妙におかしいのかもしれないけど、hogeに何も起きないhogeのprocedureってなに?><;

orange さんがブースト

function と proceduce を使い分けるとき、 function が副作用を含まないという意味なのか何らかの値を返却するという意味なのかは人によって異なる

古いものを表示
:realtek:

思考の /dev/null