LogoMist

Operators, Macros & Closures

Binary, prefix, and postfix operators, macro calls, and closure expressions.

Binary Operators

OperatorDescription
+Addition
-Subtraction
*Multiplication
/Division
%Modulus
==Equality
!=Inequality
<Less than
>Greater than
<=Less or equal
>=Greater or equal
&&Logical AND
||Logical OR
&Bitwise AND
|Bitwise OR
^Bitwise XOR
<<Left shift
>>Right shift
=Assignment
+=Add assign
-=Subtract assign
*=Multiply assign
/=Divide assign
%=Modulus assign
&=Bitwise AND assign
|=Bitwise OR assign
^=Bitwise XOR assign
<<=Left shift assign
>>=Right shift assign
..Range (exclusive)
..=Range (inclusive)
->Pointer write

Prefix Operators

OperatorDescription
*Dereference
&Reference
&mutMutable reference
!Logical NOT
-Numeric negation

Postfix Operators

OperatorDescription
.fieldField access
.0Tuple field access
()Function call
[]Index
{ f: v }Struct literal
as TypeType cast
?Try (error prop)
++Increment
--Decrement
!()Macro call (paren)
![]Macro call (bracket)
!{}Macro call (brace)

Macros

Mist reuses Rust's macro system directly:

println!("hello");
assert_eq!(a, b);
vec![1, 2, 3];

Macro calls use ! followed by parentheses, brackets, or braces.

Closures

let add = (a, b) => a + b;
let result = add(2, 3);  // 5

f64 fn() square = (x) => x * x;

Closures can have explicit return types:

let transform = i32 (x) => {
    x * 2
};

On this page