这是一个个人技术实验 Monorepo,内容集中在分布式系统、存储引擎、编译器与解释器、模板元编程、Coding Agent 等方向。仓库使用 Bazel 统一管理 C++、Go、Java 和 Python 项目的构建与测试。
将多语言项目放在同一个仓库中,配合 Bazel 构建系统,带来几个实际好处:
- 统一构建入口:无论 C++、Go、Java 还是 Python,一条命令即可完成全量构建与测试,不需要为每种语言维护独立的构建脚本和工具链。
- 跨语言依赖管理:共享的 Protobuf 定义可以一次编写,自动生成各语言代码;跨语言调用的接口变更在同一次提交中完成,不会出现版本漂移。
- 确定性与可复现:Bazel 通过内容哈希缓存和沙箱执行保证构建过程可复现,同一份代码在 macOS 和 Linux CI 上行为一致。工具链(Go SDK、JDK、Python)由 Bazel 自动下载,开发者只需安装 Bazelisk 即可上手。
- 增量构建:依赖图精确到文件级别,修改一个 proto 文件只会重新编译受影响的目标,大幅缩短开发迭代周期。
- 多平台 CI:当前 CI 覆盖 Linux (GCC-14 / Clang) 和 macOS (Apple Clang) 三个矩阵,确保代码在不同编译器和操作系统上行为一致。
"Almost every new project benefits from incorporating an artifact-based build system like Bazel right from the start."
"The monorepo approach has some inherent benefits, and chief among them is that adhering to One Version is trivial."
— Software Engineering at Google, Chapter 16 & 18
更多讨论见 Chapter 16: Version Control and Branch Management 和 Chapter 18: Build Systems and Build Philosophy。
| 项目 | 说明 | 技术栈 |
|---|---|---|
| MiniDFS | 类 HDFS 的分布式文件系统,包含 NameNode、DataNode 和 Client,支持块存储、副本管理、心跳与块汇报、MySQL 元数据存储及 Docker 部署。 | C++20, brpc, protobuf, Boost.MySQL, ISA-L/crc32c, zstd |
| Flux | Flux 查询语言子集解释器,覆盖词法分析、语法分析、AST、语义分析、规则与代价优化、物理执行、SQLite/MySQL Connector,并提供 LSP 和 REPL。 | C++20, Abseil, simdjson, SQLite, MySQL |
| SSTable | LSM-Tree 存储引擎组件,包含 Block 编解码、布隆过滤器、zstd/snappy 压缩、迭代器、版本管理和 CLI 工具。 | C++20, zstd, snappy |
| SSTable v2 | SSTable 完全重写版本。模块化架构:类型化键系统(C++20 concept)、memcomparable 编码、多级索引树、列存储 Block、布隆过滤器。 | C++20, Abseil, zstd, snappy, lz4, xxHash |
| Braft Counter | 基于 braft 的 Raft 状态机示例,演示日志复制、快照、Leader 选举和集群部署。 | C++20, braft, brpc, protobuf |
| Meta | C++20 模板元编程实验,包括 Type List、Expression Template、Pattern Matching 和 Tuple Iteration。 | C++20 |
| Recall | 基于 FAISS 的向量召回服务,提供 gRPC 接口。 | C++20, FAISS, OpenBLAS, gRPC, protobuf |
| Loom | 生产级 Coding Agent:交互式 TUI、事件溯源会话与崩溃恢复、工具沙箱与分级审批、Skills 扩展、OTel/Langfuse 观测;Server 模式设计中。 | Go, Bubble Tea, SQLite, OpenTelemetry |
| Echo Service | 多语言 gRPC Echo 服务示例。共享 proto 定义,C++ / Go / Java / Python 四语言各自实现 server + client,支持跨语言互操作。 | gRPC, protobuf, C++20, Go, Java 21, Python 3.13 |
| Big Data Lab | HDFS、Hive、Spark、Trino、Iceberg 与 MySQL 集群;支持从 Java 扩展源码构建到 Docker SQL 断言的一体化 E2E。 | Spark 4.0.2, Trino 468, Hive 4, Iceberg, Docker |
此外,仓库还包含 Skip List、Bloom Filter、Arena Allocator、Thread Pool、Geohash、Brainfuck Interpreter 和 HTTP Server 等小型实现。
| 目录 | 说明 |
|---|---|
| cpp/ | C++20 项目:分布式系统、存储引擎、查询语言、模板元编程(见主要项目表)。 |
| go/ | Go 项目:Loom Coding Agent、工具库、cgo 与 gRPC Echo 示例。 |
| java/ | Java 项目:Spring Boot、gRPC Echo、Spark/Trino 扩展(Bazel + Maven)。 |
| python/ | Python 项目:pybind11 绑定、Manim 动画、gRPC Echo 服务。 |
| proto/ | 跨语言共享的 Protobuf 定义。 |
| docker/ | 本地实验集群:MiniDFS、Big Data、Doris、Hermes、监控与 MySQL。 |
| registry/ | Bazel 本地模块注册表(OpenBLAS、ISA-L 等)。 |
| 其他 | tla/(TLA+ 形式化规约)、latex/(TikZ 示例)、php/(Router)、bash/。 |
前置依赖:
- 全平台需要 Bazelisk(仓库通过 .bazelversion 锁定 Bazel 8.7.0)和 C++20 编译器(Clang 16+ 或 GCC 13+)。
- Go SDK 1.26.4、JDK 21、Python 3.13 工具链及全部第三方依赖由 Bazel 在首次构建时自动下载。
- Docker 仅容器实验环境与 MiniDFS/Big Data E2E 需要。
# macOS(最低 macOS 13.3)
brew install bazelisk llvm libomp pkg-config
# Ubuntu/Debian
sudo apt-get install -y gcc-14 g++-14 nasm libomp-dev常用命令:
bazel build //... # 全量构建
bazel test //... # 全量测试
bazel test //cpp/pl/sstv2/... # 单包测试
bazel build //cpp/... --config=release # 优化构建(关闭 ASan)
bazel run :refresh_compile_commands # 生成 compile_commands.json(clangd)
bazel run //:format # 格式化全部代码(C++/Go/Java/Python/...)平台配置、构建选项、Maven 与 Docker E2E、工具链版本清单等完整内容见 docs/BUILDING.md。
CI 自动生成覆盖率报告:
Python 暂未发布覆盖率页面,其 badge 链接至 build_python workflow。
本项目使用 Apache License 2.0。