没有Boost的Asio

7
Asio仍然与Boost分开发,还是只有Boost.Asio正在更新?
Asio网站上,他们谈到了两个版本的好处,并且Asio比Boost更新得更频繁。然而,该网站上最新的dev版本是1.5.3,发布于2011年3月,而从2013年2月开始的最新的Boost 1.53版本包含Asio 1.8.3,与1.5.3相比有大量的变化。
无论是Asio网站被放弃而没有通知,转而采用Boost-only更新,还是已经迁移到我没有找到的某个位置。是否有人确切地知道发生了什么?
我之所以问这个问题,是因为我正在尝试从我的项目中削减Boost,而Boost.Asio是我目前唯一使用的Boost库。Asio本身是一个仅有头文件的库,但Boost.Asio引入了其他几个未使用的Boost库(System、Regex、Date_Time)。
我愿意切换到另一个轻量级的套接字库,但还没有发现像Asio一样好的(就低依赖性和使用本机平台IOCP / epoll方法而言)。

虽然我自己没有使用过,但也有 poco。 - Nim
2个回答

6
Asio最初是单独开发的,然后被整合到Boost.Asio中。但是,根据所使用的功能和编译器,您可能无法从项目中移除Boost。从Asio 1.10.0开始,Asio尝试使用等效的C++11标准库来代替Boost。
Asio基本上是Boost.Asio:
- 没有Boost命名空间和宏命名约定。 - 不依赖于Boost.System和Boost.Thread,因为Asio在这两个库的位置提供了自己的有限功能。
在Asio 1.10.0之前的版本中,可能存在Boost依赖项。这些依赖项通常在模板中引入;因此,只有当应用程序使用特定功能时才会出现依赖关系。在Asio and Boost.Asio页面上,有一个细节很容易被忽视,即:
Asio是仅有头文件的,对于大多数用途,不需要链接任何Boost库。当使用C++11与最新版本的gcc、clang或MSVC时,可以通过在编译时定义ASIO_STANDALONE来独立使用Asio,而无需依赖Boost。
一般来说,以下特性会引入依赖关系:
- 定时器依赖于Boost.DateTime或Boost.Chrono。对于Asio 1.10.0及以上版本,C++11构建将使用std::chrono。 - 使用正则表达式的read_until()操作依赖于Boost.Regex。 - 基于Boost.Coroutine库的有栈协程

值得考虑使用以下内容:

  • BCP 提取您的项目所需的 Boost 库子集。
  • libuv,一个提供异步事件循环和抽象的 C 库,可从本地 I/O 事件通知中解耦。 此答案 比较了这两个库。

5

我通过电子邮件问过Chris Kohlhoff,这位作者,非增强版的维护在哪里,他说他在github上维护。

https://github.com/chriskohlhoff/asio

今天查看,似乎那里没有1.8.3版本,或者至少它没有被标记出来,可能是他停止维护了那个存储库。


看起来现在有1.8.3版本了。我猜这意味着他仍然维护那个版本。太棒了! - Nairou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接