❏ 站外平台:

Google 发明新语言:Jsonnet

| 2015-05-02 09:56   评论: 8 收藏: 1    

Google开源了一门配置语言Jsonnet来取代JSON,它完全向后兼容并加入了一些新特性:注释、引用、算术运算、条件操作符,数组和对象内含,引入,函数,局部变量,继承等。Jsonnet程序被翻译为兼容JSON的数据格式。

注释:Jsonnet接受两种风格的注释——C风格(/* …. */)和C++风格(//… )。

引用:关键字self引用当前对象,操作符$引用根对象。

算术运算和条件运算符:运算符+可以计算数字和,拼接字符串、数组和对象;运算符==和!=用来判别true或false。运算符if与C语言中的三元表达式 ? : 类似。下面是一些Jsonnet运算符和转译后的JSON代码示例(借鉴了官方语言示例):

// bar_menu.3.jsonnet
{
    foo: 3,     
    bar: 2 * self.foo,  // Multiplication.
    baz: "The value " + self.bar + " is "
         + (if self.bar > 5 then "large" else "small") + ".",
    array: [1, 2, 3] + [4],
    obj: {a: 1, b: 2} + {b: 3, c: 4},
    equality: 1 == "1",
}
{
   "foo": 3,
   "bar": 6,
   "baz": "The value 6 is large.",
   "array": [1, 2, 3, 4],
   "obj": {a: 1, b: 3, c: 4},
   "equality": false
}

构建数组和对象:构造器for可以用来构建数组和对象,下面是示例:

{
    foo: [1, 2, 3],
    bar: [x * x for x in self.foo if x >= 2],
    baz: { ["field" + x]: x for x in self.foo },
    obj: { ["foo" + "bar"]: 3 },
}
{
   "foo": [ 1, 2, 3 ],
   "bar": [ 4, 9 ],
   "baz": {
      "field1": 1,
      "field2": 2,
      "field3": 3
   },
   "obj": { "foobar": 3 }
}

模块化:Jsonnet编写的代码可以分割为多个文件,使用import进行访问,引入的对象可以使用运算符+进行拼接。

函数:Jsonnet的值可以包含函数,这部分会被标记为隐藏字段并且不被翻译到JSON中。函数被用于多项评估,点击这里查看示例。

Jsonnet同样支持局部变量、引入式对象继承、运算符+拼接、可计算和可选字段等特性。

Jsonnet语言引擎使用C++11进行实现,为了便于移植到其它语言中使用C语言API进行了封装,目前提供C和Python的库。C++实现的引擎可以通过Emscripten编译为JavaScript代码,你也可以在Node.js中使用非官方的npm包

想了解更多,我们推荐阅读语言规范以及与其它配置语言的对比这篇文章。



最新评论

来自 - 广东中山 的 Safari/Linux 用户 2015-05-12 00:38 7 回复
和qml一样。
来自 - 云南 的 Mozilla/Mac 用户 2015-05-04 00:05 7 回复
这个只能呵呵,估计最后做好了也只是给 JavaScript 做嫁衣罢了
wissy 2015-05-03 13:50 回复
做些小的还可以
来自 - 云南 的 Safari/Mac 用户 2015-05-03 11:59 1 回复
没什么任何意义,Google 就不能搞点更实用的吗
[1]
来自 - 日本 的 Firefox/Linux 用户 发表于 2015-05-02 16:09 的评论:
貌似意义不大,比如再python中生成json格式的字符串,为什么不直接用python来做这些处理,还要引入这个jsonnet
linux 2015-05-03 00:23 6 回复
GOOGLE 的意思应该想把 JSON 发展成一个类似编程语言一样的配置语言,而不仅仅是配置/数据/结构。
来自 - 广东珠海 的 Chrome/Linux 用户 2015-05-02 15:00 5 回复
google能力太多,就是制作不出第2个比Common Lisp还好的语言
风铃叮当 2015-05-02 13:01 8 回复
曾经谷人希说,我的Dart比JS好,然后呢?

返回顶部

分享到微信

打开微信,点击顶部的“╋”,
使用“扫一扫”将网页分享至微信。