Partager via


Système de types

Avec le focus pour l’algorithme quantique étant plus vers ce qui doit être réalisé plutôt que sur une représentation problématique en termes de structures de données, prendre une perspective plus fonctionnelle sur la conception du langage est un choix naturel. En même temps, le système de type est un mécanisme puissant qui peut être utilisé pour l’analyse du programme et d’autres vérifications au moment de la compilation qui facilitent la simulation de code robuste.

Dans l’ensemble, le système de type Q# est assez minimaliste, dans le sens où il n’y a pas de notion explicite de classes ou d’interfaces, car il peut être utilisé à partir de langages classiques comme C# ou Java. Nous prenons également une approche quelque peu pragmatique qui fait des progrès incrémentiels, de sorte que certaines constructions ne sont pas encore entièrement intégrées au système de type. Voici un exemple de fonctors, qui peuvent être utilisés dans des expressions, mais qui n’ont pas encore de représentation dans le système de type. En conséquence, ils ne peuvent pas être affectés ou passés en tant qu’arguments, comme c’est le cas pour les callables paramétrables de type. Nous prévoyons d’effectuer des progrès incrémentiels dans l’extension du système de type afin qu’il soit plus complet et équilibrer les besoins immédiats avec les plans à long terme.

Types disponibles

Tous les types de Q# sont immuables .

Catégorie Description
Unit Représente un type singleton dont la seule valeur est ().
Int Représente un entier signé 64 bits. Valeurs comprise entre -9 223 372 036 854 775 808 et 9 223 372 036 854 775 807.
BigInt Représente les valeurs d’entier signé de n’importe quelle taille.
Double Représente un nombre à virgule flottante double précision 64 bits. Valeurs plage comprise entre -1.79769313486232e308 à 1,79769313486232e308, ainsi que NaN (pas un nombre).
Bool Représente les valeurs booléennes. Les valeurs possibles sont true ou false.
String Représente du texte sous forme de valeurs qui se composent d’une séquence d’unités de code UTF-16.
Qubit Représente un identificateur opaque par lequel la mémoire quantique virtuelle peut être traitée. Valeurs de type Qubit sont instanciées via l’allocation.
Result Représente le résultat d’une mesure projective sur les espaces propres d’un opérateur quantique avec des valeurs propres ±1. Les valeurs possibles sont Zero ou One.
Pauli Représente une matrice Pauli à qubit unique. Les valeurs possibles sont PauliI, PauliX, PauliYou PauliZ.
Range Représente une séquence ordonnée de valeurs de Int égales. Valeurs peuvent représenter des séquences dans l’ordre croissant ou décroissant.
Tableau Représente valeurs qui contiennent chacune une séquence de valeurs du même type.
Tuple Représente valeurs qui contiennent chacun un nombre fixe d’éléments de différents types. Les tuples contenant un seul élément sont équivalents à l’élément qu’ils contiennent.
struct Représente un type défini par l’utilisateur composé d’éléments nommés de différents types. Valeurs sont instanciées lors de la déclaration d’une nouvelle instance.
Opération Représente un non déterministe qui accepte un argument d’entrée (éventuellement tuple) et retourne une sortie (éventuellement tuple-valued). Les appels à l’opération valeurs peuvent avoir des effets secondaires et la sortie peut varier pour chaque appel, même lorsqu’elle est appelée avec le même argument.
Fonction Représente un déterministe qui accepte un argument d’entrée (éventuellement tuple) et retourne une sortie (éventuellement tuple-valued). Les appels à la fonction valeurs n’ont pas d’effets secondaires et la sortie sera toujours la même en fonction de la même entrée.