内容提要
作者更新了C++语言服务器clice的进展:核心架构已初步可用,具备多进程、编译上下文、模块缓存等创新,并发布了pre-release版。他借助AI代理编写代码,自己专注架构与测试。clice的愿景是成为统一C++工具链的编译调度器。文末回顾了自学编程、实习与毕业经历,并反思AI时代编程的意义。
延伸解读
多进程架构的容错与调度优势
clice 将编译进程与查询进程隔离,子进程崩溃不会影响主进程的符号查询服务,主进程还能优雅地重新拉起子进程。这种设计不仅提升了稳定性,也为编译任务的优先级调度提供了更灵活的空间。相比 clangd 的单进程模型,多进程架构在应对 Clang 自身的内存泄漏和崩溃问题时更具韧性,但也会带来额外的进程间通信开销,需要进一步优化。
编译上下文与依赖扫描的定制优化
针对一个文件对应多个编译命令或文件非自包含的情况,clice 引入了编译上下文概念,并为此定制了依赖扫描器,速度比现有方案快 10 到 100 倍。这解决了 clangd 长期存在的痛点,但依赖图的构建和维护本身可能增加系统复杂度,实际效果需在大型项目中验证。
AI 代理工作流下的代码质量保障
作者使用 fable5 等模型编写代码,并通过多轮自动化 review 和五层测试流程(单元、集成、快照、冒烟、端到端)将正确率提升至 80%~90%。这种模式适合对 bug 容忍度较高的离线工具,但对于高准确性要求的项目,人类仍需深度参与。此外,模型上下文限制导致项目整体理解不足,需要人类维护架构和隐性知识。
从语言服务器到编译调度器的愿景扩展
clice 的核心是一个实时编译调度器,语言服务器只是其消费者。基于此,作者计划延伸出 lint、format、index、query、doc、refactor 等工具,旨在统一碎片化的 C++ 工具链。例如,利用 master-worker 架构跨 TU 缓存声明信息,可加速 clang-tidy 3-5 倍。这一愿景能否实现,取决于社区接受度和生态整合难度。
Q&A
clice 相比 clangd 有哪些架构创新?
clice 的主要架构创新包括:多进程架构,隔离 Clang 的 BUG 导致的内存泄漏和崩溃,子进程崩溃后主进程可优雅拉起并继续提供符号查询;编译上下文,处理一个文件对应多个编译命令或文件非自包含的情况,并定制了快 10~100 倍的依赖扫描器;模块编译图和共享编译缓存,支持动态模块依赖、并发编译、基于引用计数的取消机制,并将 PCH/PCM 缓存到磁盘加速启动;基于 DFS 剪枝的伪模板实例化器,用于模板语境下更智能的推断。
clice 目前发布了吗?如何体验?
clice 已于 2026-07-19 发布 pre-release 版本。可以直接在 VSCode 中搜索 clice VSCode 下载体验,开箱即用,无需额外配置或下载,二进制产物与 VSCode 插件捆绑,支持 Windows/Linux/macOS x arm64/x64 共 6 个平台。发版策略是 main 分支新提交上传 CI 产物,每日定时发布奇数版本号的 nightly 版本,稳定版由作者主动选择偶数版本发布。
clice 项目如何使用 AI 代理编写代码?
作者使用 fable5 等顶级模型辅助编写 clice,目前最近的所有代码均为 fable5 编写。工作流是:fable 编写完代码后,本地起三个 opus subagent review,然后开 PR,PR 上又有 GPT5.6 和 Coderabbit 进行多轮 review,fable5 定时拉取 review comment 解决并推送,触发 review 流程,交互几轮。配合完善的 CI 流程,正确率可达 80%~90%。作者负责确保项目长期维护,包括设计多层次的测试流程(单元、集成、快照、冒烟、端到端测试)和定期重构。
clice 的新愿景是什么?
clice 的新愿景是成为统一的 C++ 工具链的编译调度器。表面上是一个新的 C++ 语言服务器,但核心是一个实时的、高效的编译调度器,根据输入的 CDB 文件进行调度,语言服务器只是其一个消费者。基于这个核心可以延伸出 clice flags、lint、format、index、query、doc、refactor、modulize 等功能,提供开箱即用的丰富功能,并有望统一 C++ 工具链生态。
作者如何看待 AI 时代编程的意义?
作者认为 AI 极大提高了效率,但也引发意义危机:当具体 skill 都能交给 agent,人类应该做什么?他提出,像编译器这样的软件在中短期仍有价值,围绕编译器的基础设施(静态检查、文档生成、代码索引重构等)也有价值。clice 作为 agent 使用的工具,即使写代码的不再是人类,也能发挥价值。更遥远的价值无法确定,只能保持好奇、持续学习、不断思考。
作者的自学编程经历是怎样的?
作者本科专业是化学,编程全靠自学。大一从 C 语言开始,用 easyx 写小游戏失败后转学 QT,并添加网络联机功能;大二上学习图形学(Learn OpenGL)和游戏引擎,用 C++ 模板元编程复现 QT 信号槽,并接触编译原理、PL 和操作系统;大二下参与开源项目 pocketpy 实现 binding 接口,成功申请 GSoC 并获得奖金;大三开始深入 Clang 和 clice,并实习做 LLM Infra 推理,最终转正。