other annotations

Raimo Niskanen raimo+erlang-questions@REDACTED
Thu Jan 28 14:17:23 CET 2021

On Thu, Jan 28, 2021 at 01:43:00PM +0100, Loïc Hoguin wrote:
> On 28/01/2021 13:11, Richard Carlsson wrote:
> > Den tors 28 jan. 2021 kl 11:23 skrev Loïc Hoguin <essen@REDACTED 
> > <mailto:essen@REDACTED>>:
> > 
> >     By the way, if annotations are going to be a thing, it might be a good
> >     idea to make them more general so we can annotate other things, such as
> >     "pure function" / "side effect function" or "local send" / "remote
> >     send". I would personally love to easily identify message sends to
> >     remote nodes.
> > 
> > 
> > These are also interesting things - maybe not inline but perhaps as 
> > keywords on function definitions; we had some ideas about marking 
> > functions as pure (for guards) back in the HiPE project, for example. 
> > Like any kind of strict typing, you then get into the question about 
> > such functions in other modules: If they can only be used locally, the 
> > feature is perhaps too limited to be worth it. To put them in other 
> > modules, you'd probably need to do name mangling like e.g. when linking 
> > C++, to ensure both caller and callee are following the conventions, and 
> > that might get too messy. I don't know anyone who has prototyped that, 
> > though, so it's not clear how it would look and feel.
> Considering the small number of already bound variables used in a match, 
> it might be more appropriate to make this a keyword as well. Or have a 
> longer form, for example "^match Var". Then you can have "^pure 
> function() -> todo.", "^remote Pid ! Msg" and so on. With the annotation 
> being added as metadata and usable by the compiler, parse transforms or 
> other tools (allowing custom annotations the compiler doesn't otherwise 
> understand).
> Other options could be "match^Var", "pure^function()" "remote^Pid ! 
> ...", or "match::Var", ":match: Var"...
> The added advantage is that you're explicitly writing that this is a 
> match rather than relying on people's understanding of what ^ means.

That is an interesting idea.

{ok, ^Var} = foo(),
{ok, match^Var} = foo(),

More verbose, but not terribly.  Still next to the variable. and no
intermediate variable is needed.  Maybe even clearer.
Opens up for other annotations.

Then ^ would be the annotation binary operator.

> -- 
> Loïc Hoguin
> https://ninenines.eu


/ Raimo Niskanen, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list