提示,一个开源数据验证语言

2021-06-15 13:27:14

提示是一种开源数据验证语言和推理引擎,它在逻辑编程中的根源。虽然语言不是通用编程语言,但它有许多应用程序,如DATA验证,数据模板,配置,查询,代码生成甚至脚本。推理引擎可用于代码中的验证数据,或者将其包含作为代码生成管道的一部分。

一个关键的东西,它与其同行语言相比,它将类型和值合并到单个概念中。在大多数语言类型和值都是严格截然不同的,提示在单个层次结构(格子,精确)中命令它们。这是一个非常强大的概念,允许提示Duany Pany Misture.it还简化了事件。对于实例,无需泛型和枚举,总结和NULL POAPESCING都是相同的。

Cue的设计可确保在任何订单中组合CUE值始终提供相同的结果(它是关联,交换和幂等)。这使得提示特别适用于CueConsrains与不同来源组合的情况:

数据验证:不同的部门或组可以每个定义自己的约束,以应用于同一组数据。

代码提取和生成:从多次源(GO代码,protobuf)中提取提示定义,将它们组合成SeedleDefinition,并使用它在另一个格式(例如OpenApi)中生成定义。

值的排序还允许设置EntireConfigurations的集合分析。大多数验证系统都仅限于检查ConcreteValue是否与模式匹配,Cue可以验证是否One Schema的实例也是另一个实例(它向后兼容的情况(是向后兼容的情况),或计算一个表示匹配的所有实例的新架构。

虽然它是一种非常不同的语言,但提示的根源位于GCL中,谷歌在谷歌使用的主要配置语言是最初的,旨在配置博格,kubernetes的前身。事实上,原始想法是使用GCL的Cue中使用的图表统一,GCL的作者与这种系统具有丰富的经验,并且经验丰富的益处,能够计算和有效的强大工具的类型。

图形统一模型提示基于在当时的计算语言学中的常见用途,并且Wassuccessfully用于管理超过100k线的语法和词汇超过120万线。这些是有效的,因为作为人类的不规则和复杂的东西是有效的。这些系统的类型或约束,OnedEfines在同时减少水库的同时验证数据.Overall,这种方法似乎非常适合云配置。

然而,GCL的早期设计更简单,巧合的是与图形统一的概念不相容。这一更简单的方法证明了不足,但它已经太迟了到了早期的预见方法。初,基于继承的覆盖模型采用。复杂性使得早期预见的工具InterAtableAnd他们从未实现过。同样适用于复制其模型的GCL后代。

提示返回使用基于约束的方法的原始理念,并努力将经验教训从15年的GCL使用中纳入。此外还包括从后代吸取的经验教训,并完全分配不同的方法。

暗示不区分值和类型。这是一个强大的概念,允许提示定义超详细控制,但它也简化了事物:没有单独的架构或数据定义语言来学习和诸如Sum类型,枚举等learnand相关的语言构造,甚至没有与单个构造的倒塌折叠。

下面是这一概念的演示。左边一个人可以看到莫斯科城市的一些属性的JSON对象(在CUE语法中)。中间列显示了任何市政府的可能模式。右侧的一个可能的模式在数据之间看到了混合和架构的典型提示。

通常,在CUE中,首先以广泛的定义开头,描述了可能的实例。然后通过组合不同源(部门,用户),直到具体数据Instanceremains组合约束,然后将其缩小这些定义。

Cue的约束充当数据验证器,还可以减少Boilerplate的双架机制。这是一种强大的方法,但需要一些不同的思路。传统的继承方法,一个指定它们应该使用的每个点遗传的模板。而是提示,一个在配置中选择一组节点,以应用模板。这选择可以完全在配置中的不同点。

查看此方法的另一种方法是JSON配置,例如,可以以分别为一系列路径叶值.For,

Cue中的每个字段声明都定义了一组用于应用特定约束的节点。由于顺序无关紧要,可以将多个约束应用于Chesame节点,所有这些约束都需要同时应用。甚至可以在不同的文件中应用。但它们可能永远不会互相矛盾:如果一个声明说一个字段为5,则另一个声明可能不会覆盖它以6.传输一个字段兼容,且< 10是有效的。

这种方法比全面爆炸的继承更受限制;另一方面,它可能无法重用现有配置。例如,它也是一个更强大的样板remover。对于实例,假设集合中的每个作业需要使用指定emplate。而不是在每个点拼出这一点,可以在一个黑包语句中单独声明。

乔布斯:{foo:acmmonitoring& {/ * ... * /}栏:acmmonitoring& {/ * ... * /} baz:acmunitoring& {/ * ... * /}}

乔布斯:[字符串]:acmemonitoringjobs:{foo:{/ * ... * /} bar:{/ * ... * /} baz:{/ * ... * /}}

没有必要重复对监视模板的作业的引用,因为第一个已经指出所有作业必须使用ACMEmonitoring.such要求可以在文件中指定。

这种方法不仅减少了Acmemonitoring的水库,也可以删除必须在作业中为每个作业指定模板的重复性。同时,此语句充当类型强制。这是一个Due Andtyped特征结构的一个关键方面语言一般。

当然,这种方法会崩溃,如果对acmmentoring的限制太严格并且工作需要覆盖它们。在此方面,Cue提供了允许默认值,选择退出,和许可约束的机制。

有一个(似乎)需要做复杂的复制来生成一些配置数据的时间。但是,当一个难以做出改变时,配置语言的简单性可能是至关重要的。这些是显然的利益。

Cue采取了分离的计算和配​​置的立场。陈提示实际上使得这种简单。需要计算的数据可以在cueand之外生成要混合的文件。数据甚至可以在Cue中生成数据脚本层并在配置流水线中自动注入。依赖于CUE的属性依赖于CUE的属性,使得该数据的顺序是无关紧要的。

语言的有用性可能取决于项目的规模。然而,太多不同的语言可以放置认知应变ondevelopers,并且从一种语言迁移到另一语言到另一语言到另一个攻击要求的变化可能非常昂贵。旨在最大限度地减少这些成本覆盖所有尺度的无数数据和配置相关的任务。

小标尺小尺度,减少配置中的样板并不一定是最好的事情。然而,在小规模中,重复可能会出现错误。对于这种情况,Cue可以定义模式以验证其他类型的数据文件。

Medium Scaleas很快欲望会减少Boilerplate,Cue工具Canhelp自动重写配置。将Kubernetes教程的快速和脏部分使用导入和修剪工具进行示例。可以使用此方法自动消除线条的示例。

大规模的ScaleCue的底层形式主义是为大规模配置开发的。它导入模型包括大型工程的最佳实践,它针对自动化进行了优化。这是一个先进的工具。底层的潜在工具的关键是最重要的,允许最不可能的数学模型其他方法.Cue的trim命令是这个例子。

自动化是key.nowAdayay,通过机器生成,分析,重新格式化等良好的代码块。提示语言,API和工具旨在允许格式素描。值是: 订单独立也扮演一个关键作用。允许组合来自各种来源的约束而不设法定义它们将应用于Get预期的结果的顺序。