같은 결과와 실행 한도

같은 실행 조건으로 규칙을 반복하고 정상 결과와 자원 종료를 구별합니다.

같은 실행 조건으로 규칙을 다시 실행해 결과와 출력과 경고와 진단을 비교할 수 있습니다. 소스와 입력, 평가기, 언어 프로파일, 자원 한도를 같게 유지하세요. 같은 조건에서 같은 결과를 내는 성질을 결정성이라고 하고, 한도 묶음을 자원 프로파일이라고 부릅니다.

자원 종료 읽기

임베딩 예제에서는 결정 평가기에 (if (< input 15) "allow" "deny")와 정수 입력 14를 전달합니다. 규칙은 "allow"를 반환합니다. 검사한 JSON에는 다음 필드가 들어 있습니다.

JSON
{
  "category": "semantic-complete",
  "code": "complete"
}

별도의 평가 한도 파일에서 eval_work를 0으로 바꾸고 준비한 규칙을 다시 실행합니다. 새 기록에는 다음 필드가 들어 있습니다.

JSON
{
  "category": "semantic-exhausted",
  "code": "eval_work"
}

두 번째 실행은 작업량 한도에서 멈춥니다. 규칙의 답 대신 자원 종료를 기록합니다. 두 embed evaluate 명령은 결과 파일을 정상 생성했으므로 모두 종료 코드 0을 냅니다. 결과를 구별하려면 category와 code를 읽으세요. 가이드에 필요한 파일과 명령이 모두 있습니다.

실행 조건 고정하기

결정성은 같은 실행 조건에서 같은 결과를 낸다는 뜻입니다. 실행을 반복하거나 비교할 때 다음 정보를 함께 기록하세요.

고정할 항목기록할 내용
소스와 입력제출한 정확한 바이트
평가기정확한 실행 파일 또는 WASM 파일과 식별자
언어 프로파일지원하는 형식과 프로시저
자원 프로파일선택한 한도와 자원 사용량 계수기 버전
출력 채널값과 stdout과 경고와 진단, 각 채널의 순서

자원 사용량 계수기는 선택한 평가기의 규칙에 따라 작업량을 셉니다. 벽시계 시간은 실제로 흐른 시간을 잽니다. 런타임 구현을 바꾸면 작업량 수치도 달라질 수 있으므로 정확한 사용량은 같은 구현끼리 비교하세요.

비교 보고서를 만들 때는 실행 전에 고른 시험 입력과 기대 결과도 유지하세요. 보고서에는 해당 사례와 실행기와 프로파일과 채널이 적힙니다. 그 범위 안에서 일치와 불일치와 비교 불가를 읽습니다.

실행 방식에 맞는 한도 고르기

자원 프로파일은 한 실행 방식에 적용할 한도를 묶습니다. 실행 방식에 따라 입출력 바이트, 평가 단계, 제어 깊이, 할당량을 다룹니다. 프로그램은 실행을 마치거나 실행 중 오류를 보고하거나 한도를 넘기 전에 멈춥니다.

기준 인터프리터와 리스펙스 VM은 신뢰하는 소스로 규칙 작성과 로컬 자동화와 비교를 수행합니다. embed 평가기는 명시한 작업량과 할당량 한도로 전달받은 규칙을 실행합니다. 준비나 평가를 시작할 때마다 새 인스턴스를 만듭니다. 준비 한도와 평가 한도는 서로 별개입니다.

엔진 결함과 운영 중단은 규칙의 값, 실행 중 오류, 자원 종료와 구별하세요. 평가기는 이를 엔진 상태로 기록합니다.

올바른 꼬리 호출 · 평가기 참조