镍:廉价的配置语言

2021-03-12 07:49:45

镍是一种轻量级配置语言。其目的是自动化静态配置文件 - 思考JSON,YAML,XML或您的食用数据表示语言 - 然后将其馈送到另一个系统。 ITIS旨在具有一个简单,良好的核心:在它的心中,它是jsonwith函数。它可以在其中添加其他功能以提高表达性和常见性,但您可以在不使用它的情况下进行精细。

轻量级:镍旨在嵌入其他项目。 ASSUCH,一个简单而轻巧的最小解释器应该是实现的理由。还应从各种编程语言中轻易识别参考解释器。

功能:基本构建块是功能。它们是一流的级别,可以通过,调用和组成。

渐进式:静态类型提高代码质量,充当副词,并尽早消除错误。一方面,特定于型材配置的代码不依赖于外部输入,并且将始终会评估到相同的值,因此任何类型的错误都会在运行TimeAnyway上显示任何类型的错误。此外,一些JSON可能很难键入。在那里,类型只是aburden。另一方面,可重复使用的代码 - 即功能 - 在可能无限的不同输入上isevalateValateValate,并且令人遗憾的是impossibleto测试:在那里,类型是珍贵的。镍有类型,但是在你想要的时候选择了你,并且它安全地处理互联网互动和无型世界的互动。

合同:对类型系统的补充,合同是一个王子替代的动态类型检查。它们由Interpreter内部用于插入键入和非职业上的边界处的防护。镍会使它们提供给程序员,使他们能够以简单的方式在运行时强制执行型断言。

合并系统:虽然基本计算块是函数,但基本数据块是记录(JSON中的名为对象)。镍具有Amerge操作,可允许您将此类记录组合在一起,但是要指定关于这些记录内容的元数据(文档,默认值,类型合同等),称为丰富的值。

应该有一个标准的,明确的路径来做常用的事情。应该有没有任意限制,这限制了你这一天,你需要超越解决一个坚定的具体问题。

镍应该符合您需要生成复杂配置的任何情况,请成为软件,机器,整个基础架构或Abuild系统。

NIX包管理器:NIX是一个声明性PackageManager,用于使用自己的语言来指定包。 Nickel由NIX语言启发,而试图克服一些ITSLIMITATION。它可以用来代替nix语言。

(云)基础设施作为代码:基础架构正在变得越来越多地复杂,需要一种严格的部署方法,修改和配置。这是宣言性方法也像采用的Terraform,NixOPS或Kubernetes一样闪耀的地方,所有这些都需要潜在的复杂配置。

构建系统:构建系统是需要动态生成配置的另一一块软件,依赖图形是forexample。 Bazel规则可能需要一个强大的语言。

一些上述项目具有自己的专用配置语言。将相关项目部分进行部分比较。通常,这种语言可能遭受特征蠕变,缺乏抽象或justfeel ad-hoc。有些人也完全没事,但刚刚制作了不同的设计和权衡。

镍$ echo' Let S ="世界" "你好," ++ s' > program.nclnickel $ ./nickel< Program.ncltypechecked:OK(类型(DYN))完成:str("您好,世界")

您可以在SRC /示例中找到示例。注意到语法尚未修复,一些基本助手丢失,他们目前似乎有点外星人。

该设计在大多数情况下解决并实施,但最终的棘手症和其他重要的实际方面仍在讨论。我们的目标是从实验阶段到最低可行的产品阶段。 Thenext要处理的点是:

Cue是一种配置语言,具有焦点在dataveration上。它具有由稳固的理论支持的原始约束系统,可确保对您的代码的强保证。它允许非常高雅的冰柱规格。作为回报,支付的成本是放弃功能和图灵完全选择.Nickel' Serge系统受到了暗示之一的启发,即使NickEndoes具有一般功能并且完整,它们也是如此。

nix:nix语言或nix表达,是镍的主要灵感之一。这是一个非常简单而强大的懒惰功能语言。我们努力保留这种简单性,同时添加来自NixPackage Manager的语言的功能,模块化和分离语言。

DHALL是一种静态类型的配置语言。它也受到NIX的启发,它会增加一个强大的静态类型系统。然而,这会强迫程序员用类型注释所有代码。

jsonnet是另一种可以被称为&#34的语言; JSON与功能" (和其他事情也是如此)。它是一个具有面向对象的功能的懒惰功能,其中继承是Similarto镍' s合并系统。与镍有一个很大的差异是缺乏大量的。

Pulumi本身不是一种语言,而是一个Cloudtool(如Terraform),您可以在其中使用您的首选语言来违反您的基础架构。这是对问题的不同方法,具有不同的权衡。

Starlark是Bazel的语言,这是Python的方言。它没有类型和递归是必要的,使其无法完成。

有关设计理由以及选择这些语言的选择,请参阅理性。