Skip to content

Commit bfcdd32

Browse files
committed
meta: add Genesis namespace alias bridge
1 parent a16ab2d commit bfcdd32

4 files changed

Lines changed: 72 additions & 7 deletions

File tree

docs/architecture/proposals/meta/namespace-strategy.md

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,24 @@
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::` 作为唯一根命名空间。
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
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+

tests/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ endif()
8686
# --- Runtime tests ---
8787
add_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

tests/test_namespace_aliases.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+

0 commit comments

Comments
 (0)