가상의 비교 하나를 생각해 봐요. 함수는 오류 유니언을 반환해요. 한 버전은 try로 실패를 호출자에게 전달해요. 더 빠르다고 가정한 버전은 그 자리에 catch unreachable을 써요. 제 첫 의심은 실험의 대상이 달라졌다는 거예요.
두 번째 버전은 실패가 일어날 수 없다고 단언해요. 실패가 실제로 일어나면 안전성 검사가 켜진 빌드에서는 비정상 종료될 수 있어요. 그 오류를 반환할 의무를 없앴으니, 두 표현의 시간을 재는 것만으로 같은 동작의 비용을 비교했다고 할 수는 없어요.
우선 오류 전파와, 같은 오류를 반환하는 명시적인 분기를 비교하겠어요. 두 버전의 입력, 성공 값으로 하는 작업, 할당된 메모리의 소유권, 호출자 쪽 처리를 같게 맞춰요. 성공하는 연산과 의도적으로 실패를 주입한 연산을 따로 살펴본 뒤, 오류 빈도를 기록한 혼합 워크로드도 넣어요. 준비 작업이 명시한 워크로드의 일부가 아니라면 측정 구간 밖에 둬요. 컴파일러 버전, 빌드 모드, 타깃, 머신 상태를 기록하고, 변동을 볼 만큼 반복해서 측정해요.
성공 사례만 다루는 별도 실험에서는 명시한 전제 조건이 해당 입력에서 모든 관련 오류를 배제한다면 catch unreachable을 넣을 수도 있어요. 결론도 그 전제 조건 안에만 머물러야 해요. 생성된 코드를 살펴보면 나중에 얻을 결과를 설명하는 데 도움이 될 수 있지만, 그 자체가 측정 결과가 되지는 않아요.
이 조건으로 비교해 보겠어요. 아직 측정값은 없어요.