Get desktop application:
View/edit binary Protocol Buffers messages
Next id: 15
In order for this build to be repeatable (or perhaps, in the future, statically analyzed in some way), here are the exact command line args that were passed to the compiler to build this module.
This is essentially a serialized symbol table containing just the newtypes and aliases exported by this module.
Exported transitive types are types that are actually defined by this Module's deps but referenced in the exported procedures/types of this Module's api. This is necessary to communicate explicitly what types are being talked about here, as this is technically ambiguous from looking at the api file alone as readers couldn't know what concrete deps the module was compiled against. This field resolves that ambiguity by specifying the concrete disambiguator for each exported transitive type.
This field contains the codegen pertaining to any static definitions that are guaranteed to be provided by this module. In less opaque terms, this contains codegen for any non-generic procedure definitions that are exported by this module. This *does not* include any codegen for generic procedure monomorphizations (except for those monomorphizations that are explicitly called from exported procedures *within* this module). Later on, when this module is depended on in a Claro Binary, the concrete monomorphizations needed by the overall will be codegen'd at the last minute.
As Claro will need to postpone codegen of generic procedure monomorphizations until after the entire program is assembled into a Claro Binary, this serialized module actually needs to maintain the original Claro source files that contain all exported procedure implementations. This way, once all concrete monomorphizations are known, it's possible to re-parse the source file to find the necessary generic procedure defs to codegen monomorphizations for.
Mapping of the transitive closure of all monomorphizations already codegen'd by this module and its entire dep graph. This will be used by any compilation unit depending on this module to determine when it's safe to completely short-circuit codegen of monomorphizations that will certainly already be included in the final Jar by depending on this module. This should have a significant compile-time performance benefit while not having any effect on the running program.
Used in:
Used in:
Used in:
The name of the generic procedure for which monomorphization is being requested.
The ordered list of concrete types the procedure's generic type params are being bound to.
Used in:
Used in:
Strictly speaking, these concrete signatures should be derivable from the signatures listed in the contract definition itself. However, as that would require some significantly complex logic to be duplicated, I'm making the design decision to instead directly encode the concrete signatures to just decode them instead of re-derive them from scratch.
Used in:
These are the flags actually directly exported by this module. These are separated out from the transitive flags literally just to enable ClaroDocs to correctly attribute flags to their defining module.
These are the flags exported by the transitive closure of all of this module's deps. These need to be collected in order for Claro to collect them all at the top-level claro_binary() to codegen parsing logic.
Used in:
,Used in:
Used in:
Used in:
Used in:
This message breaks down an exported transitive dep type as follows: For the type reference `FooDep::SomeType` in a .claro_module_api file: - module_name = "FooDep" - unique_module_name = "src$com$some$concrete$dep$module" - this is assuming tha the concrete claro_module() dep implementing FooDep::SomeType is located at the bazel - path "//src/com/some/concrete/dep:module".
Used in:
Used in:
Used in:
Literally just a simple wrapper type in order to have a map with list values.
Used in:
Used in:
, , , , ,Used in:
Claro doesn't utilize a "package visibility" system like Java does, instead it assumes that you'll control code visibility using Bazel's builtin target visibility controls. However, it does need some mechanism for ensuring that cross-project .claro_modules do not produce artifacts that collide in the same Java namespace. So, Claro will utilize a concept of "project package" as a global (internet-wide) disambiguator. When building using Claro's Bazel rules, this string will be automatically derived from the Bazel workspace's name. This is in an effort towards utilizing Bazel's native Bazelmod as Claro's "package manager".
When building using Claro's Bazel rules, this string will be automatically formatted to be something like `examples$claro_programs$module_test` for a `claro_module(name = "module_test", ...)` located at the bazel path //examples/claro_programs:module_test. This ensures that this Module name is unique across the entire Bazel project in which this module is being compiled.