- #125
- #124
Why Not Lazily Evaluate Everything?
Lazy evaluation can delay the computations until result is actually needed, saving unnecessary calculations and providing more flexibility in control flow.
So why not lazily evaluate all computations?
While it can reduce immediate computation costs, it also postpones the occurrence of errors. In eager evaluation, errors are generally caught early in the execution; whereas in lazy mode, errors might only occur when data is actually accessed, leading to a debugging process that is more scattered and harder to trace. (Functional Programming avoids this issue by design to prevent side effects, and many FP languages have lazy evaluation as a default strategy.)
Lazy evaluation requires an additional execution model to “remember” which values have not yet been computed, which typically means more wrapping and more memory overhead at the language execution level. (Side effects can be wrapped into explicit thunks/effects and called where you control them (or use Effect / IO Monad)
Lazy evaluation is a strategy for deferring decisions, significantly improving efficiency when data streams are large and not all results are needed; however, when a predictable execution order or explicit side effects are required, eager mode is more reliable.
function* process(items) {for (const it of items) {yield doSideEffect(it);}}// The caller does not iterate => no side effects occurconst gen = process([1,2,3]);// The side effect is only triggered when this line is executedfor (const p of gen) - #123
- #122
- #121
- #120
- #119
- #118
- #117
- #116
- #115
- #114
- #113
- #112
- #111
- #110
- #109
- #108
- #107
- #106
- #105
- #104
- #103
- #102
- #101
- #100
- #99
- #98
- #97
- #96
- #95
- #94
- #93
- #92
- #91
- #90
- #89
- #88
- #87
- #86
- #85
- #84
- #83
- #82
- #81
- #80
- #79
- #78
- #77
- #76
- #75
- #74
- #73
- #72
- #71
- #70
- #69
- #68
- #67
- #66
- #65
- #64
- #63
- #62
- #61
- #60
- #59
- #58
- #57
- #56
- #55
- #54
- #53
- #52
- #51
- #50
- #49
- #48
- #47
- #46
- #45
- #44
- #43
- #42
- #41
- #40
- #39
- #38
- #37
- #36
- #35
- #34
- #33
- #32
- #31
- #30
- #29
- #28
- #27
- #26
- #25
- #24
- #23
- #22
- #21
- #20
- #19
- #18
- #17
- #16
- #15
- #14
- #13
- #12
- #11
- #10
- #9
- #8
- #7
- #6
- #5
- #4
- #3
- #2
- #1