Comment by xigoi
3 hours ago
Why is `pure` a keyword that needs to be added, with impure being the default? This discourages programmers from marking functions as pure. I like how Nim does it, with `func` declaring a function (pure) and `proc` declaring a procedure (impure).
Roc defaults functions to being pure, and functions that can run side effects are inferred to have a different type by the compiler based on usage. By convention, their names should also end in `!` (e.g. `transform` for the name of a pure function and `transform!` if it does side effects), and the compiler warns you if you don't follow that convention.
https://github.com/roc-lang/roc/blob/b2503210da6b58a4ce1254d...
I also really like the distinction between a function and procedure. The function is a pure mathematical function. The procedure is a series of instructions.
I would also recommend this default.
We want languages that encourage good design.
If your goal is - like Crystal - to be as pain free of a migration from Python to Blorp, this shouldn't really impact it, since the compiler can and should be able to auto-fix this.
> Why is `pure` a keyword that needs to be added, with impure being the default?
Marketing.
Instead of reading the code littered with "impure" keywords, you look at the beautiful code marked as "pure".