我不明白zeromq的repo策略

I don't understand the repo strategy of zeromq

好像是zeromq(https://github.com/zeromq/libzmq) is written in C++, but also provides separate bindings for C++ (https://github.com/zeromq/cppzmq).

制作 libzmq 时,它仅在其构建目录中提供这些文件:

libunity.a  libzmq.a  libzmq.so  libzmq.so.5  libzmq.so.5.2.2

并且没有头文件。

在单独的存储库中提供绑定和库有什么好处?即使有很多绑定,也不应该总是包含一些标准绑定集吗?

ZMQ 是用 C++ 实现的,但不提供 class。 API 在 C 语言中具有函数 zmq_sendzmq_poll 等。为套接字和上下文采用 void * 参数。

cppzmq 是一个 C++ 绑定到 libzmq,主要定义 class 所以不用写: int zmq_send (void *s_, const void *buf_, size_t len_, int flags_); 你会写:

zmq::socket_t s; s.send(zmq::message_t);

它允许您使用面向对象的设计并使语法更清晰(IMO)。

libzmq 是在 C++ 内部实现的,只公开了一个 C API/ABI 以确保 API/ABI 的广泛可用性和长期稳定性。一个 C API/ABI 可以很容易地提供其他语言的直接绑定,例如 cppzmq,或更高级的库,例如 czmq,它同样有一个 C API/ABI 和大量的语言绑定。

此外,以不影响现有用户的方式发展 API/ABI 相对容易。

请注意,此保证仅适用于 API/ABI 声明为 STABLE 的部分。较新的功能在成熟之前处于草稿状态。

公开 C++ API 会使其他语言的绑定和确保 ABI 稳定性变得更加困难。