先介绍一下项目:github /infiniflow/infinity (链接实在发不出来,见谅),这是我们刚开源的一个面向AI应用的数据库系统,提供高性能向量搜索、全文搜索和结构化数据查询。
除去单元测试,项目目前代码量12~13w,依赖了100多万行第三方代码。没有用modules之前,各种已知编译优化方案都用上了(PCH,减少头文件依赖啥的),编译时间最少也要5分钟,改个头文件就需要编译一下也需要4分钟。modules化之后,全新编译2分钟左右,大的增量编译1分钟左右完成,效果还是比较明显的。
环境的要求:
CMake: 3.28,最近Release 3.28才正式支持modules
Clang-17及以上,Clang-17对modules支持相对完整,当然目前还在dev状态的Clang-18也可以
这里有一些使用细节上的参考:
github /infiniflow/infinity/blob/main/src/common/stl.cppm
这个文件示例了如何解决由于C++标准库没有modules化导致的各类编译错误;
github /infiniflow/infinity/blob/main/src/common/third_party.cppm
这个文件示例了如何在项目中引入其他没有modules化的第三方依赖库。
C++ Modules从C++ 20提出以来至今已经有3年多,目前仍然很少在开源项目中看到,之前只有 async_simple 有个 modules 的 branch 有过相关实践,其他都是一些玩具项目。后续,我们会继续优化modules的使用,包括对stl和thirdparty代码封装的优化,submodules等。欢迎大家关注和多提建议,谢谢。
--
FROM 116.226.71.*