版本 1.54.0
版本 1.54.0
2013年7月1日 17:10 GMT
平台 | 文件 |
---|---|
unix | boost_1_54_0.tar.bz2 |
boost_1_54_0.tar.gz | |
windows | boost_1_54_0.7z |
boost_1_54_0.zip |
新闻
支持的 CPU
Boost 不再支持 80386 目标 CPU,最低 x86 32 位目标是 i486。即使在此版本之前,80386 目标也没有被 Boost.SmartPtr 和 Boost.Atomic(以及内部使用它们的库)正确支持。某些 Boost 库可能对最低目标 CPU 有更高的要求(例如 Boost.Log),请参阅相应库的文档以获取详细信息。
此外,默认情况下,当为 x86 32 位目标构建 Boost 时,它将为 i686 (Pentium Pro) 和更新的 CPU 编译。可以通过在instruction-set属性中指定来进行更改b2或bjam命令行,例如
b2 variant=release architecture=x86 instruction-set=i486 stage
的可能值instruction-set是
-
主机 CPU 的目标native
-
通用 x86 CPUi486, i586, i686
-
Intel CPUpentium, pentium-mmx, pentiumpro, pentium2, pentium3, pentium3m, pentium-m, pentium4, pentium4m, prescott, nocona, core2, corei7, corei7-avx, core-avx-i, conroe, conroe-xe, conroe-l, allendale, merom, merom-xe, kentsfield, kentsfield-xe, penryn, wolfdale, yorksfield, nehalem, sandy-bridge, ivy-bridge, haswell, atom
-
AMD CPUk6, k6-2, k6-3, athlon, athlon-tbird, athlon-4, athlon-xp, athlon-mp, k8, opteron, athlon64, athlon-fx, k8-sse3, opteron-sse3, athlon64-sse3, amdfam10, barcelona, bdver1, bdver2, bdver3, btver1, btver2
-
VIA CPUc3, c3-2
-
IDT CPUwinchip-c6, winchip2
请注意,并非所有这些值都可能被特定的编译器支持。
信号已弃用
Boost.Signals 不再被积极维护,因此已被弃用。请不要在新开发中使用 Boost.Signals(请改用 Boost.Signals2)。如果您有现有的基于 Boost.Signals 的代码,它将继续工作,但请考虑迁移到 Boost.Signals2。Signals2 文档中有一个移植指南。
新库
-
Log: 日志库,来自 Andrey Semashev。
-
TTI: 类型特征内省库,来自 Edward Diener。
-
Type Erasure: 基于概念的运行时多态性。
更新的库
-
算法:
-
copy_while 和 copy_until 的返回类型已更改。这是一个接口更改。如果您使用了这些函数的返回值,则必须修改您的代码。这些函数现在返回一个
std::pair<InputIterator, OutputIterator>
,而不是只返回修改后的OutputIterator
。如果此更改影响您的代码,最简单的更改是在调用的末尾添加一个.second
,这将使您获得与之前相同的行为。 -
添加了 C++14 版本的 'is_permutation','equal' 和 'mismatch'。
-
-
Asio:
-
添加了新的特征类,
handler_type
和async_result
,允许自定义启动函数的返回类型。 -
添加了
asio::spawn()
函数,这是一个用于运行基于 Boost.Coroutine 库的有栈协程的高级包装器。spawn()
函数使程序能够以同步方式实现异步逻辑。例如:size_t n = my_socket.async_read_some(my_buffer, yield);
。 -
添加了
asio::use_future
特殊值,它为从异步操作的启动函数返回 C++11std::future
提供了第一流的支持。例如:future<size_t> n = my_socket.async_read_some(my_buffer, asio::use_future);
。 -
将无栈协程类和宏提升为 Asio 文档化接口的一部分,而不是 HTTP 服务器 4 示例的一部分。
-
添加了一个名为
asio_handler_is_continuation
的新处理程序钩子。异步操作可能表示与当前正在执行的处理程序关联的异步控制流的延续。如果属于这种情况,则可以自定义asio_handler_is_continuation
钩子以返回true
,并且 Asio 的实现可以使用此知识来优化新处理程序的调度。为了涵盖常见情况,Asio 为 strand,spawn()
和组合异步操作自定义了该钩子。 -
添加了四个新的通用协议类,
generic::datagram_protocol
,generic::raw_protocol
,generic::seq_packet_protocol
和generic::stream_protocol
,它们实现了Protocol
类型要求,但允许用户在运行时指定地址族(例如AF_INET
)和协议类型(例如IPPROTO_TCP
)。 -
添加了 C++11 移动构造函数,允许将套接字(或接受器)转换为更通用的类型。例如,可以通过移动构造将
ip::tcp::socket
转换为generic::stream_protocol::socket
。 -
扩展了
basic_socket_acceptor<>
类的accept()
和async_accept()
函数,以允许将新连接直接接受到更通用类型的套接字中。例如,可以使用ip::tcp::acceptor
来接受到generic::stream_protocol::socket
对象中。 -
将现有示例移动到 C++03 特定目录,并为 C++11 特定示例添加新目录。C++03 示例的有限子集已转换为其 C++11 等效项。
-
各种 SSL 增强功能。感谢 Nick Jones 的工作,这些更改基于他的工作。
-
添加了对使用已从网络读取的数据进行 SSL 握手的支持。添加了
ssl::stream<>
类的handshake()
和async_handshake()
函数的新重载。这些函数接受一个ConstBufferSequence
,用于作为握手过程的 ssl 引擎的初始输入。 -
添加了对创建 TLSv1.1 和 TLSv1.2
ssl::context
对象 的支持。 -
向
ssl::context
和ssl::stream<>
类添加了一个set_verify_depth()
函数。 -
添加了从内存缓冲区加载 SSL 证书和密钥数据的功能。向
ssl::context
类添加了新函数,add_certificate_authority()
,use_certificate()
,use_certificate_chain()
,use_private_key()
,use_rsa_private_key()
和use_tmp_dh()
。 -
将
ssl::context
更改为默认自动禁用 SSL 压缩。要启用,请使用新的ssl::context::clear_options()
函数,如my_context.clear_options(ssl::context::no_compression)
中所示。
-
-
修复了
signal_set
实现中的潜在死锁。 -
修复了文档中接受器示例中的错误 #8421。
-
修复了可等待计时器文档中的复制粘贴错误 #8602。
-
添加了断言以满足某些代码分析工具 #7739。
-
修复了格式错误的
#warning
指令 #7939。 -
修复了 Linux
epoll
实现中的潜在数据竞争。 -
修复了
basic_waitable_timer
的底层实现,使其可以处理任何time_point
值,而不会使中间持续时间对象溢出。 -
修复了异步连接操作的实现,使其能够处理来自反应器的虚假就绪通知 #7961。
-
-
上下文:
-
添加了对 SPARC 架构的支持。
-
-
几何:
-
附加功能
-
添加了由 Adam Wulkiewicz 为 Boost.Geometry 开发的空间索引。该空间索引最初由 Federico J. Fernandez 在 2008 年的 Google Summer of Code 项目期间启动,由 Hartmut Kaiser 指导。
-
添加了 SVG 输出,这已经在扩展中存在了好几年
-
-
文档
-
修复了丢失的单词的小问题
-
-
Bug 修复
-
共线的相反线段有时(在圆中)会出现鲁棒性问题,已修复
-
修复了插入错误交点的问题(由缓冲区发现)
-
应用了 Vladimir Petrovic 用于调试遍历的补丁
-
-
内部更改
-
使多个算法具有变体感知能力(追加、面积、清除、转换、相等、长度、点数)
-
-
-
图:
-
添加了来自 Jakob Lykke Andersen 和 Flavio De Lorenzi 的 VF2 子图同构的更新。
-
添加了来自 Fernando Vilas 的最大邻接搜索。
-
为资源受限的最短路径 (r_c_shortest_paths) 算法添加了来自 Brammert Ottens 的超时支持。
-
对文档和示例进行了各种修复,并删除了过时的编译器解决方法。
-
进程间:
-
为映射区域添加了对特定于平台的标志的支持(工单 #8030)
-
ABI 破坏性更改:更改了 Windows 中的启动时间戳函数,以使用 EventLog 服务启动时间作为系统启动时间。以前使用的来自 WMI 的
LastBootupTime
在时间同步和休眠方面不稳定,并且在实践中不可用。如果您真的需要获得 Boost 1.54 之前的行为,请从命令行或detail/workaround.hpp
中定义BOOST_INTERPROCESS_BOOTSTAMP_IS_LASTBOOTUPTIME
。
-
-
数学:
-
进行了重大重组,以合并其他 Boost.Math,如整数实用程序(最大公约数和最小公倍数)、四元数和八元数。创建新的章节标题。
-
添加了许多对 Boost.Multiprecision 和
cpp_dec_float_50
作为用户定义类型 (UDT) 示例的引用。 -
将 Clang 添加到支持的编译器列表中。
-
修复了常量,使其在以任意精度使用时使用计算值的线程安全缓存。
-
添加了查找贝塞尔函数零点的功能:
cyl_bessel_j_zero
,cyl_neumann_zero
,airy_ai_zeros
和airy_bi_zeros
(由 Christopher Kormanyos 提供)。 -
Rocco Romeo 对贝塞尔 J 和 Y 函数进行了更多精度改进。
-
修复了导致某些头文件无法编译的令人讨厌的循环依赖性错误 #7999。
-
修复了 __tgamma 中的错误,该错误会导致 142.5 到 143 之间的参数出现虚假溢出。
-
修复了 raise_rounding_error 中的错误,该错误导致在关闭抛出异常时返回不正确的结果 #7905。
-
添加了最小的 __float128 支持。
-
修复了泊松分位数边缘情况下的错误 #8308。
-
调整了 Halley 迭代中使用的启发式方法,以处理在导数平坦化的棘手区域中反转不完全 beta 的情况。例如,计算小于机器 epsilon 的概率的 Fisher F 分位数。请参阅工单 #8314。
-
-
多精度:
-
破坏性更改 将
rational_adapter
重命名为rational_adaptor
。 -
添加了对 MPFI 的支持。
-
添加了 logged_adaptor。
-
通过 GCC 的
__float128
或 Intel 的_Quad
数据类型添加了对 128 位浮点数的支持。 -
在 cpp_int 中添加了对用户定义文字的支持,改进了
constexpr
支持。 -
修复了
cpp_int
中单个 limb 的减法中的错误,该错误导致当结果在最后一个 limb 中应为 0 时,值不正确:8133。 -
修复了
cpp_int
中的错误,其中 0 除以某物不会在结果中得到零:8160。 -
修复了一些超越函数中的错误,这些错误导致在重用变量时返回不正确的值,例如
a = pow(a, b)
。请参阅 8326。
-
-
PropertyMap:
-
添加了来自 Guillaume Pinot 的
compose_property_map
。
-
-
线程:
-
修复的 Bug
-
#4878 MinGW 4.5.0 未定义引用 bool interruptible_wait(detail::win32::handle handle_to_wait_for,detail::t imeout target_time)。
-
#4882 Win32 shared_mutex 未能正确处理超时。
-
#5752 boost::call_once() 在某些平台上不可靠
-
#6652 Boost.Thread shared_mutex.hpp:50:99: 警告:解引用类型双关指针将破坏严格别名规则 [-Wstrict-aliasing]
-
#6843 [Intel C++] 包含 '#include <atomic>' 时出现编译错误
-
#6966 future boost::future_category dll 链接不一致
-
#7720 密集锁定/解锁互斥锁时出现异常 lock_error
-
#7755 线程:在 Windows 上使用 shared_mutex 时死锁
-
#7980 构建错误:msvc-11.0 和 BOOST_THREAD_DONT_USE_DATETIME
-
#7982 AIX 上 pthread_delay_np() 参数编译错误
-
#8027 thread 库无法使用 Visual Studio 2003 编译
-
#8070 优先使用 GetTickCount64 而不是 GetTickCount
-
#8136 boost::this_thread::sleep_for() 在 Windows 上休眠的时间比预期长
-
#8212 Boost 线程在 Solaris 10 上编译错误
-
#8237 修复 'thread_group' 的文档
-
#8239 barrier::wait() 未标记为 interruption_point
-
#8323 由于 Boost.Thread 和 Boost.Chrono 中的问题组合,boost::thread::try_join_for/try_join_until 可能会无限期阻塞
-
#8337 "std::string(this->code()->message())" 的内部表示转义,但在超出范围时被销毁。
-
#8371 当 constexpr 不可用时启用 C++11 once_flag
-
#8443 头文件包含顺序可能导致崩溃
-
#8451 缺少文档化的函数 'boost::scoped_thread::joinable'
-
#8530 [Coverity] 未使用的变量 thread_handle,thread/pthread/thread_data.hpp 中未初始化的变量 cond_mutex
-
#8596 启用 C++0x 后,boost::packaged_task 存储函数对象的引用,而不是副本。
-
-
无序容器:
-
一些非常基本的
noexcept
支持。
-
测试的编译器
Boost 的主要测试编译器是
-
Linux
-
GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.3
-
GCC,C++98 模式: 4.7.3
-
GCC,C++11 模式: 4.7.2, 4.7.3, 4.8.0
-
Clang: 3.0, 3.1, 3.2
-
Clang,C++11 模式: 3.2
-
-
OS X
-
GCC: 4.2
-
Apple Clang: 4.2.1
-
Apple Clang,C++11 模式: 4.2.1
-
-
Windows
-
GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
-
Visual C++: 8.0, 9.0, 10.0, 11.0
-
-
FreeBSD
-
GCC: 4.2.1
-
Boost 的其他测试编译器包括
-
Linux
-
Clang: 3.0, 3.1, 3.2, 来自 Subversion
-
Clang,使用 libc++: 3.2
-
GCC: 4.4.7, 4.5.3, 4.6.2, 4.6.3, 4.7.2, 4.7.3
-
GCC,C++98 模式: 4.7.3
-
GCC,C++11 模式: 4.7.3, 4.8.0
-
-
OS X
-
Apple Clang: 4.2.1
-
Apple Clang,C++11 模式: 4.2.1
-
Clang: 来自 Subversion
-
Clang,C++11 模式: 来自 Subversion
-
GCC: 4.2
-
-
Windows
-
GCC, mingw: 4.4.0, 4.4.7, 4.5.4, 4.6.3, 4.7.2, 4.8.0
-
Visual C++: 9.0, 10.0, 11.0
-
Visual C++,Windows Mobile 5,使用 STLport: 9.0
-
-
AIX
-
IBM XL C/C++ Enterprise Edition: 12.1.0.1
-
-
FreeBSD
-
GCC: 4.2.1
-
致谢
Beman Dawes, Eric Niebler, Rene Rivera, Daniel James, Vladimir Prus 和 Marshall Clow 管理了此版本。