一个新 C++ language server 的设计与实现

一个新 C++ language server 的设计与实现

💡 原文中文,约9500字,阅读约需23分钟。
📝

内容提要

作者正在开发C++语言服务器clice,旨在解决现有语言服务器(如clangd)的问题。clice通过改进模板支持、头文件上下文和C++20模块支持,提升代码补全和编译效率。项目经过几个月的设计与开发,仍需时间完善,欢迎读者提出建议。

🎯

关键要点

  • 作者正在开发C++语言服务器clice,旨在解决现有语言服务器的问题。

  • clice通过改进模板支持、头文件上下文和C++20模块支持,提升代码补全和编译效率。

  • clice的名字来源于作者的头像alice,首字母替换为C/C++的c。

  • 项目经过几个月的设计与开发,仍需时间完善,欢迎读者提出建议。

  • 开发新语言服务器的原因是现有的clangd存在许多问题,特别是在模板支持和性能方面。

  • 作者在研究clangd时发现了多个问题,决定自己开发一个新的语言服务器。

  • clice的主要改进包括更好的模板支持、头文件上下文和完全支持C++20模块。

  • clice将支持头文件上下文,能够根据不同源文件的上下文处理头文件。

  • clice将提供编译器和构建系统无关的C++20模块支持,解决模块重复编译的问题。

  • clice设计了一种更高效的索引格式,能够快速响应查询请求。

  • clice使用C++20的协程设施进行异步编程,提升代码可读性和性能。

  • clice实现了增量编译,减少了频繁修改文件时的解析时间,提高用户体验。

延伸问答

clice语言服务器的主要目标是什么?

clice旨在解决现有语言服务器(如clangd)在模板支持和性能方面的问题。

clice相较于clangd有哪些主要改进?

clice提供更好的模板支持、头文件上下文和完全支持C++20模块,提升代码补全和编译效率。

clice的名字来源是什么?

clice的名字来源于作者的头像alice,将首字母替换为C/C++的c。

为什么作者决定开发新的语言服务器而不是改进现有的?

作者发现clangd存在多个问题,特别是在模板支持和性能方面,决定自己开发一个新的语言服务器以解决这些问题。

clice如何处理头文件上下文?

clice支持根据不同源文件的上下文处理头文件,能够自动和用户主动切换头文件的状态。

clice如何实现增量编译?

clice通过使用预编译头文件(PCH)机制,缓存未修改的代码段,从而减少频繁修改文件时的解析时间。

➡️

继续阅读