Starlark | |
---|---|
Paradigm | scripting, procedural (imperative) [1] |
First appeared | 2015[2] |
Typing discipline | Dynamic [1] |
OS | Cross-platform |
Filename extensions | .star |
Website | github |
Major implementations | |
starlark-go, starlark-rust, | |
Influenced by | |
Python [1] |
Starlark is a lightweight, high-level programming language designed for embedded use in applications. It uses a subset of the Python syntax. By default, the code is deterministic and hermetic. [1]
Starlark was released in 2015 as part of Bazel under the name Skylark [3] . This first implementation was written in Java. In 2018, the language was renamed Starlark. [4]
In 2017, a new implementation of Starlark in Go was announced. [5]
In 2021, Meta announced an implementation of Starlark written in Rust, [6] to be used for the Buck build system. [7] [8]
In addition to the Bazel [9] and Buck build systems, Starlark is used by dozens of projects, [10] [11] including Isopod [12] , skycfg [13] , Uber's Starlark Worker [14] , and Tilt. [15]
On GitHub, Starlark is among the top 50 languages based on the developer activity. [16] [17]
Starlark syntax is a strict subset of Python syntax. [1] Similar to Python syntax, Starlark relies on indentation to delimit blocks, using the off-side rule.
Starlark's statements include: [18]
=
statement to assign a value to a variable if
statement to execute conditionally a block of code (with else
or elif
) for
statement to iterate over an iterable objectdef
statement to define a function break
statement to exit a loopcontinue
statement to skip the rest of the current iteration and continues with the nextpass
statement, serving as a NOP, syntactically needed to create an empty code blockreturn
statement to return a value from a function.load
statement, which replaces Python import
, to import a value from another module. [19] Unlike Python, the order of load statements does not affect the semantics of the code. [20] Unlike Python, Starlark statements don't include: while
, try
, raise
, class
, with
, del
, assert
, yield
, import
, match
and case
. [21]
To ensure thread safety and support parallel computing, Starlark has a feature called freezing. At the end of the evaluation of a module, all values become immutable. This means that the values that can be accessed from multiple threads can no longer be modified, which removes the risk of race conditions. [3] [22]