Verfahren der QuantenentwicklungQuantum Development Techniques

In diesem Abschnitt der Dokumentation werden die grundlegenden Konzepte beschrieben, die zum Erstellen von Quantenprogrammen in Q# und zum Interagieren mit diesen Programmen aus klassischen Anwendungen verwendet werden.This section of our documentation details the core concepts used to create quantum programs in Q#, and to interact with those programs from classical applications. Wir setzen ein gewisses Maß an Wissen im Bereich Quantencomputing voraus (z. B. wie unter Quantencomputingkonzepte beschrieben), aber Sie können von diesen Abschnitten auch profitieren, wenn Sie kein Experte sind.We assume some knowledge of quantum computing concepts, like those described in Quantum computing concepts, but you need not be an expert in quantum computing to get a lot from these sections.

Die Abschnitte enthalten die folgenden Informationen.Their contents are as follows.

  • Q#-Programmübersicht enthält eine Übersicht über den Zweck und die Funktionalität der Programmiersprache Q#.Q# program overview provides an overview of the purpose and functionality of the Q# programming language. Es wird verdeutlicht, dass Q# keine Sprache ist, um nur die Quantenmechanik zu simulieren, obwohl diese Funktionalität von unserem Simulator für den vollständig ausgelasteten Zustand natürlich bereitgestellt wird.In particular, it clarifies how Q# is not a language for merely simulating quantum mechanics---though that functionality is of course provided by our full state simulator. Stattdessen wurde Q# mit Blick auf die Zukunft konzipiert, und die zugehörigen Programme beschreiben, wie ein klassischer Steuerungscomputer mit Qubits interagiert.Rather, Q# was designed with an eye on the future, and its programs describe how a classical control computer interacts with qubits.

  • Unter Vorgänge und Funktionen werden die beiden aufrufbaren Elemente von Q# beschrieben: Vorgänge, für die Aktionen mit Qubits und Quantensystemen durchgeführt werden, und Funktionen, für die ausschließlich klassische Informationen genutzt werden.Operations and functions details the two callable types of the Q# language: operations, which include action on qubits and quantum systems; and functions, which strictly work with classical information. Quantencomputing wäre nicht möglich, ohne dass klassische Informationen und Quanteninformationen zusammenarbeiten.Without both classical and quantum information working in tandem, quantum computing would remain out of reach. In diesem Abschnitt wird beschrieben, wie Sie diese aufrufbaren Elemente in der Ablaufsteuerung eines Q#-Programms definieren und nutzen.This section describes how to define and use these callables within the control flow of a Q# program.

  • Unter Lokale Variablen wird die Rolle von Variablen in Q#-Programmen sowie deren effektive Nutzung beschrieben.Local variables describes the role of variables within Q# programs and how to leverage them effectively. Es wird vor allem der Unterschied zwischen unveränderlichen und veränderlichen Variablen und deren Zuweisung bzw. erneute Zuweisung beschrieben.In particular, you will learn the difference between immutable/mutable variables and how to assign/re-assign them.

  • Unter Arbeiten mit Qubits erhalten Sie Informationen zu den Features von Q#, die Sie verwenden können, um einzelne Qubits und Qubit-Systeme zu nutzen.Working with qubits describes the features of Q# that you can use to address individual qubits and systems of qubits. Hierbei geht es um deren Zuordnung, die Durchführung von entsprechenden Vorgängen und schließlich deren Messung.Specifically, that entails their allocation, performing operations on them, and ultimately their measurement. Darüber hinaus werden einige nützliche Verfahren der Ablaufsteuerung beschrieben.Additionally, you will learn some useful control flow techniques.

  • Unter Zusammenfügen des Gesamtbilds nutzen Sie die Verfahren aus den obigen Abschnitten zum Erstellen eines Programms, mit dem eine Quantenteleportation durchgeführt wird. Hierbei werden zwei klassische Bits genutzt, um für den vollständigen Zustand eines Qubits die Teleportation auf ein anderes Qubit durchzuführen.In Putting it all together, you will leverage the techniques from the sections above to create a program which performs quantum teleportation: using two classical bits to "teleport" the full state of one qubit onto another.

  • Unter Weitere Informationen werden erweiterte Verfahren vorgestellt, die hilfreich sein können, wenn Sie sich mit der komplexeren Quantenprogrammierung beschäftigen möchten.Going further introduces advanced techniques that can prove helpful as you move toward more complex quantum programming. Es werden die Nutzung von Vorgängen mit Typparametrisierung und Funktionen in Q# beschrieben, die eine Ablaufsteuerung höherer Ordnung ermöglichen, indem sie gegenüber den spezifischen Typen der Ein- bzw. Ausgabe agnostisch bleiben. Außerdem erhalten Sie Informationen zum Ausleihen von Qubits.In particular, we discuss the use of type-parameterized operations and functions in Q#, which enable higher-order control flow by remaining agnostic to the specific types of their input/output, as well as borrowing qubits. Letzteres unterscheidet sich von der grundlegenden Qubit-Zuordnung darin, dass für einen Q#-Vorgang „Dirty Qubits“ (ohne zwingende Initialisierung für einen bekannten Zustand) verwendet werden können, um Computingvorgänge zu unterstützen.The latter differs from basic qubit allocation in that a Q# operation may use "dirty" qubits---qubits not necessarily initialized to a known state---to assist computations.

  • Unter Testen und Debuggen werden einige Verfahren beschrieben, mit denen sichergestellt werden kann, dass sich Ihr Code wie gewünscht verhält.Testing and debugging details some techniques for making sure your code is doing what it is supposed to do. Aufgrund der allgemeinen Opazität von Quanteninformationen sind zum Debuggen eines Quantenprogramms ggf. spezielle Verfahren erforderlich.Due to the general opacity of quantum information, debugging a quantum program can require specialized techniques. Glücklicherweise unterstützt Q# nicht nur quantenspezifische, sondern auch viele klassische Debugverfahren, mit denen Programmierer bereits vertraut sind.Fortunately, Q# supports many of the classical debugging techniques programmers are used to, as well as those that are quantum-specific. Beispiele hierfür sind das Erstellen bzw. Ausführen von Komponententests in Q#, Einbetten von Assertionen in Werten und Wahrscheinlichkeiten in Ihrem Code und die Dump-Funktionen, mit denen der Zustand des Zielcomputers ausgegeben wird.These include creating/running unit tests in Q#, embedding assertions on values and probabilities in your code, and the Dump functions which output the state of target machine. Letzteres kann zusammen mit unserem Simulator für den vollständig ausgelasteten Zustand genutzt werden, um bestimmte Teile von Berechnungen zu debuggen, indem einige Einschränkungen für Quantenvorgänge umgangen werden (z. B. das Theorem zum Thema „Kein Klonen“).The latter can be used alongside our full state simulator to debug certain parts of computations by skirting some quantum limitations (e.g. the no-cloning theorem).

Quantencomputing