jrcalgo/ciac-compiler

GitHub: jrcalgo/ciac-compiler

CIaC 是一个将声明式后端架构 DSL 编译为五种语言生产级代码的编译器,同时内置确定性模拟、部署生成与架构演进能力。

Stars: 0 | Forks: 0

# CIaC — 代码即基础设施编译器 一个 `.ciac` 源文件。生成五个达到生产级质量的后端 —— Python、 Rust、TypeScript、Go、Java —— 它们保持一致性,各自在其 生态系统中符合语言习惯,且每次重新构建时字节完全一致。同一个文件 可以作为*整个系统*的确定性模拟运行,包括 各种故障,并且无需数据库、消息代理或 Docker。`ciac build` 会生成真实的 部署:目前支持 compose,根据需要也可支持 Kubernetes、Terraform 或 CI。 编译器负责管理连接;你的业务逻辑存在于生成的 stub 中,你可以自行编辑,且绝不会被覆盖。 代码基础设施即代码 编译器不是那种你 fork 后就会产生分叉的脚手架模板,也 不是你要部署的 runtime —— 它是一个编译器,你会在系统的整个生命周期中 持续针对源文件运行它。如果这种权衡 不是你想要的,或者你的架构不适合由服务/API/pipeline/stream 组成的 类型化图,那么它就不适合你。 ## 十五分钟,从开始到完成 安装: ``` curl -fsSL https://raw.githubusercontent.com/jrcalgo/ciac-compiler/main/install.sh | sh # 或:cargo install --path crates/ciac (需要 Rust toolchain;约 2 分钟) ``` 搭建项目并查看你得到了什么 —— `ciac new` 会生成 `main.ciac` 以及一个告诉你接下来该运行什么的 README: ``` ciac new my-app && cd my-app && ciac check main.ciac ``` 本演练的其余部分使用了一个稍微大一点的程序 —— 一个 record、免费的 CRUD、一个带有 `transaction` 的 handler、一个 stream、一个 worker —— 已提交到此仓库中,即 [`examples/quickstart.ciac`](examples/quickstart.ciac),因此它永远不会 与实际编译的内容产生偏差。将其粘贴到你自己的 `main.ciac` 中 以便在 `my-app` 中继续操作,或者克隆此仓库并直接 将下面的命令指向 `examples/quickstart.ciac`: ``` service Notes; use { db Postgres; queue NATS; } record Note { id: Uuid; title: String; body: String; } crud Note: Note; // free CRUD: /notes record ArchiveEvent { id: Uuid; note_id: Uuid; } table ArchiveEvents: ArchiveEvent; stream NoteArchived: Note; handler ArchiveNote(note: Note) -> Note { transaction { db.insert(ArchiveEvents, ArchiveEvent { id: Uuid.new(), note_id: note.id }); } return note; } api ArchiveNoteRoute: Note { method: POST; path: "/notes/archive"; } pipeline ArchiveNoteRoute: ArchiveNote -> publish NoteArchived -> Return; worker LogArchive on NoteArchived { max_retries: 2; } handler RecordArchiveEvent(note: Note) -> Note { return note; } pipeline LogArchive: RecordArchiveEvent; ``` 为其中一个目标构建它 —— 五个中的任意一个: ``` ciac build examples/quickstart.ciac --target python --out ./build ``` 将 `--target python` 换成 `rust`/`typescript`/`go`/`java`,下面的每个 命令依然可以原封不动地运行 —— 这就是一致性声明, 可以通过演示证明,而非仅仅口头 assertion。`./build/app/logic/archive_note.py` 是六行真实、易读的代码 —— 包含 transaction 和返回 值,没有任何编译器需要向你隐藏的东西。 现在,无需启动任何东西即可运行系统 —— 没有 Postgres,没有 NATS, 没有 Docker —— 并向其中注入一个真实的故障: ``` ciac sim examples/quickstart.ciac --target python --out ./build \ --scenario sim/quickstart.ciac-sim.json # [PASS] 29-m3-quickstart ``` 该场景 ([`sim/quickstart.ciac-sim.json`](sim/quickstart.ciac-sim.json)) 让 archive 自身的数据库提交失败一次,断言审计行从未 到达,然后重试,并断言它在第二次确实成功了 —— 这是一个针对真实生成代码的端到端原子性证明,具有确定性, 只需几毫秒。然后确认生成的项目本身是完好的并启动它: ``` ciac verify examples/quickstart.ciac --target python --out ./build ``` ``` ciac dev examples/quickstart.ciac --target python --out ./build ``` `ciac dev` 会监控源文件,重新生成代码,重启 compose 技术栈,并在每次保存时重新探测健康状况。这就是整个循环:一个文件、 五种语言、在单个 container 启动前的真实模拟系统, 以及在你准备好时的真实系统。 ## 全局概览 | CIaC 概念 | Python | Rust | TypeScript | Go | Java | |--------------|--------|------|-------------|-----|------| | API | FastAPI router | Axum router | Fastify plugin | `net/http` `ServeMux` | Spring MVC `@RestController` | | Database | SQLAlchemy async (Postgres/MySQL/SQLite) | SQLx pool | Drizzle + raw SQL | `database/sql` pool | Spring `JdbcClient` | | Queue | nats-py / aiokafka | async-nats / rdkafka | `@nats-io/transport-node` / kafkajs | nats.go / franz-go | jnats / spring-kafka | | Auth | JWT / OAuth2 | JWT / OAuth2 | JWT / OAuth2 | JWT / OAuth2 | JWT / OAuth2 | 上面的每个 provider 都支持在所有五个目标上生成;完整的表格, 每一项功能(缓存、对象存储、电子邮件、搜索、tracing、 指标、调度器、实时通信)以及目标之间已披露的每一项差异都位于 [docs/language.md](docs/language.md) 和 [docs/backends.md](docs/backends.md) 中 —— 这份如实披露的账本本身 就是卖点的一部分,而不是被隐藏起来。 **模拟**比上面的演练要深入得多:完整的关系型和 broker 模拟、虚拟时间、每一个故障注入点,并且 — 自 v0.26 起 —— 可以将整个*多服务*系统(共享 broker、共享 时钟、跨服务 `call`s)作为一个确定性运行进行模拟,支持 所有五个目标。请参阅 [docs/simulation.md](docs/simulation.md)。 **部署**会将构建转换为 compose、Kubernetes 清单 (`--deploy k8s`)、Terraform(`--deploy terraform`),或者完全镜像 `ciac verify` 的 GitHub Actions 工作流(`--deploy ci`); `ciac verify --system` 会启动真实的 compose 技术栈,并 针对它运行生成的系统测试。请参阅 [docs/deployment.md](docs/deployment.md)。 **演进**是第一方的比较,而不仅仅是文件差异比对: `ciac diff --semantic` 会针对签入的基线,将架构更改分类为 破坏性/新增/内部;`ciac rename` 是具有事务性 重新生成重放机制的、全程序的多文件重命名;而 `ciac backfill plan` 会通过扩展/回填/收缩的阶梯流程来处理破坏性的存储 变更。请参阅 [docs/evolution.md](docs/evolution.md)。 **Agent** 使用这个 CLI 而不是人工操作时,会有其专属的 入口:`ciac describe`(作为单个版本化 JSON 文档的完整词汇表)、 `ciac mcp`(作为 MCP 工具的 check/build/diff/verify/graph/explain/fix)、 以及在每个搭建和构建的项目中生成的 `AGENTS.md`。请参阅 [docs/agents.md](docs/agents.md)。 ## 接下来去哪里 - **正在评估 CIaC?** [docs/positioning.md](docs/positioning.md) 是 与框架、代码生成器和 BaaS 平台的诚实对比 —— 包括 何时不该使用它 —— 并且 [docs/backends.md](docs/backends.md) 的差异账本为其中的每一个比较声明提供了支持。 - **想要构建项目?** [docs/guide/](docs/guide/01-first-service.md) 是一个包含七个指南的系列,它通过一个连续的示例,从第一个 服务一直构建到多服务模拟和部署,每个 指南都在真实的检查点处结束。 [docs/authoring.md](docs/authoring.md)(编辑器设置、`ciac lsp`、 blueprints)和 [docs/dev-loop.md](docs/dev-loop.md)(监控循环) 涵盖了 `ciac build` 之前和期间的操作。 - **完整参考:** [docs/language.md](docs/language.md)(语言 规范) · [docs/expressions.md](docs/expressions.md) (handler 主体、动词、事务) · [docs/blueprints.md](docs/blueprints.md) · [docs/architecture.md](docs/architecture.md) · [docs/ir.md](docs/ir.md) · [docs/external-backends.md](docs/external-backends.md) · [docs/regeneration.md](docs/regeneration.md) · [docs/operations.md](docs/operations.md) · [docs/errors.md](docs/errors.md)。 - **CIaC 是如何发展到这一步的:** [docs/history/history.md](docs/history/history.md) — 这个 README 曾经以此开头的版本更迭故事。 ## 从源码构建 ``` cargo build --release # the compiler cargo test --workspace # unit, golden, negative, determinism tests cargo run -p ciac -- check examples/video-platform.ciac ``` ## 仓库布局 | 路径 | 内容 | |------|----------| | `crates/ciac` | CLI | | `crates/ciac-syntax` / `ciac-ir` / `ciac-sema` | lexer/parser/AST、类型化系统图、验证阶段 | | `crates/ciac-codegen` | `Backend` trait、共享模型、确定性规则 | | `crates/ciac-backend-*` | 每个目标(python、rust、ts、go、java)一个 crate | | `crates/ciac-sim` | 确定性模拟 runtime | | `examples/` | 有效的示例程序,`sim/` 包含其场景 | | `editors/` | 用于 `.ciac` 的 TextMate 语法 + VS Code 扩展 | | `tests/` | golden 快照、负面测试套件、确定性测试 | | `docs/` | 参考文档和指南系列 —— 请参阅 [docs/README.md](docs/README.md) 获取完整索引 | ## License Apache-2.0
标签:JS文件枚举, 代码生成, 可视化界面, 后端架构, 子域名突变, 日志审计, 渗透测试工具, 版权保护, 编译器, 逆向工具, 通知系统, 领域特定语言