7

Asio 是否仍然与 Boost 分开开发,或者 Boost.Asio 是唯一仍在更新的版本?

Asio 网站上,他们谈到这两个版本都有好处,而且 Asio 的更新频率比 Boost 高。然而,该网站上最新的开发版本是 1.5.3,于 2011 年 3 月发布,而 2013 年 2 月的最新 Boost 1.53 版本包括 Asio 1.8.3,自 1.5.3 以来有大量更改。

Asio 网站要么在没有通知的情况下被放弃,转而支持仅 Boost 更新,要么它已移动到我尚未找到的某个位置。有谁确切地知道发生了什么?

我问的原因是我试图从我的项目中删除 Boost,而 Boost.Asio 是我目前使用的唯一 Boost 库。Asio 本身是一个只有头文件的库,但 Boost.Asio 引入了其他几个未使用的 Boost 库(System、Regex、Date_Time)。

我愿意切换到另一个轻量级套接字库,但还没有找到一个和 Asio 一样好的(在低依赖性和使用本机平台 iocp/epoll 方法方面)。

4

2 回答 2

6

Asio 是单独开发的,然后经过增强并合并到 Boost.Asio 中。但是,您可能无法根据正在使用的功能和编译器从项目中删除 Boost。从 Asio 1.10.0 开始,Asio 尝试使用等效的 C++11 标准库而不是 Boost。

Asio 基本上就是 Boost.Asio:

  • 没有 Boost 命名空间和宏命名约定。
  • 不依赖于 Boost.System 和 Boost.Thread,因为 Asio 提供了自己的有限功能来代替这两个库。

1.10.0 之前的 Asio 版本可能存在 Boost 依赖项。这些依赖项通常在模板中引入;因此,依赖关系可能仅在应用程序使用特定功能时发生。很容易忽略Asio 和 Boost.Asio页面上的细微细节,其中指出:

Asio 仅是头文件,并且对于大多数用途不需要链接到任何 Boost 库。在将 C++11 与最新版本的 gcc、clang 或 MSVC 一起使用时,可以通过定义ASIO_STANDALONE编译时间来独立于 Boost 使用 Asio。

通常,以下功能会引入依赖项:

  • 计时器依赖于 Boost.DateTime 或 Boost.Chrono。对于 Asio 1.10.0 及更高版本,将使用 C++11 构建std::chrono
  • read_until()使用正则表达式的操作依赖于 Boost.Regex。
  • 基于Boost.Coroutine库的堆栈式协程。

可能值得考虑使用:

  • BCP提取项目所需的 Boost 库子集。
  • libuv,一个 C 库,提供异步事件循环和对本地 I/O 事件通知的抽象。 这个答案比较了两个库。
于 2013-04-18T15:18:34.330 回答
5

我通过电子邮件询问了非 Boost 版本在哪里维护,作者 Christopher Kohlhoff 说他在 github 上维护它

https://github.com/chriskohlhoff/asio

今天看它似乎没有 1.8.3 在那里,或者至少它没有被标记,所以可能是他停止维护那个 repo。

于 2013-05-09T04:43:01.640 回答