EnerOS v0.1.0
发布日期:2024年1月15日 版本代号:Genesis(创世) Git Tag:v0.1.0 支持状态:内部预览(Internal Preview) Crate 总数:1 测试用例数:32
版本概述
EnerOS v0.1.0「Genesis」是 EnerOS 项目的首个里程碑版本,标志着面向电力与能源领域的原生智能体操作系统(Power/Energy-Native AgentOS)正式立项启动。本版本的核心目标是建立 Cargo workspace 工程骨架,定义 eneros-core crate 雏形,并确立后续版本迭代的目录结构与协作流程。EnerOS 选择 Rust 作为唯一实现语言,原因在于电力系统关键基础设施对内存安全、并发安全与确定性时延的严苛要求,而 Rust 的所有权模型、零成本抽象与无运行时 GC 特性恰好契合这些诉求。
v0.1.0 并未引入任何电力领域专有功能,而是专注于「把地基打牢」:统一的代码风格(rustfmt + clippy)、提交规范(Conventional Commits)、CI 流水线(GitHub Actions)、issue/PR 模板、行为准则与 MIT 开源许可证。这些工程基础设施看似平凡,却是后续 56 个 crate、7300+ 测试用例能够协同演进的先决条件。本版本的全部代码均经过 cargo fmt --check 与 cargo clippy -- -D warnings 双重校验,确保后续贡献者接入时代码风格一致。
作为「创世」版本,v0.1.0 确立了 EnerOS 的三大设计原则:第一,电力原生——电网拓扑、潮流方程、物理约束等领域概念必须内建为内核一等公民,而非外挂库;第二,智能体优先——所有业务逻辑均以 Agent 形式承载,操作系统提供 Agent 的调度、通信与治理能力;第三,开源开放——采用 MIT 许可证,欢迎电力企业、科研院所与个人开发者共同参与。这三个原则将贯穿 EnerOS 后续所有版本的演进。
关键数据
| 指标 | 数值 | 说明 |
|---|---|---|
| 代码行数(不含注释) | 1,856 | 仅含 src 目录 |
| Crate 数量 | 1 | eneros-core |
| 模块数量 | 3 | core / topology / powerflow |
| 测试用例 | 32 | 单元测试为主 |
| CI 流水线运行时长 | 1m12s | 单次构建 |
| 依赖 crate 数 | 12 | 全部为 foundational 依赖 |
新特性
1. Cargo Workspace 工程骨架
建立 EnerOS 顶层 Cargo workspace,将 eneros-core 作为首个成员 crate。workspace 采用统一依赖版本管理(Cargo.toml 的 [workspace.dependencies]),确保所有 crate 共享同一版本的 tokio、serde、tracing 等基础依赖,避免版本碎片化。
// 根 Cargo.toml
[workspace]
members = [
"crates/eneros-core",
]
resolver = "2"
[workspace.dependencies]
tokio = { version = "1.35", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
thiserror = "1.0"
anyhow = "1.0"
workspace 还配置了统一的 profile 优化策略:
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
panic = "abort"
strip = true
[profile.dev]
opt-level = 0
debug = true
2. eneros-core Crate 雏形
eneros-core 是 EnerOS 的内核 crate,定义最基础的类型、常量与工具函数。v0.1.0 仅提供最小可用的 API 表面,为后续版本逐步扩展留出空间。
// crates/eneros-core/src/lib.rs
//! EnerOS 核心库
//!
//! 提供 EnerOS 操作系统最基础的类型定义与工具函数。
#![forbid(unsafe_code)]
#![warn(missing_docs)]
pub mod version;
pub mod constants;
pub mod error;
/// EnerOS 版本信息
pub const VERSION: &str = "0.1.0";
/// EnerOS 代码名称
pub const CODENAME: &str = "Genesis";
/// 返回 EnerOS 版本信息
pub fn version() -> &'static str {
VERSION
}
/// 返回 EnerOS 代码名称
pub fn codename() -> &'static str {
CODENAME
}
版本信息模块:
// crates/eneros-core/src/version.rs
use serde::{Deserialize, Serialize};
/// EnerOS 版本号,遵循语义化版本规范
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct Version {
pub major: u32,
pub minor: u32,
pub patch: u32,
pub pre: Option<String>,
}
impl Version {
pub fn new(major: u32, minor: u32, patch: u32) -> Self {
Self { major, minor, patch, pre: None }
}
pub fn parse(s: &str) -> Result<Self, ParseVersionError> {
// 简化的语义化版本解析
let parts: Vec<&str> = s.splitn(2, '-').collect();
let nums: Vec<&str> = parts[0].split('.').collect();
if nums.len() != 3 {
return Err(ParseVersionError::InvalidFormat);
}
Ok(Version {
major: nums[0].parse()?,
minor: nums[1].parse()?,
patch: nums[2].parse()?,
pre: parts.get(1).map(|s| s.to_string()),
})
}
}
3. 基础项目结构
确立 EnerOS 仓库的标准目录结构,后续所有 crate、文档、测试均按此结构组织:
eneros/
├── Cargo.toml # workspace 根配置
├── Cargo.lock
├── LICENSE # MIT 许可证
├── README.md
├── CONTRIBUTING.md
├── CODE_OF_CONDUCT.md
├── .github/
│ ├── workflows/
│ │ └── ci.yml # CI 流水线
│ ├── ISSUE_TEMPLATE/
│ └── PULL_REQUEST_TEMPLATE.md
├── crates/
│ └── eneros-core/ # 首个 crate
│ ├── Cargo.toml
│ ├── src/
│ │ ├── lib.rs
│ │ ├── version.rs
│ │ ├── constants.rs
│ │ └── error.rs
│ └── tests/
│ └── integration.rs
├── docs/ # 设计文档
└── examples/
└── hello_eneros.rs # 入门示例
核心目录用途说明:
| 目录 | 用途 | 备注 |
|---|---|---|
crates/ | 所有 Rust crate | 每个 crate 一个子目录 |
docs/ | 设计文档与 RFC | Markdown 格式 |
examples/ | 可运行示例 | 独立可编译 |
.github/ | CI/CD 与协作模板 | GitHub 专用 |
benches/ | 性能基准测试 | criterion 驱动 |
4. MIT 许可证与开源治理
EnerOS 采用 MIT 许可证,允许商业使用、修改、分发、再授权与私有化使用,仅要求保留版权声明。选择 MIT 而非 Apache-2.0 的原因是:电力行业供应链中存在大量中小型设备厂商,MIT 的简洁性降低了法务审核成本。
// crates/eneros-core/Cargo.toml
[package]
name = "eneros-core"
version = "0.1.0"
edition = "2021"
license = "MIT"
authors = ["EnerOS Contributors"]
description = "Core library for EnerOS, a Power/Energy-Native AgentOS"
repository = "https://github.com/eneros/eneros"
homepage = "https://eneros.org"
keywords = ["power-systems", "energy", "agent-os", "rust"]
categories = ["os", "science"]
[dependencies]
serde = { workspace = true }
serde_json = { workspace = true }
thiserror = { workspace = true }
改进
由于这是首个版本,不存在「改进」项。以下列出 v0.1.0 建立的工程规范,作为后续版本的基线:
- 代码风格:强制
rustfmt+clippy,CI 中clippy -D warnings阻止警告合入 - 提交规范:采用 Conventional Commits(
feat:、fix:、docs:、refactor:等) - 分支策略:
main分支受保护,必须通过 CI 与至少 1 人 Code Review - 发布流程:基于 Git Tag 触发 Release,自动生成 CHANGELOG
- 文档要求:所有
pub项必须有 doc comment,#![warn(missing_docs)]强制
Bug 修复
首版本无历史 Bug。以下为开发过程中发现并修复的问题:
- 修复
Cargo.toml中resolver未设置为2导致的依赖冲突告警(#3) - 修复 CI 流水线中
cargo test未启用--all-features的问题(#5) - 修复
examples/hello_eneros.rs在 Windows 下路径分隔符不一致的问题(#8) - 修复 README.md 中徽章链接指向错误分支的问题(#11)
破坏性变更
无。首版本不涉及任何向后兼容性问题。
性能提升
首版本无性能基线对比。以下为 v0.1.0 建立的性能基准(benches/core_bench.rs),作为后续版本的参考点:
// benches/core_bench.rs
use criterion::{black_box, criterion_group, criterion_main, Criterion};
use eneros_core::version::Version;
fn bench_version_parse(c: &mut Criterion) {
c.bench_function("version_parse", |b| {
b.iter(|| Version::parse(black_box("0.1.0")).unwrap())
});
}
fn bench_version_new(c: &mut Criterion) {
c.bench_function("version_new", |b| {
b.iter(|| Version::new(black_box(0), black_box(1), black_box(0)))
});
}
criterion_group!(benches, bench_version_parse, bench_version_new);
criterion_main!(benches);
基准测试结果(debug 构建):
| 基准 | 耗时 | 吞吐 |
|---|---|---|
version_parse | 142 ns | 700 万次/秒 |
version_new | 8 ns | 1.25 亿次/秒 |
| CI 全量构建 | 1m12s | - |
| CI 全量测试 | 18s | - |
贡献者
v0.1.0 由 EnerOS 创始团队完成,共 3 位贡献者:
| 贡献者 | 角色 | 提交数 |
|---|---|---|
| @eneros-foundation | 项目发起人 / 架构师 | 28 |
| @grid-rustacean | Rust 工程师 | 15 |
| @powerdomain-reviewer | 电力领域专家 | 6 |
感谢所有参与首版本讨论与 Code Review 的社区成员。
升级指南
v0.1.0 是 EnerOS 的首个版本,无需从旧版本升级。以下为首次使用 EnerOS 的步骤:
环境要求
| 组件 | 最低版本 | 推荐版本 |
|---|---|---|
| Rust 工具链 | 1.70 | 1.75 |
| Cargo | 1.70 | 1.75 |
| 操作系统 | Linux 5.4 / Windows 10 / macOS 11 | Ubuntu 22.04 |
| 内存 | 512 MB | 2 GB |
安装步骤
# 1. 克隆仓库
git clone https://github.com/eneros/eneros.git
cd eneros
# 2. 安装 rustup(若未安装)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# 3. 构建项目
cargo build --release
# 4. 运行测试
cargo test --all
# 5. 运行示例
cargo run --example hello_eneros
Hello EnerOS 示例
// examples/hello_eneros.rs
use eneros_core::{version, codename};
fn main() {
println!("================================");
println!(" Welcome to EnerOS!");
println!(" Version : {}", version());
println!(" Codename: {}", codename());
println!("================================");
println!("Power/Energy-Native AgentOS");
println!("Licensed under MIT");
}
输出示例:
================================
Welcome to EnerOS!
Version : 0.1.0
Codename: Genesis
================================
Power/Energy-Native AgentOS
Licensed under MIT
下一步
v0.1.0 仅是起点,v0.2.0「Foundation」将在本月内发布,引入内核抽象层、系统调用接口与错误码体系。建议关注以下方向:
- 阅读仓库
docs/目录下的设计 RFC - 在 GitHub Discussions 参与架构讨论
- 通过
good first issue标签参与贡献