bazel packages: simplify SkylarkInfo

Previously, SkylarkInfo had one of two forms:
- schemaful, which held an array of values and a reference to
  a Layout, which mapped keys to small integers; and
- schemaless, which held an ImmutableSortedMap, which is
  internally a 7-word structure holding separate lists of
  keys and values, doubly indirect.

This change replaces both by a simpler representation:
a single table of keys followed by values, with the keys sorted.
Lookup involves binary search over the key portion.

The table is more compact than the schemaless implementation,
and despite having O(log)-time lookup, there are fewer cache
misses than in a hash table.

It may be more compact even than the schemaful implementation,
because it doesn't use space for fields that are not defined.

Also:
- remove unnecessary Attribute.getSkylarkValue key munging
  done by the old copyValues function.
  This required fixing one caller (WorkspaceFactory).
- remove unnecessary Starlark.fromJava value munging
  done by the old copyValues function.
  This requires fixing four callers.
- assert validity of values.
- delete Layout
- optimize struct + struct to make only one pass and one allocation.
- rename createSchema{ful,less} to create.
- delete createEmpty

RELNOTES: N/A
PiperOrigin-RevId: 284810601
18 files changed
tree: 9b51f66d13e6d597c51763a9485386a1e25053ad
  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