Declaring Variables

How do you define new variables in the system?

Variables in Lasp are identified using a tuple of a globally unique identifier for the variable and the variable's type. Each variable needs to have a type that points to an implementation of a CRDT from our types library.

Let's declare a set named <<"set">> (an Erlang binary) that's a CRDT state-based Observed-Remove Set.

> {ok, {Id, Type, Metadata, Value}} = lasp:declare({<<"set">>, state_orset}, state_orset). {ok,{{<<"set">>,state_orset}, state_orset, [{clock,[{<<170,227,142,126,63,64,19,227,195,66,39,125,58, 195,75,134,148,109,168,...>>, 1}]}], {state_orset,[]}}}

Here, after the declare call is issued, a few things happen:

  • A tuple is returned containing the identifier, type, metadata about the object, and the object's value.
  • The value of the variable is defaulted at the bottom value for the CRDT: in this case, the set's bottom value is the empty set.
  • Each node in the system will have a different value for the variable, and eventually converge after anti-entropy is performed.

Did this page help you?