为什么使用x8l而不是一个更普遍使用的格式?
Shawyeok opened this issue · 5 comments
首先感谢作者花精力维护第三方版本。
我理解,配置文件不是应该让用户学习成本越低越好么?例如YAML
、JSON
等。若论表达能力,YAML似乎也不输x8l。
<com.alibaba.p3c.pmd.config version=0.0.1>
<rule_config>
<ConstantFieldShouldBeUpperCaseRule>
<LOG_VARIABLE_TYPE_SET>Log&Logger>
<WHITE_LIST>serialVersionUID>
>
<LowerCamelCaseVariableNamingRule><WHITE_LIST>DAOImpl>>
<PojoMustOverrideToStringRule><POJO_SUFFIX_SET>DO&DTO&VO&BO>>
<UndefineMagicConstantRule><LITERAL_WHITE_LIST>0&1&""&0.0&1.0&-1&0L&1L>>
<MethodReturnWrapperTypeRule>
<PRIMITIVE_TYPE_TO_WRAPPER_TYPE>
<int>Integer>
<boolean>Boolean>
<float>Float>
<double>Double>
<byte>Byte>
<short>Short>
<long>Long>
<char>Character>
<void>Void>
>
>
<CollectionInitShouldAssignCapacityRule><COLLECTION_TYPE>HashMap&ConcurrentHashMap>>
<ClassNamingShouldBeCamelRule><CLASS_NAMING_WHITE_LIST>Hbase&HBase&ID&ConcurrentHashMap>>
>
<rule_blacklist>>
<class_blacklist>>
<rule_class_pair_blacklist>>
>
1. 设计和实现x8l的原始动机
在两三年以前,我曾经试图制作一款2D(后续有对接龙骨的计划,不过以2D为核心,非2D部分计划只做一些渲染,不做物理)游戏引擎。底层使用lwjgl。对标竞品是天闻角川的rpg maker系列。目标是更高的性能,更好的书写手感(毕竟js……我就不放那张“谢谢你创造js”的图了,写过的都懂)
我需要一门语言用于描述配置、地图、角色信息等数据文件
但是找了一圈没发现很适合的
json的问题是json不支持注释
(虽然json5(一个json的方言)支持,以及事实上很多json解析库作为可选特性支持)
而且json的属性间存储顺序是与表意无关的,这也是很恶心的一点
xml的问题是xml太过冗长
yaml存在同样的问题,甚至在冗长的程度上比xml更加过分。毕竟对齐……
(虽然当然压缩一下可以解决很多问题,但是终究我还是希望在原始文件上就不要过分膨胀)
另外,还有一个问题,处于某些原因,最好最终采取的格式的语义能够描述xml的全部语义(DTD除外,DTD去死吧)的同时,还能描述json的全部语义。
所以最终的需求汇总是:1. 语义表达能力强 2. 可以同时存在人类可读
和高压缩
两种模式,并且一定程度下可以转化。
2. 在p3c-tpm版中使用x8l的动机
emm 随手拿来就用了 没想太多
3. 针对贵方提出的难以配置
的问题的解决方案
3.1 增加json格式配置文件支持
感谢耐心解答。
我不太懂游戏制作,仅停留在player阶段,不太清楚游戏引擎对于配置文件的特殊要求,下面是本人一点拙见:
json的问题是json不支持注释
(虽然json5(一个json的方言)支持,以及事实上很多json解析库作为可选特性支持)
而且json的属性间存储顺序是与表意无关的,这也是很恶心的一点
注释可以在JSON解析之前预处理,大致类似于grep -vE '^\s*//'(仅支持单行注释),至于存储循序一般JSON库都支持一个Ordering的特性。
yaml存在同样的问题,甚至在冗长的程度上比xml更加过分。毕竟对齐……
yaml相对xml节省了结束标签、尖括号,付出的代价也就是多了一个冒号而已,当然yaml的缩进是强制的,另外我一般使用tableSize: 2的缩进,避免配置快速发展成子弹型。
另外一个很重要的点是语言的生态,validator、formatter以及代码提示等。
az 一不小心搞成编辑了 抱歉
至于存储循序一般JSON库都支持一个
Ordering
的特性。
是的,但是这是实现,而不是语法约定。
同json5不是json一样,强行用实现的顺序性特性约束语法的话,那么得到的就不是json,而是json的变体
yaml相对xml节省了结束标签、尖括号,付出的代价也就是多了一个冒号而已,当然yaml的缩进是强制的
一个缩进就是至少两个字符。一层缩进就是额外对每个缩进加两个字符。
另外一个很重要的点是语言的生态,validator、formatter以及代码提示等。
生态我做了 https://plugins.jetbrains.com/plugin/13915-x8l
至少包含转化器、格式化器、代码高亮。
校验器目前没有。