Syntactic sugaring proposals for Rholang
Purpose
The purpose of this page is to capture proposals of syntactic sugaring to benefit users of Rholang and to track discussion and decision-making related to these proposals.
How to use this page
All contributors welcome! Please do not remove content that you didn't author.
Proposals
Proposal | Discussion | Decision |
---|---|---|
let PLet. Proc2 ::= "let" [Binding] "in" "{" Proc3 "}"; BindingProcToPat. Binding ::= [Name] NameRemainder "<-" Proc3 ; | prototyped in PR #2055 see also RCHAIN-2641 The delimiter shown is ←; should it be =? | |
lambda @ListOps!("foreach", | The desugared version is what one has to write anyway in order to use tools like ListOps. The expressiveness of Rholang will be hugely improved. | |
"contract methods" (technically they are not methods but I have no idea how to call them ) contract channel.methodName(a, b, c) | channel.methodName!(P, Q, R) will translate to: contract channel(@"methodName", a, b, c) | channel!("methodName", P, Q, R) which translates to: for (@"methodName", a, b, c <= channel) | Could make the code more readable and also friendlier to OOP devs | |
contract varargs contract myContract!(arg1, arg2, rest...) = { ... } @myChannel ! (+(1,2,3)) | | Such a syntax feature would allow us to write multi-arity contracts easier. Also we could write decorator contracts that receive a message with any structure, do some work and then forward the original message to a lower level | |
integrate registry dependency lookup with current functionality of new operator ...would desugar to for(@(_, MakeMint) <- MakeMintCh) { ... } } | Any nontrivial contract startw with setting up the dependencies like this and it looks pretty bad rl!(`rho:id:exunyijimapk7z43g3bbr69awqdz54kyroj9q43jgu3dh567fxsftx`, *MakeMintCh) | ... } For this we will have to make the registry lookup as a special case of system processes but since it's used everywhere I don't see that as being a problem. | |
ch1 ! ("someMethod", ←ch2, ← ch3) ...would desugar to for( x ← ch2, y ← ch3) { ch1 ! ( "someMethod", x , y ) } | ||
ch1#method ! (arg1, arg2,...) ...would desugar to ch1 ! ( "method", arg1, arg2,...) | ||
- RCHAIN-2641Getting issue details... STATUS | ||
- RCHAIN-2647Getting issue details... STATUS | ||
- RCHAIN-2713Getting issue details... STATUS | ||
Mike stay's Rholang sugaring scratch pad |