Share via


Azure Quantum Development Kit(최신 QDK)의 새로운 기능

최신 QDK는 Q# 언어 및 개발 도구의 최신 버전입니다. 더 작은 공간과 더 빠른 성능을 갖춘 이 확장은 원클릭 Visual Studio Code 확장이며 언어 개선, 통합 Python 및 Jupyter Notebook 지원, 새 구문 강조 표시, 디버거 지원, 다중 파일 프로젝트 지원, 오류 메시지 및 통합 Azure 연결을 제공합니다. 이전 클래식 QDK의 종속성을 제거함으로써 이제 Windows, Mac, Linux 및 웹에서 실행되는 진정한 플랫폼 독립적입니다.

Visual Studio Code 통합

최신 QDK는 Visual Studio Code 개발 환경에 긴밀하게 통합되어 있습니다. 새로운 기능은 다음과 같습니다.

  • Azure 계정 없이 로컬로 실행할 수 있는 VS Code용 새 리소스 예측 도구
  • 중단점, 스테핑 및 로컬 및 양자 변수 뷰를 사용한 통합 디버깅을 위한 Q# 디버거
  • 다중 파일 Q# 프로젝트 지원
  • 오류 메시징, 구문 강조 표시, 코드 완성, 가리키기 정보 및 정의로 이동으로 언어 서버 개선
  • 통합 Azure 작업 영역 연결 및 작업 제출
  • 기본 제공 스파스(노이즈 프리) 시뮬레이터
  • 셀 및 구문 강조 표시의 Q# 코딩과 Jupyter Notebook 통합
  • Q# 프로그램에 대한 QIR 생성

제공 예정

사용되지 않는 기능

Q# 언어 업데이트

양자 검색 및 혁신이 빠른 속도로 계속 발전함에 따라 Q# 언어 및 Azure Quantum 개발 키트는 현재 및 미래의 양자 개발 요구 사항을 충족하기 위해 계속 진화하고 있습니다. 다음 섹션에서는 최신 QDK의 변경, 업데이트 및 개선 사항에 대해 설명합니다.

언어 구문 업데이트

식 기반

이제 Q# 언어는 문 기반이 아닌 기반입니다. 이렇게 하면 if-expression을 다른 식에 포함하는 것과 같은 기존 구문을 새로 사용할 수 있습니다.

let x = if check { 0 } else { 1 };

암시적 반환

또한 이전 예제에서는 블록 끝에 후행 세미콜론이 없는 문을 사용하여 해당 블록의 값을 반환합니다. 이 패턴은 호출 가능한 에서 명시적 반환 식 대신 사용할 수 있습니다.

function ReturnsThree() : Int {
    return 3;
}

function AlsoReturnsThree() : Int {
    3
}

블록 식

Q#은 이제 여러 줄을 구성하고 변수를 scope 값을 반환할 수 있는 블록 식을 지원합니다.

let flip = {
    use q = Qubit();
    H(q);
    if M(q) == One {
        X(q);
        "Heads"
    } else {
        "Tails"
    }
} ;

문으로서의 항목

newtype, operation, function 등의 항목은 open 이제 로컬 scope 내에서 문으로 표시할 수 있습니다. 이렇게 하면 범위가 지정된 포함뿐만 아니라 로컬 도우미 형식 및 호출 가능 개체를 정의할 수 있습니다. 예를 들어 로컬 도우미 함수는 필요하기 직전에 정의할 수 있습니다.

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]
}

함수 SubOne 와 네임스페이스의 Microsoft.Quantum.Arrays 열기는 모두 함수로 범위가 ShowDecrement 지정되며 그 밖의 코드에는 영향을 미치지 않습니다.

이름 그림자

이제 Q#을 사용하면 이전에 허용되지 않았던 확인된 이름을 섀도링할 수 있습니다. 이렇게 하면 변경 가능한 변수 없이 변수 또는 호출 가능한 이름을 포함하는 코드를 더 쉽게 재사용할 수 있습니다.

function Shadowing(input : Int) : Double {
    let input = 2 * input;
    let output = Calculate(input);
    let output = IntAsDouble(output);
    return output;
}

지역 변수에 대한 명시적 형식

이제 호출 가능한 인수 선언의 형식과 동일한 구문을 사용하여 로컬 변수를 명시적으로 입력할 수 있습니다.

let x : Int[] = [];

명시적 형식은 필요하지 않지만 와 같은 Length제네릭을 허용하는 함수의 형식 모호성을 확인할 때 도움이 될 수 있습니다. 구문을 Length<Int[]>([]); 사용하여 제네릭 함수 호출에 구체적인 형식을 추가하는 이전 패턴은 더 이상 지원되지 않습니다.

암시적 네임스페이스 전주곡

이제 이름 확인에는 다른 확인된 이름이 대체되지 않는 한 열린 것처럼 처리되는 네임스페이스 집합인 암시적 전주곡이 통합됩니다. 이러한 방식으로 처리되는 네임스페이스는 , Microsoft.Quantum.CanonMicrosoft.Quantum.Intrinsic입니다Microsoft.Quantum.Core. 별칭을 사용하거나 잠재적 충돌을 구분하는 경우를 제외하고는 명시적으로 열 필요가 없습니다.

표준 라이브러리

Q# 표준 라이브러리는 이제 컴파일러 및 런타임과 동일한 리포지토리에서 호스트되며 최상위 라이브러리 폴더에서 찾을 수 있습니다. 에서 계속 액세스할 수 있는 클래식 Q# 라이브러리에서 모든 기능과 기능이 마이그레이션된 https://github.com/microsoft/QuantumLibraries것은 아닙니다. 프로그램에 이전 라이브러리의 항목이 필요한 경우 해당 항목과 종속성을 원본 프로그램에 복사할 수 있습니다. 라이브러리 기능이 워크플로에 중요하고 새 표준 라이브러리에 포함되는 것으로 간주되어야 하는 경우 세부 정보와 함께 GitHub 문제를 제출하세요.

Simulation

스파스 시뮬레이션은 기본적으로

최신 QDK는 기본 제공 스파스 상태 양자 시뮬레이터를 로컬 시뮬레이션의 기본값 target 으로 사용합니다. 이 시뮬레이터는 Rust로 작성되었으며 QIR Runner 리포지토리에서 제공되므로 WASM으로 컴파일하고 다양한 환경에서 실행할 수 있습니다. 현재 QDK에서 사용할 수 있는 유일한 시뮬레이션 백 엔드이지만 다른 백 엔드는 향후 통합을 위해 고려 중입니다. 스파스 시뮬레이션 디자인에 대한 자세한 내용은 스파스 시뮬레이션 을 사용하여 대규모 양자 알고리즘 테스트를 참조하세요.

큐비트 릴리스에 대한 엄격한 검사

클래식 QDK는 지금까지 큐비트가 지면 또는 |0⟩ 상태여야 하는 요구 사항을 완화한 후 scope 종료 시 해제되므로 시뮬레이터가 큐비트를 자동으로 재설정하므로 측정되고 더 이상 작동되지 않은 큐비트도 해제할 수 있습니다. 그러나 이러한 자동 재설정이 존재하지 않고 큐비트가 예기치 않은 상태에서 재사용될 수 있는 실제 양자 하드웨어에서 동일한 프로그램이 실행될 때 혼동을 일으켰습니다. 최신 QDK의 경우 릴리스 시 큐비트가 기본 상태여야 하므로 더 엄격한 동작으로 돌아갔습니다. 이렇게 하면 알고리즘 작성자가 하드웨어에서 실행하기 위한 준비에서 정확성을 위해 알고리즘의 동작을 확인할 수 있습니다.

분해된 다중 제어 게이트

최신 QDK는 이제 다중 제어 게이트에 분해 전략을 사용합니다. 다중 제어 게이트가 쉽게 구현되는 시뮬레이션에 사용할 수 있는 바로 가기를 활용하지는 않지만 물리적 양자 시스템의 동작과 더 밀접하게 일치합니다. 즉, 제어 큐비트가 많은 게이트를 수행하면 하드웨어에서 실행하기 위해 컴파일할 때와 동일한 방식으로 추가 큐비트 할당 및 준비 게이트가 발생합니다. 사용되는 분해 알고리즘에 대한 자세한 내용은 표준 라이브러리의 구현을 참조하세요.

QIR 생성

최신 QDK는 비트코드(.bc)를 사용하는 대신 LLVM(.ll)의 텍스트 표현을 생성하여 QIR을 생성합니다. 비트코드를 허용하는 대부분의 targets 도구와 PyQIRQIR Runner와 같은 도구를 포함하여 텍스트 LLVM을 구문 분석할 수도 있습니다.

최신 QDK는 현재 QIR 기본 프로필과 호환되는 프로그램의 경우 QIR 생성으로 제한됩니다. 기본 프로필 컴파일이 구성되면 컴파일러 및 VSCode 확장은 와 target호환되지 않는 패턴에 대한 오류를 생성합니다. 컴파일러는 특정 컴파일과 관련이 있음을 나타내는 특성이 있는 항목의 컴파일 targets을 조건부로 건너뛸 수도 있습니다.

@Config(Unrestricted)
function ResultAsBool(input : Result) : Bool {
    input == One
}