File tree Expand file tree Collapse file tree
docs/architecture/proposals/meta Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11# Proposal · 命名空间统一方案(2025-10)
2-
3- > 目标:明确 GenesisEngine 代码库的命名空间标准,为后续逐步迁移提供依据。
4-
5- ## 现状与问题
6- - 核心模块沿用小写 ` genesis::core / genesis::worldgen / Genesis::Runtime ` ,Sandbox GUI 也已调整为 ` genesis::sandbox::gui ` ,而 Style 子系统仍保持首字母大写的 ` Genesis::Style ` ,不同约定并存。
7- - 调用方在不同模块间切换时需要频繁添加双重 ` namespace ` 别名,降低可读性并增加出错概率。
8- - 文档与示例代码在引用命名空间时缺乏一致标准,阻碍团队对外输出和未来重构。
2+
3+ > 目标:明确 GenesisEngine 代码库的命名空间标准,为后续逐步迁移提供依据。
4+
5+ ## 已落地(Phase 1:过渡别名)
6+ 当前仓库已加入 ** namespace alias 过渡层** ,以便新代码/工具可以统一使用 ` Genesis:: ` 写法,同时保持 ABI 与实现命名空间不变:
7+ - 头文件:` include/genesis/NamespaceAliases.hpp `
8+ - 约定:仅引入 alias,不进行 ` namespace genesis::x ` → ` namespace Genesis::X ` 的破坏性重命名。
9+
10+ 示例:
11+ ``` cpp
12+ #include " genesis/NamespaceAliases.hpp"
13+ #include " genesis/agents/Needs.hpp"
14+
15+ Genesis::Agents::NeedType t = Genesis::Agents::NeedType::Hunger;
16+ ```
17+
18+ ## 现状与问题
19+ - 核心模块沿用小写 ` genesis::core / genesis::worldgen / Genesis::Runtime ` ,Sandbox GUI 也已调整为 ` genesis::sandbox::gui ` ,而 Style 子系统仍保持首字母大写的 ` Genesis::Style ` ,不同约定并存。
20+ - 调用方在不同模块间切换时需要频繁添加双重 ` namespace ` 别名,降低可读性并增加出错概率。
21+ - 文档与示例代码在引用命名空间时缺乏一致标准,阻碍团队对外输出和未来重构。
922
1023## 统一规范
1124- 采用首字母大写的 ` Genesis:: ` 作为唯一根命名空间。
Original file line number Diff line number Diff line change 1+ #pragma once
2+
3+ // 目的:为后续逐步迁移到 `Genesis::` 根命名空间提供过渡层。
4+ // 原则:仅提供 namespace alias;不重命名实现命名空间,避免破坏性变更。
5+
6+ namespace genesis {
7+ namespace agents {}
8+ namespace base {}
9+ namespace core {}
10+ namespace diagnostics {}
11+ namespace messaging {}
12+ namespace sandbox {}
13+ namespace simulation {}
14+ namespace telemetry {}
15+ namespace tests {}
16+ namespace world {}
17+ namespace worldgen {}
18+ } // namespace genesis
19+
20+ namespace Genesis {
21+
22+ namespace Agents = ::genesis::agents;
23+ namespace Base = ::genesis::base;
24+ namespace Core = ::genesis::core;
25+ namespace Diagnostics = ::genesis::diagnostics;
26+ namespace Messaging = ::genesis::messaging;
27+ namespace Sandbox = ::genesis::sandbox;
28+ namespace Simulation = ::genesis::simulation;
29+ namespace Telemetry = ::genesis::telemetry;
30+ namespace Testing = ::genesis::tests;
31+ namespace World = ::genesis::world;
32+ namespace Worldgen = ::genesis::worldgen;
33+
34+ } // namespace Genesis
35+
Original file line number Diff line number Diff line change @@ -86,6 +86,7 @@ endif()
8686# --- Runtime tests ---
8787add_executable (genesis_runtime_tests
8888 test_contract_docs_schema_versions.cpp
89+ test_namespace_aliases.cpp
8990 test_runtime_events.cpp
9091 test_runtime_simulation_service.cpp
9192 test_runtime_e2e_smoke.cpp
Original file line number Diff line number Diff line change 1+ #include < gtest/gtest.h>
2+
3+ #include < type_traits>
4+
5+ #include " genesis/NamespaceAliases.hpp"
6+ #include " genesis/agents/Needs.hpp"
7+ #include " genesis/telemetry/TelemetryBuffer.hpp"
8+ #include " genesis/world/WorldTypes.hpp"
9+
10+ TEST (NamespaceAliases, ExposesGenesisAliases) {
11+ static_assert (std::is_same_v<Genesis::Agents::NeedType, genesis::agents::NeedType>);
12+ static_assert (std::is_same_v<Genesis::World::MapId, genesis::world::MapId>);
13+ static_assert (std::is_same_v<Genesis::Telemetry::TickTelemetry, genesis::telemetry::TickTelemetry>);
14+ EXPECT_TRUE (true );
15+ }
16+
You can’t perform that action at this time.
0 commit comments