Система типов
Так квантовые алгоритмы ориентированы больше на результат, которого необходимо достичь, а не на представление задачи в терминах структур данных, естественным выбором стал функциональный подход к построению языка. В то же время система типов является эффективным механизмом для анализа программы и других проверок во время компиляции, упрощающих формулирование надежного кода.
В любом случае система типов 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,79769313486232e308, а также значение NaN (не число). |
Bool |
Представляет логические значения. Возможные значения: true или false . |
String |
Представляет текст как значение, состоящее из последовательности единиц кода UTF-16. |
Qubit |
Представляет непрозрачный идентификатор, по которому можно адресовать виртуальную квантовую память. Экземпляры значений типа Qubit создаются путем выделения. |
Result |
Представляет результат измерения, проецированного в собственное пространство квантового оператора с собственными значениями ±1. Возможные значения — Zero и One . |
Pauli |
Представляет однокубитную матрицу Паули. Возможные значения: PauliI , PauliX , PauliY и PauliZ . |
Range |
Представляет упорядоченную последовательность равномерно распределенных значений типа Int .
Значения могут представлять последовательности в порядке возрастания или убывания. |
Array | Представляет значения, каждое из которых содержит последовательность значений одного и того же типа. |
Кортеж | Представляет значения, каждое из которые содержит фиксированное число элементов разных типов. Кортежи, содержащие один элемент, эквивалентны этому элементу. |
Пользовательский тип | Представляет определяемый пользователем тип, состоящий из именованных и анонимных элементов разных типов. Экземпляры значений создаются путем вызова конструктора. |
Операция | Представляет недетерминированный вызываемый объект, принимающий один входной аргумент (возможно, кортеж) и возвращающий один результат (возможно, кортеж). Вызовы значений операций могут иметь побочные эффекты, и выходные данные могут различаться даже при одинаковых входных аргументах. |
Функция | Представляет детерминированный вызываемый объект, принимающий один входной аргумент (возможно, кортеж) и возвращающий один результат (возможно, кортеж). Вызовы значений функций не имеют побочных эффектов, и выходные данные при одинаковых входных аргументах всегда одинаковы. |