一切都是 DSL……
汇编器:MOV R1 到 R2
编译器:赋值语句 -- A = A + 1,条件 -- IF (TRUE) ...,分支 -- RETURN
HTML: ... 描述嵌套结构
TCP/IP:描述到/从地址
PDF:描述文本/图像在纸上的位置
字体:描述字符
我们用来描述特定过程的任何语言都是 DSL。不幸的是,即使是我们最基本的流程也缺乏特定领域的语言来描述,所以我们使用我们必须的少数语言来描述我们所做的一切。 “压缩我网站中的所有 html 文件”需要 300 行 3 或 4 种不同语言才能完成。
要构建 DSL,请确定描述您可以记住且不需要文档的过程所需的最少字符数。请记住,速度和易用性是主要的设计标准。解析速度如此之快,以至于您使用的任何语法都可以,在大多数情况下,我更喜欢自然语言作为我的语法,“每月第一天支付员工工资”,但特定领域就是这样,特定领域,您确定最好的语法适合问题。
我不会使用其他可能方便但不适合问题的解决方案,例如用于定义数据 (XML) 的 HTML。 CSV 非常有用,它适合大多数问题。 JSON 不适合易用性部分,如果 CSV 适用于大多数问题,它会增加不必要的复杂性。我们在 DSL 中经常使用 EXCEL,它非常适合描述小问题,在 65K 到 1M 行以下,例如树结构或菜单,A 列是级别,其他列是图标、颜色、标签等(EXCEL 是可编辑的 CSV)。
我发现 HTML 并没有真正解决页面布局的问题,所以我把它去掉,定义了一个适合的 DSL。我在页面上定义了 6 个区域,HEADER、BODY、FOOTER、LEFT/RIGHT MARGINS 和 LEFT/RIGHT FULL MARGINS。然后我可以告诉页面生成器将标题栏、状态栏、菜单、表格、表格、...添加到特定的单元格。然后可以将这些单元中的每一个拆分为任意深度的行和列。任何样式的页面布局都需要几秒钟。
BODY 包含我的员工表
HEADER 包含标题栏标题“Hello World”,用于登录柯林斯软件
菜单 DSL 不适合页面布局 DSL,所以我为菜单构建了一个独特的 DSL。
资源我的主菜单
*define:menu,m,Level,Label,Icon,Action;
m,0,文件;
m,1,open,open.gif,对话框打开文件;
每个问题都是独一无二的,计算机可以使用任何格式,DSL 是为人类设计的,所以要让人类可以理解,他们可以输入的东西,并用真实的单词制作语言;因为我们描述的是真实的人物、地点和事物。