Поделиться через


Система типов

С акцентом на квантовый алгоритм больше в сторону того, что должно быть достигнуто, а не на проблемном представлении с точки зрения структур данных, принимая более функциональную перспективу на проектирование языка является естественным выбором. В то же время система типов представляет собой мощный механизм, который можно использовать для анализа программ и других проверок времени компиляции, которые упрощают разработку надежного кода.

В целом система типов Q# довольно минималистична, в том смысле, что нет явного понятия классов или интерфейсов, так как они могут использоваться для классических языков, таких как C# или Java. Мы также принимаем несколько прагматичный подход к добавочному прогрессу, таким образом, что некоторые конструкции еще не полностью интегрированы в систему типов. Примером этого являются воронки, которые можно использовать в выражениях, но еще не имеют представления в системе типов. Соответственно, они в настоящее время не могут быть назначены или переданы в качестве аргументов, как и в случае с параметризованными вызываемыми типами. Мы ожидаем, что добавочный прогресс в расширении системы типов будет более полным, и сбалансировать потребности с долгосрочными планами.

Доступные типы

Все типы в Q#неизменяемы.

Тип Описание
Unit Представляет одноэлементный тип, только значение которого равно ().
Int Представляет 64-разрядное целое число со знаком. значения диапазон от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.
BigInt Представляет целое число со знаком значений любого размера.
Double Представляет число с плавающей запятой двойной точности 64-разрядной точности. значения диапазон от -1.79769313486232e308 до 1.7976931348623e308, а также NaN (не число).
Bool Представляет логические значения . Возможные значения : true или false.
String Представляет текст как значения, состоящие из последовательности единиц кода UTF-16.
Qubit Представляет непрозрачный идентификатор, с помощью которого можно устранить виртуальную квантовую память. значения типа Qubit создаются путем выделения.
Result Представляет результат проецивного измерения на собственные пространства квантового оператора с собственными значениями ±1. Возможные значенияZero или One.
Pauli Представляет матрицу с одним кубитом Паули. Возможные значения: PauliI, PauliX, PauliYили PauliZ.
Range Представляет упорядоченную последовательность равных Int значений. значения могут представлять последовательности в порядке возрастания или убывания.
Массив Представляет значения, которые содержат последовательность значений одного типа.
Кортеж Представляет значения , которые содержат фиксированное количество элементов разных типов. Кортежи, содержащие один элемент, эквивалентны элементу, который они содержат.
struct Представляет определяемый пользователем тип, состоящий из именованных элементов различных типов. значения создаются при объявлении нового экземпляра.
Операция Представляет недетерминированный вызываемый, который принимает один входной аргумент (возможно, значение кортежа) и возвращает один (возможно, значение кортежа) выходных данных. Вызовы операций значений, могут иметь побочные эффекты, и выходные данные могут отличаться для каждого вызова, даже при вызове с одним и тем же аргументом.
Функция Представляет детерминированный вызываемый, который принимает один входной аргумент (возможно, значение кортежа) и возвращает один (возможно, значение кортежа) выходных данных. Вызовы функций значений, не имеют побочных эффектов, и выходные данные всегда будут одинаковыми при одинаковых входных данных.