什么是 Stack?
Stack 是一种用于静态软件架构图和技术栈图的小型声明式语言。你在 UTF-8 .stack 文件中描述组件、边界与关系,由渲染器决定坐标、间距、连线路径、字体和视觉表现。
这种分工让源文件简洁、易审查,也适合版本控制。同一份文档可以由兼容工具格式化、检查和渲染,而不会变成绘图指令集合。
基本模型
每份文档包含一个语言版本和且仅一个图。图中可包含节点、分组、连线、主题和布局意图。
stack
stack 1.0
diagram "Service architecture" {
node client "Web app" {
kind client
}
node api "API" {
kind service
detail "Order orchestration"
}
edge client -> api "HTTPS" {
kind request
}
}这段源代码表达客户端调用服务,但没有规定方框位置或箭头如何转弯。
Stack 的设计目标
- 简洁编写: 只需命名节点和连线即可得到有用的图。
- 可预测生成: 人和语言模型都能用一种受约束的方式稳定表达概念。
- 语义源文件: 记录拓扑和意图,而不是像素。
- 一致输出: 渲染器拥有统一的视觉系统。
- 可操作错误: 诊断可指向源码范围,并给出候选值、修复帮助和相关声明。
- 安全嵌入: 源文件不能执行代码、获取任意资源或注入 HTML/SVG。
Stack 不是什么
Stack 1.0 不是通用图语言、像素级画布、基础设施定义或可执行编程语言。它没有变量、导入、宏、条件、CSS、坐标、任意 URL 或嵌入 HTML,也不用于顺序图、状态机、类图、ER 图或完整 UML。
大型系统应拆成多张聚焦的图。Stack 为可读性设置了元素上限,而不是允许无限扩张。
处理模型
工具依次解码和解析文档、解析标识符与默认值、验证语义、解析主题与图标、求解布局并渲染。源代码错误会阻止渲染。可选主题或图标缺失、布局提示无法满足时会产生警告,并仍可返回回退图。