Co nowego w zestawie Azure Quantum Development Kit (modern QDK)
Nowoczesny zestaw QDK to najnowsza wersja języka Q# i narzędzi programistycznych. Dzięki mniejszej wydajności i mniejszej wydajności jest to jednokrotne rozszerzenie Visual Studio Code oraz ulepszenia języka funkcji, zintegrowana obsługa języka Python i Jupyter Notebook, wyróżnianie nowej składni, obsługa debugera, obsługa projektów z wieloma plikami, komunikaty o błędach i zintegrowana łączność platformy Azure. Eliminując zależności poprzedniego klasycznego zestawu QDK, jest ona teraz naprawdę niezależna od platformy, działająca w systemach Windows, Mac, Linux i sieci Web.
Linki umożliwiające rozpoczęcie pracy
- Aby uzyskać instrukcje instalacji, zobacz Rozpoczynanie pracy z zestawem Azure Quantum Development Kit (modern QDK).
- Aby uzyskać porady dotyczące migrowania istniejących programów kwantowych do nowoczesnego zestawu QDK, zobacz Migrowanie kodu Q# do nowoczesnego zestawu QDK.
- Aby zapoznać się z przykładami tworzenia i przesyłania zadań języka Q#, Jupyter Notebook i Python do usługi Azure Quantum, zobacz Wprowadzenie do programów języka Q# i programu VS Code.
integracja Visual Studio Code
Nowoczesny zestaw QDK jest ściśle zintegrowany ze środowiskiem deweloperów Visual Studio Code. Nowe funkcje obejmują:
- Nowy narzędzie do szacowania zasobów dla programu VS Code, które można uruchomić lokalnie bez konta platformy Azure
- Debuger języka Q# do zintegrowanego debugowania z punktami przerwania, krokami oraz widokiem zmiennych lokalnych i kwantowych
- Obsługa projektów języka Q# z wieloma plikami
- Ulepszenia serwera językowego dzięki komunikatom o błędach, wyróżnianiu składni, uzupełnianiu kodu, najechaniu kursorem na informacje i przechodzeniu do definicji
- Zintegrowana łączność obszaru roboczego platformy Azure i przesyłanie zadań
- Wbudowany symulator rozrzedliwy (wolny od szumu)
- Jupyter Notebook integracji z kodowaniem języka Q# w komórkach i wyróżnianiu składni
- Generowanie QIR dla programów języka Q#
Już wkrótce
- Zintegrowane hybrydowe przetwarzanie z profilem adaptacyjnym nie jest jeszcze obsługiwane przy użyciu nowoczesnego zestawu QDK. Jeśli musisz uruchamiać projekty przetwarzania hybrydowego, zobacz Kontynuuj pracę w klasycznym zestawie QDK.
Przestarzałe funkcje
- Obsługa programu Visual Studio
- Obsługa języków i projektów platformy .NET
- Jądra IQ# i poleceń magic dla notesów Jupyter Notebook. Aby uzyskać szczegółowe informacje na temat korzystania z języka Q# i notesów Jupyter Notebook, zobacz Jupyter Notebook integracji i migrowania kodu.
Aktualizacje języka Q#
Ponieważ odkrycia kwantowe i innowacje nadal ewoluują w szybkim tempie, język Q# i zestaw Azure Quantum Development Kit nadal ewoluują w celu spełnienia bieżących i przyszłych potrzeb związanych z programowaniem kwantowym. W poniższych sekcjach opisano zmiany, aktualizacje i ulepszenia nowoczesnego zestawu QDK.
Aktualizacje składni języka
Oparte na wyrażeniach
Język Q# jest teraz oparty na wyrażeniach zamiast opartych na instrukcjach. Umożliwia to nowe użycie istniejącej składni, takiej jak osadzanie wyrażenia if w innym wyrażeniu:
let x = if check { 0 } else { 1 };
Niejawny zwrot
W poprzednim przykładzie skorzystamy również z instrukcji using bez końcowego średnika na końcu bloku, aby zwrócić wartość z tego bloku. Tego wzorca można użyć zamiast jawnych wyrażeń zwracanych w wywołaniu:
function ReturnsThree() : Int {
return 3;
}
function AlsoReturnsThree() : Int {
3
}
Wyrażenia blokowe
Język Q# obsługuje teraz wyrażenia blokowe, które mogą organizować wiele wierszy, zmiennych zakresu i zwracać wartość:
let flip = {
use q = Qubit();
H(q);
if M(q) == One {
X(q);
"Heads"
} else {
"Tails"
}
} ;
Elementy jako instrukcje
Elementy, takie jak newtype
, operation
, function
i mogą open
teraz być wyświetlane jako instrukcje w zakresie lokalnym. Pozwala to na zdefiniowanie lokalnych typów pomocników i elementów wywoływanych, a także zakres zawiera. Na przykład funkcję pomocnika lokalnego można zdefiniować tuż przed jej potrzebami:
function ShowDecrement() : Unit {
open Microsoft.Quantum.Arrays;
let before = [1, 2, 3];
function SubOne(in : Int) : Int {
in - 1
}
let after = Mapped(SubOne, before);
// after will be [0, 1, 2]
}
Zarówno funkcja SubOne
, jak i otwarcie Microsoft.Quantum.Arrays
przestrzeni nazw są ograniczone do ShowDecrement
funkcji i nie mają wpływu na kod poza tym.
Cieniowanie nazw
Język Q# umożliwia teraz cieniowanie rozpoznanych nazw, w których wcześniej było to niedozwolone. Dzięki temu można łatwiej używać kodu, który zawiera zmienne lub nazwy wywoływane bez konieczności wprowadzania zmiennej modyfikowalnej:
function Shadowing(input : Int) : Double {
let input = 2 * input;
let output = Calculate(input);
let output = IntAsDouble(output);
return output;
}
Jawne typy zmiennych lokalnych
Zmienne lokalne można teraz jawnie wpisać przy użyciu tej samej składni co typy dla wywoływanych deklaracji argumentów:
let x : Int[] = [];
Jawne typy nie są wymagane, ale czasami mogą być przydatne podczas rozpoznawania niejednoznaczności typów dla funkcji, które akceptują typy ogólne, takie jak Length
. Poprzedni wzorzec obsługi tego — dodawanie konkretnych typów do wywołania funkcji ogólnej z taką składnią jak Length<Int[]>([]);
— nie jest już obsługiwane.
Preludium niejawnej przestrzeni nazw
Rozpoznawanie nazw zawiera teraz niejawne preludium, które jest zestawem przestrzeni nazw, które są traktowane tak, jakby zostały otwarte, o ile żadne inne rozpoznane nazwy nie zastępują ich. Przestrzenie nazw, które są traktowane w ten sposób, to Microsoft.Quantum.Core
, Microsoft.Quantum.Canon
i Microsoft.Quantum.Intrinsic
. Nie trzeba ich jawnie otwierać, z wyjątkiem sytuacji, gdy używasz aliasów lub inaczej różni się od potencjalnych konfliktów.
Standardowa biblioteka
Standardowa biblioteka języka Q# jest teraz hostowana w tym samym repozytorium co kompilator i środowisko uruchomieniowe i znajduje się w folderze biblioteki najwyższego poziomu. Nie wszystkie funkcje i funkcje zostały zmigrowane z klasycznych bibliotek języka Q#, do których nadal można uzyskać dostęp pod adresem https://github.com/microsoft/QuantumLibraries. Jeśli element z poprzedniej biblioteki jest wymagany dla programu, ten element i wszelkie zależności można skopiować do programu źródłowego. Jeśli jakakolwiek funkcja biblioteki ma kluczowe znaczenie dla przepływu pracy i powinna być brana pod uwagę podczas dołączania do nowej biblioteki standardowej, zgłoś problem z usługą GitHub ze szczegółami.
Symulacja
Symulacja rozrzedliwająca domyślnie
Nowoczesny zestaw QDK używa wbudowanego, rozrzedzonych symulatorów kwantowych stanu jako domyślnego target dla lokalnej symulacji. Ten symulator jest napisany w języku Rust i pochodzi z repozytorium QIR Runner , co umożliwia kompilowanie aplikacji WASM i uruchamianie w różnych środowiskach. Obecnie jest to jedyne zaplecze symulacji dostępne w zestawie QDK, choć inne zaplecza są brane pod uwagę pod kątem przyszłej integracji. Aby uzyskać więcej informacji na temat rozrzednego projektu symulacji, zobacz Testowanie dużych algorytmów kwantowych przy użyciu rozrzedliwej symulacji.
Bardziej rygorystyczne kontrole wersji kubitu
Klasyczny zestaw QDK historycznie złagodził wymaganie, aby kubity znajdowały się w stanie ziemi lub |0⟩ przed zwolnieniem na końcu ich zakresu, tak aby kubit, który został zmierzony i nie działał dalej, był również bezpieczny do zwolnienia, ponieważ symulator automatycznie resetuje kubit. Jednak spowodowało to zamieszanie, gdy ten sam program został uruchomiony na rzeczywistym sprzęcie kwantowym, w którym takie automatyczne resetowanie nie jest obecne, a kubity mogą być ponownie używane w nieoczekiwanym stanie. W przypadku nowoczesnego zestawu QDK wróciliśmy do ostrzejszego zachowania wymuszania, że kubity muszą znajdować się w stanie ziemi po wydaniu. Pomaga to autorom algorytmów weryfikować zachowanie algorytmu pod kątem poprawności w ramach przygotowań do działania na sprzęcie.
Rozłożone wielokontrolowane bramy
Nowoczesny zestaw QDK używa teraz strategii dekompozycji dla wielokontrolowanych bram. Chociaż nie korzysta to ze skrótów dostępnych do symulacji, w których bramy sterowane wieloma funkcjami są łatwo implementowane, jest ona ściślej zgodna z zachowaniem fizycznych systemów kwantowych. Oznacza to, że wykonanie bramy z dużą liczbą kubitów sterujących spowoduje naliczenie dodatkowych alokacji kubitów i bram przygotowania, tak samo jak w przypadku kompilacji na potrzeby wykonywania na sprzęcie. Aby uzyskać więcej informacji na temat używanych algorytmów dekompozycji, zobacz implementację w bibliotece standardowej.
Generowanie QIR
Nowoczesny zestaw QDK tworzy QIR, generując tekstową reprezentację maszyny WIRTUALNEJ LLVM (.ll) zamiast używać kodu bitowego (bc). Większość targets narzędzi, które akceptują kod bitowy, może również analizować tekstową maszynę LLVM, w tym narzędzia, takie jak PyQIR i QIR Runner.
Nowoczesny zestaw QDK jest obecnie ograniczony do generowania QIR dla programów zgodnych z profilem podstawowym QIR. Po skonfigurowaniu kompilacji profilu podstawowego kompilator i rozszerzenie VSCode generują błędy dla wzorców, które nie są zgodne z programem target. Kompilator może również warunkowo pominąć kompilację elementów, które mają atrybuty wskazujące, że są specyficzne dla konkretnej kompilacji targets:
@Config(Unrestricted)
function ResultAsBool(input : Result) : Bool {
input == One
}
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla