Remove `ABSL_NULLABILITY_COMPATIBLE` from `{,Stable}Dependency`.
They are normally used in templates as `Dependency<Handle, Manager>`, with
`Manager` depending on the template parameter. Their nullability should reflect
the nullability of `Manager`, and even the nullability of `Handle`, which is
normally fixed when `Dependency` is used, should reflect the nullability of
`Manager`. This cannot be expressed.
Furthermore, even if it could be expressed, it would not propagate further.
For example in `StringWriter<std::string* absl_nonnull>`, `DestString()`
should return `std::string* absl_nonnull`, and in
`StringWriter<std::string* absl_nullable>`, `DestString()` should return
`std::string* absl_nullable`. But `DestString()` is a virtual method in
non-templated `StringWriterBase`, so its nullability cannot depend on the
template instantiation of `StringWriter`.
Furthermore, even if it propagated further, it would not express conditional
nullability. Even if `StringWriterBase::DestString()` could return
`std::string* absl_nullable`, the result can be `nullptr` only if the
`StringWriterBase` is closed. Methods which call `*DestString()` do not reach
this call when the `StringWriterBase` is closed, which is why they can
dereference the result.
OTOH in `Dependency<Handle, Manager>`, nullability of `Manager` already
propagates to some other public methods. For example in
`StringWriter<std::string* absl_nonnull>`, `dest()` returns
`std::string* absl_nonnull&`, and in `StringWriter<std::string* absl_nullable>`,
`dest()` returns `std::string* absl_nullable&`. For that it is not needed to
make `Dependency` itself nullable.
PiperOrigin-RevId: 802531307
Riegeli/records is a file format for storing a sequence of string records, typically serialized protocol buffers. It supports dense compression, fast decoding, seeking, detection and optional skipping of data corruption, filtering of proto message fields for even faster decoding, and parallel encoding.
See documentation.
Riegeli file format will only change in a backward compatible way (i.e. future readers will understand current files, but current readers might not understand files using future features).
Riegeli C++ API might change in incompatible ways.