Compartir a través de


Sistema de tipos

Con el objetivo de que el algoritmo cuántico sea más hacia lo que se debe lograr en lugar de en una representación de problemas en términos de estructuras de datos, tomar una perspectiva más funcional sobre el diseño del lenguaje es una opción natural. Al mismo tiempo, el sistema de tipos es un mecanismo eficaz que se puede usar para el análisis de programas y otras comprobaciones en tiempo de compilación que facilitan la formulación de código sólido.

En general, el sistema de tipos de Q# es bastante minimalista, en el sentido de que no hay una noción explícita de clases o interfaces, ya que se puede usar para desde lenguajes clásicos como C# o Java. También adoptamos un enfoque algo pragmático que hace un progreso incremental, de modo que ciertas construcciones aún no están totalmente integradas en el sistema de tipos. Un ejemplo de esto son functors, que se pueden usar dentro de expresiones, pero aún no tienen una representación en el sistema de tipos. En consecuencia, no se pueden asignar ni pasar actualmente como argumentos, de forma similar a la del tipo parametrized callables. Esperamos realizar un progreso incremental en la ampliación del sistema de tipos para que sea más completo y equilibrar las necesidades inmediatas con planes a largo plazo.

Tipos disponibles

Todos los tipos de Q# son inmutables .

Tipo Descripción
Unit Representa un tipo singleton cuyo único valor es ().
Int Representa un entero de 64 bits con signo. Los valores van de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807.
BigInt Representa valores enteros con signo de cualquier tamaño.
Double Representa un número de punto flotante de 64 bits de precisión doble. Valores intervalo de -1.79769313486232e308 a 1.79769313486232e308, así como NaN (no un número).
Bool Representa valores de booleanos. Los valores posibles son true o false.
String Representa texto como valores que constan de una secuencia de unidades de código UTF-16.
Qubit Representa un identificador opaco por el que se puede abordar la memoria cuántica virtual. los valores de tipo Qubit se crean instancias a través de la asignación.
Result Representa el resultado de una medida projectiva en los espacios propios de un operador cuántico con valores propios ±1. Los valores posibles son Zero o One.
Pauli Representa una matriz de Pauli de un solo cúbit. Los valores posibles son PauliI, PauliX, PauliYo PauliZ.
Range Representa una secuencia ordenada de valores Int espaciados por igual. Los valores pueden representar secuencias en orden ascendente o descendente.
Array Representa valores que contienen una secuencia de valores del mismo tipo.
Tuple Representa valores que cada uno contiene un número fijo de elementos de diferentes tipos. Las tuplas que contienen un solo elemento son equivalentes al elemento que contienen.
struct Representa un tipo definido por el usuario que consta de elementos con nombre de diferentes tipos. se crean instancias de valores al declarar una nueva instancia.
Operación Representa un argumento de entrada no determinista invocable que toma un argumento de entrada (posiblemente con valores de tupla) y devuelve una salida (posiblemente con valores de tupla). Las llamadas a la operación valores pueden tener efectos secundarios y la salida puede variar para cada llamada, incluso cuando se invoca con el mismo argumento.
Función Representa un argumento de entrada determinista invocable que toma un argumento de entrada (posiblemente con valores de tupla) y devuelve una salida (posiblemente con valores de tupla). Las llamadas a función valores no tienen efectos secundarios y la salida siempre será la misma dada la misma entrada.