Unicode

유니코드

나루 위키
둘러보기로 가기 검색하러 가기

나루는 유니코드를 지원한다. 이는 다음 사항을 포괄한다.

유니코드 표준의 버전은 유니코드 문자열을 사용하는 것 자체에는 영향을 미치지 않으나 연산에 영향을 미치는데, 모든 나루 구현체는 적어도 12.1.0(2019년 5월 발표)이나 그 이후 버전을 사용하여야 한다.

? 유니코드 버전을 고정하지 않을 경우 재현 가능성에 영향을 줄 수 있다.

논의

역사적으로 프로그래밍 언어의 유니코드 지원에는 다음과 같이 여러 측면이 있었으나 다양한 문제가 있었기 때문에, 현대적인 설계를 거친 언어는 거의 모두 유니코드"만"을 지원하는 방향으로 수렴하게 되었고 나루도 예외는 아니다.

  • 유니코드를 아예 지원하지 않는 언어(예: 루아)는 결국 바이트 문자열을 특정 인코딩(보통 UTF-8)으로 해석하여 처리하는 기능을 억지로 추가하게 된다.
  • 유니코드 스칼라 값을 기본으로 하되 임의의 바이트도 허용하는 언어(예: Go)는 기존 문자 인코딩을 다뤄야 할 경우나, 올바른 유니코드 문자열만을 요구하는 곳에 쓸 경우에 문제를 일으킬 수 있다.
  • 유니코드 스칼라 값 대신 코드 포인트를 기본으로 하는 언어(예: C 샵, 자바, 자바스크립트)는 역사적으로 UTF-16이 흔히 쓰이던 시절의 잔재로, UTF-8이 더 흔한 현대에는 적절하지 않다.
  • 유니코드 이외의 다른 문자 인코딩을 지원하는 언어(예: 루비)는 유니코드 문자 인코딩이 널리 쓰이게 되면서 더 이상 복잡도가 정당화되지 않게 되었다.

유니코드 스칼라 값을 문자열의 원소로 사용하는 것은 엄밀한 의미에서 실 사용자가 받아들이는 문자의 정의와는 어긋나기 때문에 "문자"로 칭하지 않는다. (유사 개념 참고) 이로부터 더 나아가서 문자열의 원소를 자소 클러스터(grapheme cluster)로 권장 내지 강제하는 언어(예: 펄 6, 스위프트)도 존재하는데, 아직 그 효용이 증명되지 않았으며 아무 코드 포인트 내지 유니코드 스칼라 값이나 허용하는 대부분의 시스템과의 호환성을 무시할 수 없어서 보류하였다.