Cim 2.0.0 출시
2025년 12월 7일, Cim (공통 입력 방식) 2.0.0 버전이 출시되었습니다. 이번 업데이트는 메이저 버전 변경을 포함하며, libcim의 ABI(Application Binary Interface) 변경, Qt6 지원 추가, 그리고 플러그인 아키텍처의 리팩터링이 주요 특징입니다.
주요 변경 사항은 다음과 같습니다.
1. Qt6 입력기 모듈 지원
Qt6 환경을 위한 구성 지원(core, gui, widgets 경로 탐지)이 추가되었습니다. configure 스크립트는 이제 FreeBSD 및 Linux 배포판에서 Qt6의 플랫폼별 경로를 탐지합니다.
libqt6im-cim.so라이브러리가 구현되어QPlatformInputContext를 통해 Qt6 이벤트를 Cim으로 전달합니다.CimQic클래스가 구현되어 Preedit 그리기, 커밋, 주변 텍스트(surrounding text) 처리 및 커서 업데이트를 수행합니다.- 빌드 구성 시
--disable-qt6옵션을 통해 Qt6 지원을 비활성화할 수 있습니다.
2. 코어 아키텍처 리팩터링 및 ABI 변경
libcim 라이브러리의 메이저 버전이 2로 상향되었으며, 이에 따라 하위 버전에 대한 ABI 호환성이 중단되었습니다.
- 불투명 핸들(Opaque Handle) 도입:
CimIc구조체는 구현 세부 사항을 은닉하기 위해 불투명 핸들인CimIcHandle과 가상 함수 테이블(vtable)을 사용하는 방식으로 변경되었습니다. - 동적 디스패치:
CimIcVTable과CimPlugin구조체가 도입되어 플러그인의 동적 디스패치(Dynamic Dispatch)를 지원합니다. - API 명명 규칙 변경: 인스턴스 생성 및 해제 함수가
cim_ic_new/free에서cim_ic_create/destroy로 변경되었습니다.
3. 데이터 타입 및 API 표준화
API 전반에 걸쳐 데이터 타입의 명확성을 높였습니다.
- 크기와 개수를 나타내는 변수에는
uint32_t, 좌표에는int32_t를 사용하도록 API가 업데이트되었습니다. - 콜백 시그니처가 표준화되었으며, 일관된
nullptr사용이 적용되었습니다.
4. 기타 개선 사항
- C 표준: C2x(C23) 표준 지원이 기본적으로 활성화되었으며,
--disable-c2x옵션으로 비활성화할 수 있습니다. - 안전성 강화:
c_mem함수군에서의 크기 검사(zero size check)와c_utf8_strncpy의 안전성이 개선되었습니다. - Ruby 바인딩: Fiddle을 이용한 Cim 테스트를 위해
libcim/cim.rb가 추가되었습니다. - 문자열 유틸리티:
c_str_sprintf구현이 추가되었습니다.
이번 출시는 구조적 현대화와 Qt6 환경으로의 확장성을 확보하는 데 중점을 두었습니다. 기존 사용자는 API 및 ABI 변경에 따른 코드 수정이 필요할 수 있습니다.
Cim 소스코드는 https://nimfsoft.art/ko/cim/에서 다운받으실 수 있습니다.