You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I need a mechanism to mark functions as having no side effects (pure functions).
Most external interfaces come with state, so I recommend having side effects by default and adding the @pure(after #58) tag if it is a pure function
Because pure functions and side-effect functions have different behaviors in dead code elimination analysis.
Pure functions such as wasi:clocks/monotonic-clock/now can be deleted directly from the control flow if they are not used.
However, functions such as wasi:random/random/get-random-u64 may change external state, so even if their return value is not used, they cannot be deleted.
The text was updated successfully, but these errors were encountered:
This is an interesting idea. Since we wouldn't be able to actually enforce purity, the "pure" mark would just be advisory, which is I think what you're suggesting. But this means that someone might (for valid reasons) virtualize wasi:clocks/monotonic-clock.now to log every time now was called, and a compiler that optimized away the call to now would then be affecting the observable behavior of the program. However, if pure was considered a part of the interface contract of now, then we could say that's actually fine. But this makes me think we shouldn't be putting purity in a generic (open-ended, ignorable, extensible) syntax, but rather something that is a built-in/official part of the WIT syntax and C-M AST, so that it's just as official a part of the contract as the types (even if not semantically enforced).
I need a mechanism to mark functions as having no side effects (pure functions).
Most external interfaces come with state, so I recommend having side effects by default and adding the
@pure
(after #58) tag if it is a pure functionBecause pure functions and side-effect functions have different behaviors in dead code elimination analysis.
Pure functions such as
wasi:clocks/monotonic-clock/now
can be deleted directly from the control flow if they are not used.However, functions such as
wasi:random/random/get-random-u64
may change external state, so even if their return value is not used, they cannot be deleted.The text was updated successfully, but these errors were encountered: