是否会有具有现代C++ "cutoff"的版本?
WIll Boost have a version with a modern-C++ "cutoff"?
现在发布了C 17,现在,Boost的库中更多的库已被标准库介绍:可选,变体,任何ASIO(在网络TS中(,Coroutines(在A中(TS(等。除了标准中的增强功能的GOB和GOB外,请参见此答案。我意识到,某些标准化版本的设计空间选择略有不同,但本质上是相同的。
鉴于这个事实,是否存在或有计划发布替代版本(或仅是 - 新的主线版本(的Boost:
- 放弃大多数或全部这些功能作为boost库
- 让升压代码的其余部分依赖于标准库中的可用性
- 让提升代码依赖于至少C 17的语言,以使生活更轻松,并且代码更易于开发人员
?
如果不是 - 这是因为增强设计选择的重要性吗?太麻烦了?害怕"分叉"项目"?
注意:这是一个信息丰富的问题,因此请不要提供您的意见,或者这是否是一个好主意。
BOOST的实现比标准C 库的许多现有实现更好。
请注意:
- 一些的问题可能是在编译器的最新版本中解决的,我在撰写此帖子之前没有重新检查所有内容。
- Boost非常保守,并支持许多旧编译器。即使最新的编译器具有固定的所有内容,旧版本仍然必须工作。
- 关于Unicode,我假设C 程序将尝试遵循到处的UTF-8。
boost.filesystem vs <filesystem>
Windows在C/C 运行时间中都不支持Unicode,例如您不能将标准库转换为Unicode-Aware狭窄字符集(UTF-8(。结果,当与char
序列一起使用时,std::filesystem::path
始终假定非固定编码。为此有std::filesystem::u8path
,但是编写std::filesystem::path p = some_char_sequence
IMO是太容易的。使用std::filesystem
并支持Windows的任何代码库都必须不断战斗。
boost.filesystem允许用户指定用于path
对象的语言环境。BOOST.LOCALE可用于在Windows上创建UTF-8环境,从而消除了此问题。std.filesystem不允许您这样做。
boost.System vs <system_error>
在Linux上使用Glibc:
-
std::error_category::message
不是线程安全,尽管应该是安全的。BOOST.SYSTEM至少试图为每个平台提供线程安全实现。 - 系统类别无法在标准误差条件下测试等效性。
在Windows(MSVC(上,它在多个位置被打破:
-
std::system_category
返回的错误消息最后在其他任何地方都不会发生烦人的" r n"。boost.System明确修剪那些。 - 如果使用交叉dll,则比较
std::error_category
的地址对通用和系统类别不起作用。Boost.System从未遇到这个问题。 - 错误消息是使用当前用户包含的(Never UTF-8(返回的。从技术上讲,这是允许的,因为标准未指定此处使用的编码,但对任何人都没有帮助。尽管Boost。系统也是如此(不应该在这里提及?(。
- 标准误差类别是静态单位单元,因此通过
std::atexit
登记驱动器。当另一个atexit
处理程序首次访问类别时。这可能是一个问题,可能会导致僵局(作为任何隐式锁定(。我过去有这个经验。 - 系统类别无法像boost相同的方式与POSIX错误代码匹配Winapi错误代码。系统执行此操作(首先是该设施的全部要点(。
- 在MSVC12(Visual Studio 2013(上比较错误类别的DLL不起作用。这是Boost支持的编译器之一。BOOST。系统没有这样的问题。
关于<system_error>
的可悲部分是<filesystem>
和Future Networking库(ASIO(都严重依赖它,因此两者都在Windows上有些破坏。
boost.thread vs <mutex>
, <condition_variable>
, <shared_mutex>
。
直到最近在Windows和MSVC std::condition_variable
和std::mutex
上,由于内部使用懒惰初始化,在DLL中实例化时可能会导致死锁。使用MSVC14(Visual Studio 2015(,应至少对std::mutex
进行修复,因为它已重写以内部使用SRW锁,但我不确定条件变量。MSVC12(Visual Studio 2013(肯定有很多错误。
如果您需要读者作家锁,那么知道它是否喜欢读者或作家可能非常重要。标准std::shared_mutex
不允许您指定此行为,并且根据原始建议,这是因为有一种算法允许实现既不支持并试图防止两者的饥饿(有点"公平"锁定(。原始实施,例如boost::shared_mutex
遵循此算法,并不基于pthread_rwlock_t
(通常由于POSIXAS std::shared_mutex
的要求而有利于读者。IMO这意味着std::shared_mutex
在许多系统上实现了较差的实现。尽管增强实现不是最快的。
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在运行时读取 libstdc++ 版本
- 如何声明一个可以在整个程序中使用的全局 2d 3d 4d .. 数组(堆版本)变量?
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- Vulkan SDK 版本 1.1.85.0 在 Kubuntu 18.10 上链接
- 如何正确实现与基类不同的版本?
- 从预处理器获取 Windows 版本(C++ Win32)
- 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- 如何在C++中将 Python 字符串转换为其转义版本?
- 是否会有具有现代C++ "cutoff"的版本?