Cos'è il Synchronous Call Trick/Ref Trick in BEAM

Aug 23 2020

Recentemente abbiamo letto il libro BEAM come parte del nostro gruppo di lettura. Nel capitolo 7 c'è un'allusione al trucco dell'arbitro/trucco della chiamata sincrona in Erlang.

Sfortunatamente, il libro è incompleto e dopo la discussione non siamo riusciti a capire quale fosse il trucco dell'arbitro.

Risposte

3 JoséM Aug 23 2020 at 20:10

Quando esegue un receive, BEAM VM esegue la scansione della casella di posta per trovare il primo messaggio adatto (corrispondente) e blocca il processo se non ne trova nessuno.
Il "trucco" è che, poiché è impossibile che un nuovo riferimento si trovi nella casella di posta prima che sia stato creato, non è necessario eseguire la scansione dell'intera casella di posta quando receive {Reference, Term}, solo dal punto in cui Referenceè stato creato.

Questo è il significato della seguente frase:
The compiler recognizes code that uses a newly created reference (ref) in a receive (see [ref_trick_code]), and emits code to avoid the long inbox scan since the new ref can not already be in the inbox.