[erlang-questions] Illegal Guard?

Richard A. O'Keefe <>
Thu Feb 11 08:01:55 CET 2016


On 11/02/16 7:39 pm, Unix One wrote:
> On 02/08/2016 05:18 PM, Richard A. O'Keefe wrote:
>> Note also, as the paper linked above certainly does,
>> that hot-loading means that you can never be certain
>> that a function from another module will be pure when
>> you call it.
> Please excuse my ignorance, but wouldn't this specific point potentially
> not be an issue if:
>
> - guards required functions to be explicitly declared pure
> - compiler verified the assertion of purity
> - hot code loader refused to load if a guard function wasn't declared pure
>
> Maybe the declaration of purity is not necessarily required, but it does
> make it more explicit.
I believe I mentioned that purity is not sufficient.
f(X) -> f(X).
is pure.  But it is not bounded, and boundedness is of practical importance.

We *could* have declarations like that.  Currently we don't.
There are some technical problems which could probably be resolved.
One of them is "what does it mean to call a function pure if it is being
traced?"

Actually, the simplest thing would be to adopt abstract patterns, which
are *necessarily* pure and bounded, so there is nothing extra to 
check/enforce.

There have been programming languages with 'effects' as part of their
type system.  To a degree, Mercury and Clean do that now.  Erlang has a
type system now, which it didn't before.  Maybe in another decade it will
have a type+effects system.







More information about the erlang-questions mailing list