We've talked about types before, mostly in regard to the integer and floating point number types (e.g., i32 or f32). Cone offers a rich, versatile collection of types, whose documentation extends across quite a few chapters.

What is a type? Broadly speaking, it is a pattern that:

Every value in a program has a type, known at compile-time due to an explicit declaration or because the type can be easily inferred based on the context. By knowing the types of all values, the compiler can optimize a program's performance and memory use. Clear typing facilitates precise, flexible data manipulation and improves the safe and correct use of data.

The names of specific types are capitalized by convention. This helps cleanly separate the global namespace between value types and variables, reducing unexpected naming conflicts and improving code clarity. One notable exception to this naming convention is the type names for the primitive numeric types.

This page provides a helpful overview of Cone's diverse range of types. These enable definition of custom types as needed by a program or library.

Concrete types

The concrete types are used to instantiate specific data values:

System Resource Types

These types facilitate low-level, safe use of memory, functions and threads.

Template types

Using template metaprogramming, one can define a collection of types that share common logic, but whose implementation details vary according to the specific type parameters applied to the template. Most indexed collection types are implemented using templates. Thus, hash-indexed collections share a similar logic, but that logic varies according to the specified types of the hash and element values.