유니코드
Lifthrasiir (토론 | 기여)님의 2019년 7월 21일 (일) 03:31 판 (새 문서: 나루는 '''유니코드'''를 지원한다. 이는 다음 사항을 포괄한다. * 모든 코드 문자와 문자열의 각 원소로 유니코드 스...)
나루는 유니코드를 지원한다. 이는 다음 사항을 포괄한다.
- 모든 코드 문자와 문자열의 각 원소로 유니코드 스칼라 값만을 허용한다.
- 코드 문자 인코딩으로 UTF-8과 UTF-16만을 지원한다.
- 기존 문자 인코딩을 직접 다루지 않고 유니코드와 상호 변환하는 기능만 제공한다.
- 별도의 제약이 없을 경우 유니코드 스칼라 값이나 문자 및 문자열을 다루는 모든 기능은 유니코드 표준을 따른다.
유니코드 표준의 버전은 유니코드 문자열을 사용하는 것 자체에는 영향을 미치지 않으나 연산에 영향을 미치는데, 모든 나루 구현체는 적어도 12.1.0(2019년 5월 발표)이나 그 이후 버전을 사용하여야 한다.
논의
역사적으로 프로그래밍 언어의 유니코드 지원에는 다음과 같이 여러 측면이 있었으나 다양한 문제가 있었기 때문에, 현대적인 설계를 거친 언어는 거의 모두 유니코드"만"을 지원하는 방향으로 수렴하게 되었고 나루도 예외는 아니다.
- 유니코드를 아예 지원하지 않는 언어(예: 루아)는 결국 바이트 문자열을 특정 인코딩(보통 UTF-8)으로 해석하여 처리하는 기능을 억지로 추가하게 된다.
- 유니코드 스칼라 값을 기본으로 하되 임의의 바이트도 허용하는 언어(예: Go)는 기존 문자 인코딩을 다뤄야 할 경우나, 올바른 유니코드 문자열만을 요구하는 곳에 쓸 경우에 문제를 일으킬 수 있다.
- 유니코드 스칼라 값 대신 코드 포인트를 기본으로 하는 언어(예: C 샵, 자바, 자바스크립트)는 역사적으로 UTF-16이 흔히 쓰이던 시절의 잔재로, UTF-8이 더 흔한 현대에는 적절하지 않다.
- 유니코드 이외의 다른 문자 인코딩을 지원하는 언어(예: 루비)는 유니코드 문자 인코딩이 널리 쓰이게 되면서 더 이상 복잡도가 정당화되지 않게 되었다.
유니코드 스칼라 값을 문자열의 원소로 사용하는 것은 엄밀한 의미에서 실 사용자가 받아들이는 문자의 정의와는 어긋나기 때문에 "문자"로 칭하지 않는다. (유사 개념 참고) 이로부터 더 나아가서 문자열의 원소를 자소 클러스터(grapheme cluster)로 권장 내지 강제하는 언어(예: 펄 6, 스위프트)도 존재하는데, 아직 그 효용이 증명되지 않았으며 아무 코드 포인트 내지 유니코드 스칼라 값이나 허용하는 대부분의 시스템과의 호환성을 무시할 수 없어서 보류하였다.