Udostępnij przez


System typów

Z naciskiem na algorytm kwantowy jest bardziej w kierunku tego, co należy osiągnąć, a nie na reprezentacji problemu pod względem struktur danych, bardziej funkcjonalne spojrzenie na projekt języka jest naturalnym wyborem. Jednocześnie system typów jest zaawansowanym mechanizmem, który może służyć do analizy programu i innych testów czasu kompilacji, które ułatwiają formułowanie niezawodnego kodu.

Ogólnie rzecz biorąc, system typów Q# jest dość minimalistyczny, w tym sensie, że nie ma wyraźnego pojęcia klas lub interfejsów, ponieważ można ich używać z języków klasycznych, takich jak C# lub Java. Podejmujemy również nieco pragmatyczne podejście do przyrostowego postępu, tak aby niektóre konstrukcje nie zostały jeszcze w pełni zintegrowane z systemem typów. Przykładem są funktory, które mogą być używane w wyrażeniach, ale nie mają jeszcze reprezentacji w systemie typów. W związku z tym nie można ich obecnie przypisać ani przekazać jako argumentów, podobnie jak w przypadku typów parametryzowanych obiektów wywołujących. Oczekujemy, że przyrostowy postęp w rozszerzeniu systemu typów będzie bardziej kompletny i zrównoważymy natychmiastowe potrzeby z długoterminowymi planami.

Dostępne typy

Wszystkie typy w Q# są niezmienne .

Typ Opis
Unit Reprezentuje pojedynczy typ, którego jedyną wartością jest ().
Int Reprezentuje 64-bitową liczbę całkowitą ze znakiem. Wartości wahają się od -9 223 372 036 854 775 808 do 9223 372 036 854 775 807.
BigInt Reprezentuje podpisaną liczbę całkowitą wartości dowolnego rozmiaru.
Double Reprezentuje 64-bitową liczbę zmiennoprzecinkową o podwójnej precyzji. Wartości wahają się od -1,79769313486232e308 do 1,79769313486232e308, a także NaN (nie liczby).
Bool Reprezentuje wartości logiczne. Możliwe wartości to true lub false.
String Reprezentuje tekst jako wartości, które składają się z sekwencji jednostek kodu UTF-16.
Qubit Reprezentuje nieprzezroczystym identyfikator, za pomocą którego można rozwiązać problem z wirtualną pamięcią kwantową. Wartości typu Qubit są tworzone za pośrednictwem alokacji.
Result Reprezentuje wynik miary projektowej na przestrzenie eigencyjne operatora kwantowego z wartościami eigenvalues ±1. Możliwe wartości Zero lub One.
Pauli Reprezentuje macierz Pauli z jednym kubitem. Możliwe wartości to PauliI, PauliX, PauliYlub PauliZ.
Range Reprezentuje uporządkowaną sekwencję równych odstępów Int wartości. wartości mogą reprezentować sekwencje w kolejności rosnącej lub malejącej.
Tablica Reprezentuje wartości, które zawierają sekwencję wartości tego samego typu.
Krotka Reprezentuje wartości, z których każda zawiera stałą liczbę elementów różnych typów. Krotki zawierające pojedynczy element są równoważne elementowi, który zawierają.
struct Reprezentuje typ zdefiniowany przez użytkownika składający się z nazwanych elementów różnych typów. Wartości są tworzone podczas deklarowania nowego wystąpienia.
Operacja Reprezentuje niedeterministyczny wywoływany, który przyjmuje jeden (prawdopodobnie wartość krotki) argument wejściowy i zwraca jeden (prawdopodobnie wartość krotki) danych wyjściowych. Wywołania operacji wartości mogą mieć skutki uboczne, a dane wyjściowe mogą się różnić w przypadku każdego wywołania, nawet w przypadku wywołania z tym samym argumentem.
Funkcja Reprezentuje deterministyczny wywoływany, który przyjmuje jeden (prawdopodobnie wartość krotki) argument wejściowy i zwraca jeden (prawdopodobnie wartość krotki) danych wyjściowych. Wywołania funkcji wartości nie mają skutków ubocznych, a dane wyjściowe zawsze będą takie same, biorąc pod uwagę te same dane wejściowe.