テクノロジー

「関数の副作用の有無」よりも大事なもの | 雑記帳

1: atsushieno 2025/06/22 02:07

最適化は別に関数型のパラダイムとは無関係に適用できるし(C23以前でもSSAベースのdead code eliminationやarray bound check removalなど無数にある)、処理順序の可換性みたいな思考モデルへの影響のほうが有意義だと思う。

2: amd64x64 2025/06/22 02:28

バグの典型的なパターンとして副作用の有無がよく語られると言うだけで最適化視点での分類とは文脈が違うと思う

3: paradoxparanoic 2025/06/22 05:31

Date.now()はくだらなくないだろ。明確に悪でテストや再利用性を阻害する。 def func(now: Date) = hogehogeと書くだけで純粋になるんだからそうするべき

4: masa8aurum 2025/06/22 08:55

「関数に副作用がある/ない」をもっと細分化すると

5: remonoil 2025/06/22 10:41

"副作用が「ある」か「ない」という分類はコンパイラーにとっては粗すぎる。" それはそう。文脈を明示して語ろう

6: Fluss_kawa 2025/06/22 10:58

C言語のコンパイラだって、グローバル変数、staticで修飾されていない、引数にポインタが使われていないの条件で最適化できるので、最適化と副作用は別の議論では?ないことがわかってれば最適化は楽だけど。

7: tettekete37564 2025/06/22 11:09

その getTime は TDD やクリーンアーキテクチャや DI で出てくる典型的なアンチパターン。その関数を使う処理のテストが書けないというめちゃくちゃ大きな副作用がある。せめてデフォルト引数で Date.now() を使う様にすべき。

8: knjname 2025/06/22 11:41

作者がコンパイラ実装者の立場で、と言っていることを尊重しよう

9: ch1248 2025/06/22 11:54

なるほど

10: fufuvalso 2025/06/22 12:00

そう、黒板に式を書いて結果も黒板に書いて完結する数学と、キーボード入力関数やメモリ共有書き換え関数できるコンピュータは世界が違うし。foo()の結果が3ならfoo()を全部3に文字列置換する最適化はもう黒板数学。

11: theatrical 2025/06/22 14:53

flixだとポリモーフィックエフェクトを採用していて、引数がeffectも持つか否かで処理分岐させて、effectなしなら並列処理、effectありならシーケンシャルみたいなことができる。ユーザーサイドでできる最適化