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]


Reply via email to