新しいものを表示
orange さんがブースト

それこそ型を見ればいいじゃん (型を見てわからない言語使いたくない) という感想しかないですね……

その文脈上で、hoge.fuga()でfugaがhogeの型と同一の型で何かを返すのであれば、それはhogeは破壊されていないとオレンジは考えるかも>< hogeにfugaと言う状態の変化を与えた物ではなくfugaと言う式を通した結果かもって><
逆にfugaがprocedureであれば、hogeをfugaと言う手続きで何らかの変化をさせる以外の推定のしようが無いかも><

意地悪な例示でTryってくっつけたけど、Tryってつけてなかったらどうなる?><ってなるかも><
手続きのような言葉で関数のように何かが返ってくる時にその何かは推測が難しいかも><
何が返ってくるかをその関数が表していなければ、何が返ってくるのかわからないって当たり前(自己言及的で循環する)な問題があるかも><
hoge.fuga()のfugaと言う4文字ににhogeそのものが返ってくるって情報はどこにあるんだろう?><
fugaというものが返ってくるのでは?って考えるかも><

enumと言うか列挙型、Pascal一族でも使われまくりかも>< 部分集合型があるからさらに大活躍かも><

orange さんがブースト

enum 、もっと言えば代数的データ型はもっと積極的に使われてほしいんですよね

orange さんがブースト

try の結果を表明するなら Result 型を使えばいいので特に設計のうえで悩む点はないですね

うん><; オレンジも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という結果が異なる可能性が高くなるよね?><;
より参照透過性(?)が危険にさらされる(?)場面である可能性が高くなると看做せる(?)というか・・・><(状態を持つのであれば保障は出来ないのは当然として><)

古いものを表示
:realtek:

思考の /dev/null