특성은 컴파일러가 Q# 선언 처리 방법을 변경하는 데 사용하는 선언에 추가 정보를 연결합니다. 특성은 선행 @ 기호와 특성 이름 및 괄호로 괄호가 지정된 인수 목록으로 작성되며, 특성이 적용되는 선언 바로 앞에 배치됩니다.
@EntryPoint()
operation Main() : Result {
use q = Qubit();
H(q);
MResetZ(q)
}
선언 앞에 각 특성을 자체 줄에 배치하여 동일한 선언에 둘 이상의 특성을 적용할 수 있습니다.
Q# 는 다음과 같은 기본 제공 특성을 지원합니다.
@EntryPoint()
이 특성은 @EntryPoint() 작업 또는 함수를 프로그램 실행의 시작점으로 표시합니다. 진입점을 지정하지 않으면 컴파일러가 작업에서 Main() 실행을 시작합니다(있는 경우). 대신 입력 매개 변수를 @EntryPoint() 사용하지 않는 호출 가능 항목에 특성을 배치하여 진입점으로 만들 수 있습니다.
@EntryPoint()
operation MeasureOneQubit() : Result {
use q = Qubit();
H(q);
MResetZ(q)
}
프로젝트의 일부가 아닌 단일 .qs 파일에서 작업하는 경우 대상 프로필 이름(예: @EntryPoint(Base), @EntryPoint(Adaptive_RI)@EntryPoint(Adaptive_RIF)또는 @EntryPoint(Unrestricted)) 에 전달하여 프로그램의 QIR 대상 프로필을 설정할 수도 Q# 있습니다. 자세한 내용은 Quantum 컴퓨팅 대상 프로필을 참조하세요.
@Config(...)
이 특성은 @Config(...) 현재 대상 프로필의 기능을 기반으로 선언을 컴파일에 포함해야 하는 시기에 대한 사전 처리 정보를 제공합니다. 이렇게 하면 라이브러리가 다양한 기능을 가진 대상에 대해 호출 가능한 다양한 구현을 제공할 수 있습니다.
유효한 인수는 Base,Adaptive, IntegerComputations, FloatingPointComputationsBackwardsBranching, HigherLevelConstructs및 Unrestricted. 기능을 사용할 수 없는 경우에만 선언을 not 포함하도록 연산자를 사용하여 인수를 부정할 수 있습니다.
@Config(Adaptive)
operation MeasureAndReset(q : Qubit) : Result {
let result = M(q);
if result == One {
X(q);
}
result
}
@Config(not Adaptive)
operation MeasureAndReset(q : Qubit) : Result {
MResetZ(q)
}
@Test()
이 특성은 @Test() 호출 가능을 단위 테스트로 바꿉니다. 입력 매개 변수를 사용하지 않는 호출 가능 항목에만 적용할 수 있습니다. 이 특성으로 표시된 테스트는 Visual Studio Code 테스트 보기에 표시되며, 여기서 개별적으로 또는 그룹으로 실행할 수 있습니다. 자세한 내용은 프로그램 테스트 및 디버깅을 Q# 참조하세요.
@Test()
operation TestCase() : Unit {
Fact(1 + 1 == 2, "Expected 1 + 1 to equal 2.");
}
내장 호출 가능 요소에 대한 특성
다음 특성은 QIR(Quantum Intermediate Representation) 코드 생성 중에 내장 호출 가능 개체를 처리하는 방법을 설명합니다. 주로 하위 수준 내장 작업을 정의하는 라이브러리 및 하드웨어 작성자가 사용합니다.
@SimulatableIntrinsic()
이 특성은 @SimulatableIntrinsic() 호출 가능 개체를 QIR 코드 생성에 대한 기본 호출 가능으로 처리해야 하며, 제공된 본문은 시뮬레이션 중에만 사용됨을 나타냅니다. 이렇게 하면 대상 하드웨어에 불투명한 작업에 대한 시뮬레이션 구현을 제공할 수 있습니다.
@Measurement()
특성은 @Measurement() 내장 호출 가능 항목이 측정값임을 나타냅니다. 작업은 생성된 QIR에서 되돌릴 수 없는 것으로 표시되고 출력 Result 값은 생성된 함수의 인수로 이동됩니다.
@Reset()
특성은 @Reset() 내장 호출 가능 항목이 다시 설정되었음을 나타냅니다. 이 작업은 생성된 QIR에서 되돌릴 수 없는 것으로 표시됩니다.