4 적합성

(1) 적합한 프로그램(conforming program)은 이 문서의 구문(Syntax)과 제약(Constraints)을 모두 지키는 소스들의 모음이다. 적합한 프로그램이 돌다가 결함을 내는 것은 적합성과 상관이 없다 — 결함은 프로그램의 뜻의 일부다(11.3).

(2) 적합한 처리기(conforming processor)는 다음을 모두 지킨다.

  1. 적합한 프로그램을 받아들이고, 이 문서가 정한 대로 돌린다.
  2. 구문이나 제약을 어긴 소스는 적재할 때 거절한다. 거절한 소스의 코드는 하나도 돌리지 않고, 상태를 적재 앞과 같게 둔다.
  3. 거절할 때 어긴 자리를 줄과 칸으로 알린다. 한 소스에서 처음 만난 위반 하나만 알려도 된다.
  4. 결함으로 멈출 때 결함의 갈래(부속서 B)와 그 자리의 줄을 알린다.
  5. 부속서 C 가 정한 최소 크기를 받아들인다.

(2a) 적합한 처리기는 모든 소스(적합하든 아니든)와, 받아들인 모든 바이트코드 컨테이너(pinax_load_bytecode)에 대해 상태의 덩이와 호스트가 준 메모리(넘겨받은 문자열, 묶은 전역, 공유 저장소) 밖을 읽거나 쓰지 않는다. 예산이 0 이 아닌 낱말의 실행은 정해진 명령 수 안에 돌아온다(19.5). 그렇지 못할 수 있는 컨테이너는 적재 때 거절한다(PINAX_ERR_FORMAT). 상(19.9), 공유 파일(19.7), 묶은 메모리는 호스트가 보증하는 자료다: 처리기는 그 모양을 검사하고, 바이트를 하나하나 검사하지는 않는다.

(3) 진단의 문장(이 문서의 표에 적힌 영어 문장)은 이 구현이 내는 것이다. 다른 처리기는 다른 문장을 낼 수 있다. 그러나 무엇을 거절하는지는 같아야 하고, 가리키는 자리는 어긴 토큰 안이어야 한다(이 구현은 토큰의 시작이나, 토큰 안에서 잘못이 드러난 바이트를 가리킨다). 줄과 칸은 1 부터 세고, 칸은 바이트 단위다.

(4) 처리기는 이 문서에 없는 낱말, 모듈, 호스트 함수를 더할 수 있다. 더한 것은 적합한 프로그램의 뜻을 바꾸지 못한다. 예약 낱말(6.6)과 이 문서가 정한 이름은 더한 것의 이름으로 쓰지 못한다.

(5) 이 문서가 “정하지 않는다” 고 적은 것(예: 실행 속도, 명령의 모양)은 처리기가 마음대로 한다. “처리기마다 다르다” 고 적은 것(예: 기본 용량)은 처리기가 문서로 밝혀야 한다.

참고

적재 때 거절하는 것과 돌 때 결함으로 멈추는 것의 경계는 이 언어의 중심이다. 타입, 스택의 깊이, 이름, 실패를 다뤘는지, owned 값을 한 번 넘겼는지는 모두 적재 때 정해진다. 돌 때에야 알 수 있는 것 — 값이 넘치는가, 번호가 범위 안인가 — 만 결함이 된다.