(The) Starlark Language
github.com
github.com
[...]
>"Design Principles
Deterministic evaluation. Executing the same code twice will give the same results.
Hermetic execution. Execution cannot access the file system, network, system clock.
This sounds like Starlark has purposes, intent and capabilites very similar/analogous/comparable to the Nix Programming Language:
https://zero-to-nix.com/concepts/nix-language
>"Nix is a pure, functional, lazy, declarative, and reproducible [aka "deterministic"] programming language."
Starlark is used for Bazel, which is used for builds...
Nix is used for builds and to build the entirety of NixOS operating system itself...
Both are deterministic (and thus lead to reproducible builds).
So they seem to have the same purposes and intent...
It could be argued that Nix is functional whereas Starlark (apparently based on Python which is not a functional programming language) doesn't appear to be, but aside from this nuance, both would seem to implement the same general purpose and intent...
Related:
"A glimpse of the design of Skylark"
https://blog.bazel.build/2017/03/21/design-of-skylark.html
Now, I am not clear if the Nix programming language is paralellizable, or could be made paralellizable...
>"One special feature of Skylark is how it handles parallelism. In Bazel, a large build require the evaluation of hundreds of BUILD files, so we have to load them in parallel. Each BUILD file may use any number of extensions, and those extensions might need other files as well. This means that we end up with a graph of dependencies.
Bazel first evaluates the leaves of this graph (i.e. the files that have no dependencies) in parallel. It will load the other files as soon as their dependencies have been loaded, which means the evaluation of BUILD and .bzl files is interleaved."
I wonder if the Nix programming language does this (can parallelize builds, which requires special dependency graph walking) -- or could be made to do something like this in the future...