Remix.run Logo
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).

adamddev1 2 hours ago | parent | next [-]

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.

rtfeldman an hour ago | parent | prev | next [-]

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...

onlyrealcuzzo 3 hours ago | parent | prev | next [-]

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.

miroljub an hour ago | parent | prev [-]

> 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".