After a deeper discussion with friends in the Slack #cpp channel, we reached 
the following consensus:
 • iceberg-rust won't maintain any c/cpp related code.
 • iceberg-cpp will have an internal crate based on iceberg-rust and invokes 
cxx/cbingen to build bindings
 • And finally, we will have a `libiceberg-api` and `libiceberg-cpp` 
,`libicberg-rust`  in the iceberg-cpp repo.
In which, iceberg-cpp will provide:

- `libiceberg-api` : An headers that defines APIs available to users.
- `libiceberg-cpp` : An impl of libiceberg-api based on pure cpp (based on 
nanoarrow, json, libz and so on)
- `libicberg-rust` : An impl of libiceberg-api based on iceberg-rust.

What do you think?

On Tue, Mar 18, 2025, at 16:56, Fokko Driesprong wrote:
> Hi Xuanwo,
> 
> Thanks for bringing this up. I'm not a cpp expert, but following this with 
> great interest. I think this is a very promising approach since the memory 
> model is already the same across projects (Arrow).
> 
> Kind regards,
> Fokko
> 
> Op vr 14 mrt 2025 om 08:53 schreef Xuanwo <xua...@apache.org>:
>> __
>> Hi, everyone
>> 
>> Today, Renjie Liu and I had a discussion with some of the iceberg-cpp 
>> contributors—Gang Wu, Junwang Zhao, and David Li—about ways to advance the 
>> project. We came up with some great ideas, so I'm sharing them here to 
>> gather more feedback.
>> 
>> ## Background
>> 
>> The community continues to show interest in a C++ implementation of Iceberg. 
>> Some users are interested in C++ bindings with a well-designed API for data 
>> types and manifests, but they have their own runtime and I/O, so they prefer 
>> a binding that exclude these components. However, there are also users who 
>> require an all-in-one solution.
>> 
>> The iceberg-cpp project aims to provide a well-designed interface for users 
>> to plug in file I/O, readers, writers, and other components while offering a 
>> default implementation in other modules.
>> 
>> Luckily, we now have iceberg-rust, which is not fully feature-complete but 
>> undergoing rapid development. We can develop a C++ binding based on 
>> iceberg-rust and establish a robust C++ API within the iceberg-cpp project. 
>> The C++ project will define public interfaces and offer various build 
>> targets for users to choose from. The overall process will be similar to how 
>> pyiceberg interacts with iceberg-rust.
>> 
>> ## Plan
>> 
>> 
>> 1. Use cxx[^1] to build cpp bindings for iceberg-rust which exposes core 
>> APIs.
>> 
>> 
>> The binding will support different build profiles that users can choose to 
>> use fileio from iceberg-rust or not.
>> 
>> 2. iceberg-cpp will define public interfaces and types for cpp users.
>> 
>> After this separation, iceberg-rust can focus on implementing features and 
>> exposing them through simpler, more direct bindings. Meanwhile, iceberg-cpp 
>> will be responsible for designing, testing, and maintaining the user-level 
>> APIs, allowing users to select the parts they need or plug in their own file 
>> I/O components.
>> 
>> ## Conclusion
>> 
>> We believe this design combines the best parts of two projects and helps us 
>> iterate iceberg-cpp more quickly.
>> 
>> Welcome to leave your comments here!
>> 
>> [^1]: https://cxx.rs/
>> 
>> Xuanwo
>> 
>> https://xuanwo.io/
Xuanwo

https://xuanwo.io/

Reply via email to