跳到主内容

v0.1.0 版本说明

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 --checkcargo clippy -- -D warnings 双重校验,确保后续贡献者接入时代码风格一致。

作为「创世」版本,v0.1.0 确立了 EnerOS 的三大设计原则:第一,电力原生——电网拓扑、潮流方程、物理约束等领域概念必须内建为内核一等公民,而非外挂库;第二,智能体优先——所有业务逻辑均以 Agent 形式承载,操作系统提供 Agent 的调度、通信与治理能力;第三,开源开放——采用 MIT 许可证,欢迎电力企业、科研院所与个人开发者共同参与。这三个原则将贯穿 EnerOS 后续所有版本的演进。

关键数据

指标数值说明
代码行数(不含注释)1,856仅含 src 目录
Crate 数量1eneros-core
模块数量3core / topology / powerflow
测试用例32单元测试为主
CI 流水线运行时长1m12s单次构建
依赖 crate 数12全部为 foundational 依赖

新特性

1. Cargo Workspace 工程骨架

建立 EnerOS 顶层 Cargo workspace,将 eneros-core 作为首个成员 crate。workspace 采用统一依赖版本管理(Cargo.toml[workspace.dependencies]),确保所有 crate 共享同一版本的 tokioserdetracing 等基础依赖,避免版本碎片化。

// 根 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/设计文档与 RFCMarkdown 格式
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.tomlresolver 未设置为 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_parse142 ns700 万次/秒
version_new8 ns1.25 亿次/秒
CI 全量构建1m12s-
CI 全量测试18s-

贡献者

v0.1.0 由 EnerOS 创始团队完成,共 3 位贡献者:

贡献者角色提交数
@eneros-foundation项目发起人 / 架构师28
@grid-rustaceanRust 工程师15
@powerdomain-reviewer电力领域专家6

感谢所有参与首版本讨论与 Code Review 的社区成员。

升级指南

v0.1.0 是 EnerOS 的首个版本,无需从旧版本升级。以下为首次使用 EnerOS 的步骤:

环境要求

组件最低版本推荐版本
Rust 工具链1.701.75
Cargo1.701.75
操作系统Linux 5.4 / Windows 10 / macOS 11Ubuntu 22.04
内存512 MB2 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 标签参与贡献