我见过的大多数软件都用自己的 DSL 用来写配置文件:
tmux tmux 自己的 DSL
keynav keynav 自己的 DSL
cwm cwm 自己的 DSL
i3wm i3wm 自己的 DSL
conky conky自己的 DSL
iptable iptables 自己的 DSL
nftables nftables 借鉴 tcpdump 造的 DSL
tcpdump tcpdump自己的DSL
每学习一个软件就得学一种 DSL,真的难受。
特别对编辑器来说,如果要编辑器配合这种DSL的话,每一种DSL都得写一种 高亮,查错,补全。
就算软件不用DSL,软件还有很多使用 XML这种反人类的语言。
用 json yaml scheme c Algol 风格的配置文件它不香吗?
配置文件真的需要自己造个轮子吗?
1 个赞
所以一般都会有个默认配置文件,照着写就行了。
开源软件应该当然可以选择自己用的配置文件格式吧,这完全看作者喜好。
cireu
2020 年5 月 5 日 12:50
5
JSON语法噪音也太多了,我还是更喜欢TOML/YAML
1 个赞
其实 xml json yaml 这几个语言的应用场景都不一样。
nniixxoossccnn:
软件还有很多使用 XML这种反人类的语言。
XML并不反人类。
恰恰相反,你需要的反而正是XML。
XML有Schema。
通过XML schema,你可以精确的获悉一个配置文件有哪些属性以及该属性的合法格式。如果你有一个好的XML编辑器,只要右键那个节点,然后Go to definition。
通过XML schematron,你甚至可以对XML文档进行图灵完全级别的约束。如果你有一个好的XML编辑器,当数据填写错误时,会自动有红线标出。
注意:这些工作不需要你专门写什么 高亮,查错,补全的插件。XML编辑器提供完全解决方案,你只需要提供正确的xsd/sch。
XML更适合UI界面配置。
每一个UI元素作为一个XML节点,这得益于XML的节点代表UI元素的类型。
XML有名字空间
一些复杂配置,往往需要复用配置文件。
比如:用户可以通过插入xi:include把一个大的配置文件拆成几个子文档,这都得益于XML有名字空间。
所以,其实轮子早就有人造好了,就是XML。
5 个赞
非常赞同~ XML的确很棒 可惜没有对应的编辑器的情况下 编写会比较麻烦 相对 直接的
port: 22
之类的而言会比较麻烦, 但是 XML的scheme是很棒的东西~ (笑 其实也就是lisp的变种 哈哈哈哈哈)
嘿嘿嘿, php天下第一(笑)
语言大战时间到, 有一些是有必要的, 有一些只是闲的蛋疼… awesomewm => lua 开心~
PS: awesomewm其实可以说是我们插入插件 而不是配置了
昨天读 Generic Programming Advanced Lectures,发现还真有这么一个XML压缩器:
http://www.cs.uu.nl/research/projects/generic-haskell/xmltools/XComprez/
XComprez is a compressor for XML documents. It assumes the input document is valid according to a given DTD. Since the DTD is known, it is possible to use knowledge about the DTD when compressing a document. Preliminary results show that XComprez compresses 25-50% better than XMill (see also gnosis), the most advanced publicly available XML compressor I know of.
1 个赞
XML不太适合做那种零碎的小配置,比如:配个 project 啥的。。
XML适合那种比较集中的大型配置,比如:游戏开发里的各种Unit,Weapon啥的。假如什么时候策划改了某个单位的schema,那么所有与该schema相关的实例都会报错(你甚至可以写一个XSLT去批量做修改)。
1 个赞
说到这种DSL语法,如果不考虑打字输入的速度,偏向于可配置,可读的话,我不知道JSON行不行,另外我觉得把JSON语法弄到bash脚本语法里好像不错,比如
rm {'directory': './','target':'hello.c'}
nmap {'host':'localhost','port':'1234','ping?':false,'script':'script-name'}
当然了,没怎么写过配置语法,只是一个想法