Aller au contenu principal

Types de données

Mélodium est un langage fortement typé, afin de permettre notamment une sûreté de conception et des possibilités d'optimisations internes au moteur d'exécution.

Types de base

Mélodium dispose des types de base suivants :

Entiers non signésEntiers signésNombres en virgule flottanteTexteLogique
u8i8f32charbyte
u16i16f64stringbool
u32i32void
u64i64
u128i128

Types supplémentaires

En plus des types de base nativement disponibles de part le langage Mélodium, les bibliothèques peuvent amener leurs propres types. Ces types peuvent représenter des données fonctionnelles propres à des cas d'usages, et être exploités de la même façon que tout autre type au travers de traitements.

La librairie standard apporte aussi quelques types additionnels, tel que le type Map.

remarque

Les options Option<…> et vecteurs Vec<…> ne sont pas des types supplémentaires mais des composants du langage Mélodium lui-même.

Paramètres constants et variables

Les paramètres sont soit constants soit variables.

Les paramètres constants ont pour caractéristique d'avoir une valeur qui ne changera pas durant toute l'exécution d'un programme, et sera notamment la même au travers de toutes les pistes dans lesquelles il est exploité.

Les paramètres variables ont eux des valeurs susceptibles de différer d'une piste à l'autre. C'est notamment le cas lorsque ces paramètres sont issus de contextes.

Les paramètres de traitements peuvent être variables comme constants, déclarés ainsi :

treatment my_treatment(var foo: string, var bar: Vec<u16>, const baz: i64) { /* … */ }

Par défaut, les traitements ont des paramètres variables, ce qui rend la déclaration précédente équivalente à :

treatment my_treatment(foo: string, bar: Vec<u16>, const baz: i64) { /* … */ }

À l'inverse des traitements, les modèles eux n'acceptent que des paramètres constants. Les traitements instanciant des modèles paramétrés sont donc susceptibles de requérir la constance de certains paramètres.

model MyModel(const something: i64) { /* … */ }
// Note : Le qualificateur `const` est optionnel sur les paramètres de modèles.

treatment my_treatment(foo: string, bar: Vec<u16>, const baz: i64)
model myInstanciedModel: MyModel(something = baz)
{ /* … */ }