bazel syntax: delete StarlarkThread.Extension

This change replaces every use of Extension by Module.
Extension was a pair of a globals dictionary, and a digest
of "the thread's source file" (a dubious concept) and all
the Starlark (actually: .bzl) files it transitively loads.

Before this change, construction of StarlarkThread would
combine the file hash (which is only defined if the parseWithDigest
function was used) with the transitive hashes of the imports,
and would save this information in the StarlarkThread.

Now, StarlarkImportLookupFunction does this hashing, and
saves the result in a new field of BazelStarlarkContext,
which is the application-specific state carried by a Starlark
thread created by Bazel. This field is set only in threads
created by StarlarkImportLookupFunction.

SkylarkTestCase.newStarlarkThread sets it to a dummy value,
because execAndExport requires it to be set.
(It was implicitly a dummy value prior to this change: in these tests
source files are not parsed with parseWithDigest, and newStarlarkThread
uses an empty import map.)

Also:
- use byte[] not string for digest.
- StarlarkImportLookupValue
  - record the transitive digest alongside the module.
  - use == equivalence relation. There is no realistic scenario in which
    two distinct SILV instances alive at the same time might be equal.
- terminology:
        import -> load
     extension -> module
      hashCode -> digest
- without Fingerprint, lib.syntax no longer depends on lib.util.
- Extension.checkStateEquals moved to SerializationCheckingGraph.
- Eval: hoist loop-invariant code for LoadStatement
- discard_graph_edges_test: remove assertions on cardinality of Extension.
  The cardinality of Module is quite different, and not something that
  belongs in this test.

A follow-up change will remove StarlarkFile.getContentHash.

This is a breaking API change for Copybara.

PiperOrigin-RevId: 310441579
34 files changed
tree: d5cb034f45135d6e67ffebde46e75b7081fe209c
  1. .bazelci/
  2. examples/
  3. scripts/
  4. site/
  5. src/
  6. third_party/
  7. tools/
  8. .bazelrc
  9. .gitattributes
  10. .gitignore
  11. AUTHORS
  12. BUILD
  13. CHANGELOG.md
  14. CODEOWNERS
  15. combine_distfiles.py
  16. combine_distfiles_to_tar.sh
  17. compile.sh
  18. CONTRIBUTING.md
  19. CONTRIBUTORS
  20. distdir.bzl
  21. ISSUE_TEMPLATE.md
  22. LICENSE
  23. README.md
  24. WORKSPACE
README.md

Bazel

{Fast, Correct} - Choose two

Build and test software of any size, quickly and reliably.

  • Speed up your builds and tests: Bazel rebuilds only what is necessary. With advanced local and distributed caching, optimized dependency analysis and parallel execution, you get fast and incremental builds.

  • One tool, multiple languages: Build and test Java, C++, Android, iOS, Go, and a wide variety of other language platforms. Bazel runs on Windows, macOS, and Linux.

  • Scalable: Bazel helps you scale your organization, codebase, and continuous integration solution. It handles codebases of any size, in multiple repositories or a huge monorepo.

  • Extensible to your needs: Easily add support for new languages and platforms with Bazel's familiar extension language. Share and re-use language rules written by the growing Bazel community.

Getting Started

Documentation

Contributing to Bazel

See CONTRIBUTING.md

Build status