Система типов
С акцентом на квантовый алгоритм больше в сторону того, что должно быть достигнуто, а не на проблемном представлении с точки зрения структур данных, принимая более функциональную перспективу на проектирование языка является естественным выбором. В то же время система типов представляет собой мощный механизм, который можно использовать для анализа программ и других проверок времени компиляции, которые упрощают разработку надежного кода.
В целом система типов 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 |
Представляет определяемый пользователем тип, состоящий из именованных элементов различных типов. значения создаются при объявлении нового экземпляра. |
Операция | Представляет недетерминированный вызываемый, который принимает один входной аргумент (возможно, значение кортежа) и возвращает один (возможно, значение кортежа) выходных данных. Вызовы операций значений, могут иметь побочные эффекты, и выходные данные могут отличаться для каждого вызова, даже при вызове с одним и тем же аргументом. |
Функция | Представляет детерминированный вызываемый, который принимает один входной аргумент (возможно, значение кортежа) и возвращает один (возможно, значение кортежа) выходных данных. Вызовы функций значений, не имеют побочных эффектов, и выходные данные всегда будут одинаковыми при одинаковых входных данных. |