1 个不稳定版本
0.1.0 | 2023年10月5日 |
---|
#1867 在 解析实现
180KB
424 行
DEML (DAG 提升标记语言)
警告:实验性
设计用来表示所有类型图数据结构的语言,例如 Graphviz 的 DOT 语言 和 Mermaid JS 的 流程图语法,没有充分利用 DAG 的特定属性(有向无环图)。
DAGs 就像河流。水流不会逆流而上(潮汐和洪水除外)。同一高度的河段不能是彼此的输入或输出,就像下面图片中的节点 C、D 和 E。它们的输入是 B。C 输出到 F,而 D 和 E 输出到 G。
DEML 的目标是利用这种排序作为文件语法的部分,使其更容易被人解析。在 DEML 中,我们使用 ----
在新的一行上表示提升标记。提升集群的顺序很重要,但两个提升标记之间的节点的顺序不重要。
UpRiver > A
----
A > B
----
B > C | D | E
----
C
D
E
----
F < C
G < D | E > DownRiver
----
DownRiver < F
节点由行上的第一个单词定义。定义的节点可以用 >
指向其输出,用 <
指向其输入。输入和输出由 |
分隔。
Dagrs
Dagrs 是一个库,用于运行在 DAG 中定义依赖关系的多个任务。在 DEML 中,可以使用 =
将 shell 命令分配给节点。可以使用命令 deml run -<filepath>
通过 dag-rs 运行 DEML 文件。
为了比较可读性的差异,以下是 YAML 和 DEML 中的 Dagrs YAML 示例。
YAML
dagrs:
a:
name: "Task 1"
after: [ b, c ]
cmd: echo a
b:
name: "Task 2"
after: [ c, f, g ]
cmd: echo b
c:
name: "Task 3"
after: [ e, g ]
cmd: echo c
d:
name: "Task 4"
after: [ c, e ]
cmd: echo d
e:
name: "Task 5"
after: [ h ]
cmd: echo e
f:
name: "Task 6"
after: [ g ]
cmd: python3 ./tests/config/test.py
g:
name: "Task 7"
after: [ h ]
cmd: node ./tests/config/test.js
h:
name: "Task 8"
cmd: echo h
DEML
H > E | G = echo h
----
G = node ./tests/config/test.js
E = echo e
----
F < G = python3 ./tests/config/test.py
C < E | G = echo c
----
B < C | F | G = echo b
D < C | E = echo d
----
A < B | C = echo a
Mermaid JS
要将 DEML 文件转换为 Mermaid 图表文件 (.mmd),请使用以下命令:deml mermaid -i <输入文件> -o <输出文件>
。Mermaid 文件可以在 mermaid.live 上生成图像。
目标
- 将我关于基于升高的 DAG 表示的想法付诸实践
- 使用 dag-rs 运行 DAG
- 将 DEML 文件转换为 Mermaid 图表文件
- 添加标签边语的语法
可能的目标
- 语法高亮(Haskell 语法高亮在 README 中的示例中效果良好)
非目标
- 支持商业产品
为什么?
我在想,在 C 等语言中,函数声明顺序很重要,这很烦人。然后我想知道是否有可能声明顺序很重要是件好事的情况,我想到了 DAG。
许可
以下任一许可下
- Apache 许可证 2.0 版(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选。
贡献
除非您明确声明,否则您提交给作品并有意包含在内的任何贡献,根据 Apache-2.0 许可证的定义,应双许可如上所述,不附加任何额外条款或条件。
依赖关系
~6–16MB
~190K SLoC