jorgecarleitao edited a comment on pull request #261: URL: https://github.com/apache/arrow-rs/pull/261#issuecomment-834058292
Let me try to give an example: Say we expose all interfaces (`A`, `B`, `C`) from `parquet-format`, and that the `parquet` crate only has public interfaces that consume `A` and `B` (e.g. the `FileMetadata` bit and something else). Some time later, `parquet-format` bumps major and breaks backward compatibility over `C`. Because we expose `C`, someone may be using `parquet::format::C` and thus if we bump `parquet-format` in our library, anyone using `C` will suffer, even if we do not care about `C`, i.e. we have to bump major. If we had only exposed what our users do require to interact with our crate `parquet` e.g., `A` and `B`, we could have bumped the patch version to catch up with `parquet-format`, because there was no API changes from our users' perspective. This is what I was trying to say with the "public surface": my opinion is that if we need ABI compatibility over some dependency, because we consume that ABI, then we should definitely export that, like this PR is proposing, so that the consumers do not have depend on the same version of `parquet-format`. However, if we do not depend on a given `ABI` (the `C` above), then imo we should not expose it in our crate. Does this make sense? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected]
