Cim 2.0.0 发布
2025年12月7日,Cim(通用输入法)2.0.0 版本正式发布。此次更新包含主版本变更,主要特点包括 libcim 的 ABI(应用二进制接口)变更、新增 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 中数据类型的明确性。
- API 已更新,使用
uint32_t表示大小和数量,使用int32_t表示坐标。 - 标准化了回调签名,并统一使用了
nullptr。
4. 其他改进事项
- C 标准: 默认启用 C2x(C23) 标准支持,可通过
--disable-c2x选项禁用。 - 安全性增强: 改进了
c_mem函数群中的大小检查(零大小检查)以及c_utf8_strncpy的安全性。 - Ruby 绑定: 添加了
libcim/cim.rb,用于通过 Fiddle 测试 Cim。 - 字符串工具: 添加了
c_str_sprintf实现。
本次发布重点在于结构现代化以及确保对 Qt6 环境的扩展性。现有用户可能需要因 API 和 ABI 的变更而修改代码。
Cim 源代码可在 https://nimfsoft.art/zh/cim/ 下载。