テクノロジー

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

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ありならシーケンシャルみたいなことができる。ユーザーサイドでできる最適化

12: UhoNiceGuy 2025/06/22 16:50

getTimeは「入力が同じなら返り値も同じ」というのに反する人工的な例として書かれたということが理解できない人がわらわらいる//黒板数学で効率化できる部分があるのだから、黒板数学を議論しようという話

13: shunkeen 2025/06/22 18:47

最初に“くだらない議論だ”と、切って捨てている以上、筆者が「くだらない」と思うような異論反論が出てくるのは、筆者も織り込み済みな気はする。逆に言語処理系実装の立場を「くだらない」と言う人がいても良い

14: megumin1 2025/06/22 21:16

コンパイラの最適化の話なんてはてぶの人には理解できるはずがないので、この手の記事は内容は一切読まれることなく、無益なコメントが並んで終わりますよ。案の定getTimeに対するどうでもいいコメントが並んでますね

15: zyzy 2025/06/23 00:15

思ってたよりむしろ純粋だと最適化にいろいろと便利なんだな、ってなった。

16: quick_past 2025/06/23 00:31

“C23では関数の副作用を制限する属性 [[reproducible]] と [[unsequenced]] が追加された。”はえー

17: mushus 2025/06/23 01:52

Date.nowはくだらない(だめだと分かりきってるので)?

18: kagehiens 2025/06/23 09:20

関数の副作用の有無だけなんであんなに取り沙汰すのだろうと思っていたので、分かりみが深い。

19: katsyoshi 2025/06/23 14:29

副作用ないのは便利になることが多いことは理解しているつもり。表面上の話で出してくる人たちはちょっと……というイメージしか無い。

20: sa-yama321 2025/06/24 17:15

プログラミングの話題で、人とコミュニケーション取るのは難しいな。なぜくだらないのか、俺はわかったよ。