Starlark是一种配置语言,最初被设计用作Bazel构建系统的配置语言。以下是关于Starlark语言的一些关键信息:

  1. 语法和语义

    • Starlark的语法是Python的一个严格子集,这意味着任何熟悉Python的程序员都会对Starlark的语法和表达式结构感到非常熟悉。
    • 它是一种未类型化的动态语言,具有高级数据类型、一级函数和词法作用域,以及自动内存管理或垃圾回收。
  2. 用途

    • Starlark不是用来编写应用程序的,而是用来表达配置的。它的程序是短暂的,没有外部副作用,其主要结果是结构化数据或对宿主应用程序的副作用。
  3. 简单性

    • Starlark语言设计简单,没有用户定义的类型、继承、反射、异常或显式内存管理。执行是有限的,语言不允许递归或无界循环。
  4. 并行性和确定性

    • Starlark适合在高度并行的应用中使用。由于共享数据结构因“冻结”而变得不可变,因此可以在多个线程中并发调用Starlark解释器,而不会发生数据竞争。
    • 该语言是确定性和封闭的。用相同的解释器执行相同的文件总是得到相同的结果。默认情况下,用户代码不能与环境交互。
  5. 数据类型

    • Starlark提供了多种数据类型,包括None、布尔值、整数、浮点数、字符串、字节、列表、元组、字典、函数以及内置函数。
  6. 表达式和语句

    • Starlark支持多种表达式和语句,包括标识符、字面量、字典表达式、列表表达式、一元和二元操作符、条件表达式、推导式、函数和方法调用、点表达式、索引表达式、切片表达式、lambda表达式等。
    • 语句包括空语句、赋值、增强赋值、函数定义、返回语句、表达式语句、if语句、for循环、break和continue语句、load语句等。
  7. 模块执行和内置函数

    • Starlark提供了模块执行的概念,以及一系列内置常量和函数,如None、True和False、abs、any、all等。

Starlark语言因其简洁性和与Python的相似性,被广泛应用于配置管理和构建系统,尤其是在大型项目如Tensorflow、Envoy、Kubernetes和KubeVirt中。