领域特定语言(DSL)是一种针对特定领域优化的小型语言。由于 DSL 有明确的针对性,它允许使用者声明自己_想要什么_,而不是_如何去_做,因此能极大地提升工作效率和理解程度。
它的一个常见应用领域是复杂的自定义和配置。
例如,DOT 语言允许你用文本描述一张图,然后由 Graphviz 工具(比如dot)将其转换成图片。一个简单的图长这样:
graph {
graph [bgcolor="yellow"]
a [color="red"]
b [color="blue"]
a -- b [color="green"]
}
把这段内容放进文件example.dot,再运行dot example.dot -T png -o example.png,就会生成一张example.png图片:黄色背景上,一个红色圆圈和一个蓝色圆圈由一条绿色线相连。
请编写一个类似 Graphviz dot 语言的领域特定语言。
我们的 DSL 与 Graphviz dot 语言相似,都是用来创建图数据结构的。不过,与 DOT 语言不同,我们的 DSL 是一种内部 DSL,只在本语言中使用。
本练习希望你使用 builder pattern 构建多个 struct。简单来说,这个模式让你把一个包含大量参数的 struct 构造函数拆分成几个独立的函数。这样一来,你就能以紧凑却高度灵活的方式构建和配置 struct。
你可以在这个页面上了解更多。