The CM language is statically typed, which means all variables and expressions in CM must have a type that is known at compile time. This type is used to detect errors and improve run-time performance.
There are two main categories of types in CM: value types and reference types. Value types can be allocated on the stack and are passed by value to functions when used as arguments or return values, which means they are copied. Reference types, on the other hand, are allocated and freed by the garbage collector and are passed by reference between functions, which means only a pointer to the data is passed instead of a copy.