Desenvolver com Q# e .NETDevelop with Q# and .NET

O Q# foi criado para funcionar bem com linguagens .NET, como C# e F#.Q# is built to play well with .NET languages such as C# and F#. Neste guia, vamos demonstrar como utilizar o Q# com um programa anfitrião escrito numa linguagem .NET.In this guide, we demonstrate how to use Q# with a host program written in a .NET language.

Primeiro, vamos criar a aplicação Q# e o anfitrião .NET e, em seguida, demonstrar como chamar para Q# a partir do anfitrião.First we create the Q# application and .NET host, and then demonstrate how to call to Q# from the host.

Pré-requisitosPrerequisites

Criar uma biblioteca Q# e um anfitrião .NETCreating a Q# library and a .NET host

O primeiro passo é criar projetos para a biblioteca Q# e para o anfitrião .NET que vai chamar as operações e as funções definidas na biblioteca Q#.The first step is to create projects for your Q# library, and for the .NET host that will call into the operations and functions defined in your Q# library.

Siga as instruções no separador correspondente ao seu ambiente de desenvolvimento.Follow the instructions in the tab corresponding to your development environment. Se estiver a utilizar um editor que não seja o Visual Studio ou o VS Code, basta seguir os passos da linha de comandos.If you are using an editor other than Visual Studio or VS Code, simply follow the command prompt steps.

  • Criar uma nova biblioteca Q#Create a new Q# library

    dotnet new classlib -lang Q# -o quantum
    
  • Criar um projeto de consola C# ou F# novoCreate a new C# or F# console project

    dotnet new console -lang C# -o host  
    
  • Adicionar a biblioteca Q# como referência a partir do programa anfitriãoAdd your Q# library as a reference from your host program

    cd host
    dotnet add reference ../quantum/quantum.csproj
    
  • [Opcional] Criar uma solução para ambos os projetos[Optional] Create a solution for both projects

    dotnet new sln -n quantum-dotnet
    dotnet sln quantum-dotnet.sln add ./quantum/quantum.csproj
    dotnet sln quantum-dotnet.sln add ./host/host.csproj
    

Chamar o Q# a partir de .NETCalling into Q# from .NET

Quando os projetos estiverem configurados de acordo com as instruções acima, pode chamar o Q# a partir da aplicação de consola .NET.Once you have your projects set up following the above instructions, you can call into Q# from your .NET console application. O compilador Q# vai criar classes .NET para cada operação e função Q# que lhe permitem executar os seus programas quânticos num simulador.The Q# compiler will create .NET classes for each Q# operation and function that allow you to run your quantum programs on a simulator.

Por exemplo, a amostra de interoperabilidade .NET inclui o seguinte exemplo de uma operação Q#:For example, the .NET interoperability sample includes the following example of a Q# operation:

/// # Summary
/// Instantiates the oracle and runs the parameter restoration algorithm.
operation RunAlgorithm(bits : Bool[]) : Bool[] {
    Message("Hello, quantum world!");
    // construct an oracle using the input array
    let oracle = ApplyProductWithNegationFunction(bits, _, _);
    // run the algorithm on this oracle and return the result
    return ReconstructOracleParameters(Length(bits), oracle);
}

Para chamar esta operação a partir de .NET num simulador quântico, pode utilizar o método Run da classe RunAlgorithm .NET gerado pelo compilador Q#:To call this operation from .NET on a quantum simulator, you can use the Run method of the RunAlgorithm .NET class generated by the Q# compiler:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using static System.Diagnostics.Debug;

using Microsoft.Quantum.Simulation.Core;
using Microsoft.Quantum.Simulation.Simulators;

namespace Microsoft.Quantum.Samples
{
    static class Program
    {
        static async Task Main(string[] args)
        {
            var bits = new[] { false, true, false };
            using var sim = new QuantumSimulator();

            Console.WriteLine($"Input: {bits.ToDelimitedString()}");

            var restored = await RunAlgorithm.Run(sim, new QArray<bool>(bits));
            Console.WriteLine($"Output: {restored.ToDelimitedString()}");

            Assert(bits.Parity() == restored.Parity());
        }

        static bool Parity(this IEnumerable<bool> bitVector) =>
            bitVector.Aggregate(
                (acc, next) => acc ^ next
            );

        static string ToDelimitedString(this IEnumerable<bool> values) =>
            String.Join(", ", values.Select(x => x.ToString()));
    }
}

Passos seguintesNext steps

Agora que o Quantum Development Kit está configurado para aplicações Q# e para interoperabilidade com o .NET, pode escrever e executar o seu primeiro programa quântico.Now that you have the Quantum Development Kit set up for both Q# applications and interoperability with .NET, you can write and run your first quantum program.