VS 2017 RTM 关于STL 的修复

  [原文发表地址]VS 2017 RTM 关于STL 的修复 [原文发表时间] 2017/2/6 9:20AM VS 2017 RTM 版本很快就要发布了。 目前VS 2017 RC 已经投入使用,并且包含了我们在这里描述的所有改变 – 请尝试在IDE 的help >Send Feedback >Report A Problem (或者 Provide A Suggestion) 提交您的反馈信息。 关于STL 在VS2015 update 3 和 VS 2017 RTM之间的改变, 这是第三篇也是最后一篇博客。 在第一篇博客中(关于2017 Preview 4),我们详细地阐述了2015 和2017 版本是如何实现二进制兼容问题的。 在第二篇博客中(关于VS 2017 Preview 5),我们列举了那些添加到编译器和STL 的模块。(从此之后,我们已经实现了P0504R0中新引入的 in_place_t/in_place_type_t<T>/in_place_index_t<I> 和P0510R0 中抛弃的数组, 引用以及不完整类型变量。) Vector 修改:…

0

通过libuv使用可重入函数

[原文发表地址]通过libuv使用可重入函数 [原文发表时间] 2017/2/7 9:20AM 在这篇文章之前我们曾经就已经讨论过可重入函数了,甚至最近关于Visual Studio 2017 版本在我们的实现中已经就“yield”关键字在VS2017中被“co_yield”替换进行了更深入的讨论。这种有意义的C++ 标准模块让我非常兴奋, 因此在这篇博客中我很高兴和您分享一些在具体实践中是如何通过libuv 库来使用它。你可以用微软编译器或者其他支持可重入函数的编译器来使用这些代码,在进入这些代码之前,让我们首先认识下问题空间以及为什么你应该考虑它。 问题空间 等待磁盘的响应或者从网络上下载数据这本身就比较漫长,而且我们通常被告知写入块崩溃了, 对吗? 对于客户端编程而言,进行I/O 操作或者阻塞UI线程都将会引起诸如像app瘫痪或者挂起的这样糟糕的用户体验。对于服务器端编程而言,新的请求在其他线程都被阻塞的情况下,通常仅仅只需要创建一个新的线程, 然而这样会引起一个线程的资源利用率较低的问题,这些资源却往往并不便宜。   然而, 写一个高效的真正意义上的异步代码的确仍然存在一个普遍的困难。不同的平台提供了不同的机制以及实现异步的API。 许多的API也将不再支持异步的功能。通常,解决方案是通知辅助线程,这将会调用阻塞API, 并且返回结果到主线程。 这同样也是有一定难度的而且需要使用异步机制去避免并发问题。有一些库提供了基于这些不同机制的抽象, 然而,许多例子都包含了Boost ASIO,以及C++ Rest SDK 以及libuv。 Boost ASIO 和 Rest SDK 是C++ 库, 而libuv 是一个C 库。 在他们之间有一些重叠的地方, 但是他们都有他们各自的优势。   Libuv 是一个C库,它在Node.js 中提供了支持异步的I/O, 尽管Node.js 显式地为用户设计的这一功能, 但是它也可以独立使用并且提供了一个公共的跨平台API, 不需要顾及到多种特定平台异步的API。 另外,API 即使在Windows 上仍然是UTF8-only 格式, 这也是非常方便的。每一个会阻塞的API 可以接受一个指向回调函数的指针,当所有的请求操作完成后,这些回调函数将被调用。 一个事件循环启动等待多种请求完成以及调用特定的回调函数。对于我而言,…

0

yield”关键字在VS2017中被“co_yield”替换

原文发表地址] `yield` keyword to become `co_yield` in VS 2017 [原文作者] EricMittelette [原文发表时间] 2017/1/27 协程(Coroutines)—也就是之前我们说的”C++ resumable方法重入函数”—它作为技术规范TS的一部分已经在Visual C++编译器上实现.自2013年11月VC++ CTP release版本发布支持协程功能,已经有三年的时间. 如果你正在使用协程,你应该发现关键字’yield’在VS2017中被移除.如果你的代码里面含有’yield’关键字, 你需要将它们替换为’co_yield’.如果生成器使用了’yield 表达式’,这些也需要替换为’co_yield 表达式’. 如果想将’await’替换为’co_await’, 协程中的‘return’替换为’co_return’.新的Visual C++编译器也会接受这样的改变. 请参考协程技术规范: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4628.pdf 如果有什么问题,你也可以给我们发邮件或者在评论下面留言. 为什么这样改变 作为技术规格,协程还没有被C++标准采纳.Visual C++团队最初实现协程功能时,它还只是个有前景的C++特性.2015年10月,C++标准委员会投票引入前缀”co_”去替换关键字.委员会不想改变可能会引起冲突的正在使用的关键字.”yield”关键字已经被广泛使用在农业和财务相关的应用软件中.同时,thread support library线程支持库中的Ranges TS 关键字替换如下图   Instead of `await` Use `co_await` Instead of `return` Use `co_return` Instead of `yield` Use `co_yield` 我们在VS2017中移除了”yield”关键字是因为Range-V3特性的实现, 我们希望许多开发人员声明了ranges(using namespace ::ranges)后去调用”yield”….

0