2026年7月 Nimf、Clair 与 Guiyom 开发进展
最近,Nimf、Clair 与 Guiyom 的开发进度比预期花费了更多时间。这是因为当前投入 较多的工作并不是增加立即可见的功能,而是重新整理各个项目的基础结构。
这三个项目彼此独立,但开发方向紧密关联。Clair 为多个操作系统提供共用的基础 功能,Guiyom 是构建在 Clair 之上的跨平台 GUI 工具包,而 Nimf 计划在未来同时 使用 Clair 与 Guiyom。
下面简要说明目前的开发进展。
Nimf
Nimf 的长期计划是将主要组件移植到 Ada,并进行进一步改进,使文本输入能够在 各种桌面环境和应用程序环境中稳定工作。
当前 Nimf 的部分结构将 GUI 工具包与输入法服务器的主循环紧密耦合。因此,从 图形环境切换到控制台时,如果 GUI 相关处理停止,Nimf 服务器的通信也可能受到 影响,导致控制台输入法无法正常工作。
我也曾尝试将 GTK 处理移到独立线程,并通过事件队列与 Nimf 的主循环通信。该 方案最初看起来能够工作,但长时间运行后最终仍会停止,因此并未成为根本解决方案。
今后计划通过在 Nimf 中采用 Guiyom 来解决这一问题。目标是改进整体结构,确保 GUI 层的状态不会阻塞输入法服务器的核心操作。
此外,在 Wayland、Flatpak、Snap、SDL、Wine 等环境中,现有输入法接口有时无法 正确传递输入。这些兼容性问题也将得到处理;如有必要,还会考虑实现与 IBus 兼容 的接口,以支持这些环境。
目前的第一步是将 nimf-settings 迁移到使用 Ada 与 Guiyom 的结构。之后将以
设置程序中确立的模式为基础,逐步把 Nimf 的核心状态管理、IPC、服务管理以及
输入引擎共用层迁移到 Ada。
不过,Nimf 的全面升级需要 Guiyom 与 Clair 提供基础能力,因此其整体日程也会 受到这两个项目开发进度的影响。
Guiyom
Guiyom 是一个正在使用 Ada 开发的跨平台 GUI 工具包。
它采用了不同于传统 GUI 工具包的独特设计,但由于 P3 专利尚未申请,目前不会 公开其总体设计和详细设计。
Guiyom 在设计与实现过程中始终将大规模或极端环境下的性能、安全性、可靠性和 可维护性作为主要目标。它不仅关注正常执行路径,也力求在各种故障情况下对状态 和资源进行可预测的管理。
当前工作主要包括完善核心基础与各平台实现,并完成 P3 专利申请前所需的技术实现 和验证。
Guiyom 的开发依赖 Clair 的事件循环以及其他平台中立功能。因此,Clair 当前正在 进行的 Microsoft Windows 支持和平台中立化工作,也会影响 Guiyom 的整体进度。
Clair
Clair 是一个正在使用 Ada 开发的库,目标是提供跨平台应用程序开发所需的系统级 功能。
它计划提供事件循环、异步 I/O、信号处理、进程执行、时间与定时器管理、文件与 动态库功能、日志、国际化、正则表达式以及测试基础设施。
公开代码仓库位于:
https://github.com/hodong-kim/clair
Clair 当前开发的重点是 Microsoft Windows 支持与平台中立化。
Clair 原有的部分功能和接口是以 Unix 类操作系统为前提编写的。在增加 Windows 支持的过程中可以确认,仅仅添加 Windows 专用代码并不足够,还需要清楚地分离 平台共用契约与各操作系统的具体实现。
因此,在实现 Windows 事件循环和系统功能的同时,也在分离 Unix 专用功能与平台 共用功能。文件、进程、日志等主要功能也正在重新审视,以便在不同操作系统上保持 一致的使用方式。与此同时,构建环境也在进行改进,使 Windows 依赖项与二进制文件 能够以可复现的方式生成和验证。
Clair.Test 也正在扩展为语言中立的测试框架,以便统一执行 Ada、C 以及外部程序
的测试。
因此,Clair 并不是停止开发或只是单纯延期。更准确地说,Windows 支持扩大了必须 完成的基础工作范围。
短期来看,这项工作是整个项目体系的瓶颈;但从长期来看,它是为了在 Linux、 FreeBSD、macOS、Windows 等环境中提供相同的上层 API 与一致的故障处理方式所必需 的过程。
整体开发状况
三个项目之间的关系大致如下。
Clair
↓
Guiyom
↓
Nimf 升级
只有 Clair 的 Microsoft Windows 支持与平台中立化工作取得进展,Guiyom 的跨平台 基础才能得到可靠扩展;而只有 Guiyom 达到足够完善的阶段,Nimf 的 GUI 结构与输入 法服务器结构才能开始全面改进。
因此,Nimf 与 Guiyom 的开发速度有时可能显得较慢,但以 Clair 为中心的共用基础 工作一直在持续进行。
当前并不是优先快速增加可见功能,而是先打牢基础,避免今后的功能开发再次受到 某个特定操作系统或 GUI 工具包的限制。
目前仍很难给出准确的完成时间。不过,当现阶段的瓶颈得到解决后,这三个项目的 开发应当能够更加独立并行地推进。