피드로 돌아가기
Unicode and UTF-16 String Semantics in CrabPascal (v2.16.0) | Unicode e semântica UTF-16 no CrabPascal (v2.16.0)
Dev.toDev.to
Backend

CrabPascal v2.16.0, Delphi 호환성을 위한 UTF-16 String Semantics 도입

Unicode and UTF-16 String Semantics in CrabPascal (v2.16.0) | Unicode e semântica UTF-16 no CrabPascal (v2.16.0)

CrabPascal2026년 6월 4일5intermediate

Context

기존 CrabPascal의 문자열 처리 방식이 바이트 단위 연산에 의존하여 국제화 앱 지원에 한계 발생. Delphi의 UnicodeString 모델과 일치하지 않는 문자열 측정 방식으로 인해 네이티브 바이너리와 인터프리터 간의 출력 불일치 위험 존재.

Technical Solution

  • Length, Copy, Pos 등 핵심 builtin 함수를 UTF-16 code units 기준으로 동작하도록 재설계
  • 내부 저장소의 효율성을 위해 Value::String은 UTF-8을 유지하되, 연산 시점에 encode_utf16을 통해 세만틱 일치 구현
  • stubs.c에서 생성되는 C 코드를 UTF-16 카운팅 방식으로 변경하여 build-exe 결과물과 런타임 정렬
  • surrogate pair 분리 가능성을 감수한 Delphi 호환성 우선 설계로 하위 호환성 및 생태계 통합 강화
  • unicode_conformance 테스트 스위트를 통해 'año' (3 units), '🦀' (2 units) 등의 정밀한 검증 체계 구축

- 다국어 지원 시스템 설계 시 Byte 길이, Code Unit 길이, Grapheme 길이의 차이를 명확히 구분하여 정의 - 외부 런타임이나 타 언어 컴파일러와 호환성이 중요한 경우, 내부 저장 방식보다 외부로 드러나는 API의 세만틱 일치에 집중 - 문자열 슬라이싱(Copy) 시 Surrogate Pair 절단 가능성을 고려하여 UI 레이어에서 Grapheme 기반 처리를 검토

원문 읽기