1.1. 소스 파일
이 절에서는 rok 소스 파일의 물리적 형식을 다룹니다. 즉, 파일이 디스크에 어떻게 인코딩되어 있어야 하는지, 그리고 컴파일러가 첫 바이트를 읽기 시작할 때 어떤 가정을 두는지 정의합니다.
1.1.1. 확장자
rok 소스 파일의 확장자는 .rok 입니다. 따라서 .no, .rokr 같은 다른 확장자는 rok 소스로 인식되지 않습니다.
1.1.2. 문자 인코딩
중요
소스 파일은 UTF-8 로 인코딩되어 있어야 합니다.
먼저 인코딩에 관한 기본 원칙은 다음과 같습니다. UTF-16, GBK, Shift_JIS 등 다른 인코딩으로 작성된 파일은 컴파일러가 즉시 거부합니다. 또한 인코딩 자동 추측은 시도하지 않는데, 추측이 빗나가는 경우가 더 잦기 때문입니다. 한편 BOM (U+FEFF) 이 파일 선두에 있으면 조용히 무시하지만, 본문 중간에 나타난 BOM 은 일반 코드포인트로 간주하며 식별자나 문자열 안에서만 의미를 갖습니다.
양방향 제어 문자 금지
양방향 (bidi) 제어 문자 U+202A-202E, U+2066-2069 는 소스 어디에 있든 (주석과 문자열 리터럴 포함) 컴파일 에러입니다. 표시되는 코드와 실제 토큰 순서가 달라지는 공격을 막기 위함입니다. 문자열에 이 문자가 필요하면 \u{202E} 같은 이스케이프로 적습니다.
1.1.3. 줄 종결자
다음 세 가지를 모두 한 논리적 줄의 끝으로 인식합니다.
- LF (
U+000A) - CRLF (
U+000D U+000A) - CR (
U+000D단독)
이 세 형태가 한 파일 안에 섞여 있어도 컴파일러는 받아들입니다. 파일이 어디서 만들어졌든 동작해야 하기 때문입니다. 다만 본 사양은 LF 단독을 권장 형태로 둡니다.
그 밖의 줄 분리 코드포인트, 예를 들어 U+2028 LINE SEPARATOR 나 U+2029 PARAGRAPH SEPARATOR 등은 줄 종결자로 간주하지 않습니다. 이들은 식별자나 문자열 안에서 일반 코드포인트로 등장합니다.
1.1.4. 라인 및 파일 크기 제한
본 사양은 라인 길이, 파일 크기, 식별자 길이의 상한을 정하지 않습니다. 컴파일러가 합리적인 한계를 두어도 무방하지만, 그 한계는 어디까지나 구현 결정이며 사양의 일부가 아닙니다.
1.1.5. 진단 메시지의 위치 단위
컴파일러 진단(에러, 경고) 은 파일, 줄, 컬럼으로 위치를 가리킵니다.
줄 번호는 1 부터 시작합니다. 컬럼은 그 줄의 처음부터 세는 코드포인트 1-base 인덱스이며, 바이트 수가 아니라 코드포인트 수임에 유의해야 합니다. 따라서 한글 같은 멀티바이트 문자도 컬럼 한 칸을 차지합니다. 또한 탭 (U+0009) 역시 컬럼 한 칸을 차지하며, 시각적 너비를 흉내내지는 않습니다.
이러한 규칙은 진단 표시를 기계가 처리하기, 즉 편집기나 LSP 가 다루기 쉽도록 하기 위한 것입니다. 시각적 정렬은 표시 도구의 책임으로 남겨 둡니다.