C++ 14

似乎 c++11 的标准刚刚尘埃落定,c++14 的标准也开始被人提起。从 c++03 到 c++11 经过了漫长的 8 年,这次倒是更新的格外的快。按照 wiki 上的说法就是这是对 C++11 的小型修正和扩展,就跟 C++03 与 C++98 之间的关系类似。本文参考这个 blog 系列(123)。

polymorphic allocator

最早这个概念大约是从 boost.allocator 还是什么和 allocator 相关的 blog 里面看到的,据说就是现在的 allocator 有一个类型参数,但其实我们并不需要为不同的类型准备不同的 allocator,我们应该使用相同的代码来分配内存,类型在这里只是为了类型安全。

数组与 class 一致的初始化方法

就是前者常用 {} 初始化也应该能引入 struct/class 定义的对象,同时允许嵌套这种定义。

std::optional

来自 boost.optional 的一种方式,表示函数返回值可能存在一种“不返回”的状态,这往往意味着输入有问题,原先的做法有通过 assert 或者抛出异常。通过 option 可以隐式转换成 boolean 来判断是否结果被初始化,这避免了类似前面需要返回 std::pair<T, bool> 来解决无返回值但仍然得初始化前者的困境。

OpenMP 在语言 level 的支持

比如 parallelfor,其实我倒是觉得这个没啥用,原先的 #pragma 挺好用的呀。

literal 在 STL 里面支持

这个算是原先 literal 的完整化支持。

dynamic array

所谓 dynamic array,就是希望在可能的时候在 stack 上分配动态大小的数组,希望通过 std::dynarray 来实现,std::array 的大小通过模板参数指定的,因此是 compile-time 的。

concurrent queue

即提供 pop/push 是 atomic 操作的 queue。

pipeline

可以通过 | 类似的操作符将一些 functor 连接起来(类似某种 DSL),其实也不难写了,就是默认没有这个实现。boost.iostreams 里面的 filter 是可以类似的叠起来的。

stream mutex

使得我们通过 stream 输出的操作变成 atomic 的。

sized delete

对 operator delete 的完善。

澄清 memory allocation

不是太清楚问题所在。

传值还是常值引用

这个是为了避免同一对象既作为输入又作为输出时产生的问题(可能两次引用的值却不一样)。

大整数支持

类似 mpc/gmp 等库?

优先队列的完整支持

将某些 heap 直接弄成不同的 priority queue,而不是现在仅有 n-ary heap 的实现。

integral_constant

对 MPL 的 integral_constant 的改进。

transformation traits

简化一些 type 运算,如去掉 const 等修饰符。

random

一些改进,如对 algorithm 的支持。

特殊数学函数的条件支持

既不是必需实现的。

object alias

帮助在不同的环境下获得同一个对象不同的用法,比如不同精度的 \pi

swap operator

使用 :=:。

algorithm 的并并行化

这大概是并行方面普及之后自然的扩展。

URI 的支持

hmm…

thread local storage

这个也算是顺理成章了吧?

fork-join

哈哈,不要告诉我还有 gpars 里面其他几个呢!

异步操作的标准化

挺好的,这部分随着接口的成熟应该走上这一步了。

generic lambda

类似匿名函数也支持模板?

对 lambda 的简化等

比如允许直接写个 expression。

vector loop

使用 SIMD。

executor 和 scheduler

这个类似 java 里面的两个接口的概念了,能够简化多线程程序的实现。

mapreduce 支持

据说曾经提议过。

resumable functions

增加 resumable 关键字,主要为异步操作所用。

ip 支持

hmm…

shared locking

对 mutex 的一个补充。

quoted string

主要是 string 输出到 stream 读回来时因为空格之类的东西使得两个操作并不对称,通过增加 manipulator 来解决这个问题。

对 SIMD 的支持

跟前面某个类似。

unicode 的支持

似乎大家都用那个事实标准了…

unordered container 的异质类型支持

这个还包括对 hash 的一些修补。

stateful function 转换成 function pointer

为了让这些函数能再 C 里面用?

额外的 allocator

hmm…

rule of 5

这大概就是说什么时候自动生成 copy constructor 之类的。

signature trait

简化函数相关的 meta programming

concept lite

曾经被拒了,这次卷土重来…

delimited iterator

为了修正那个该死的 ostream_iterator。

返回类型推断

嗯… 不知道能做到 scala 那种不?

constexpr 的运行时优化

hmm

通过类型访问 tuple

听起来像是 boost.fusion 里面的功能…

map 和 set 的 splice 方法

hmm…

for-then-else

这个暂时不晓得有啥必要…

make_unique

据说有个 make_shared… 土了

transaction 支持

这个居然有三个…

std::joinstd::split

hmm

ADL 的简化

其实一直不晓得这个多复杂,只是觉得很神奇

template 特化的代码重用

嗯,支持,少写 code!

对 constexpr 函数的限制减少

hmm

似乎没看到 yield 的支持 ~><~

——————
And Isaac said unto his son, How is it that thou hast found it so quickly, my son? And he said, Because the LORD thy God brought it to me.

Advertisements
C++ 14

一个有关“C++ 14”的想法

  1. zt 说:

    哈哈,重新看了一下上面的一些东西,觉得类似 optional 的思路是不是跟 functional programming 有点关系,不知道啥时候搞点 Try 什么的玩玩…

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s