C++ 标准中 `restrict` keyword/attribute 的情况

Situation with `restrict` keyword/attribute in C++ standard

简而言之,restrict 应该告诉编译器指针不能指向相同的内存位置。这对于函数参数和进一步的编译器优化非常有用。在科学计算中,restrict的应用非常广泛。

目前,restrict关键字只是C99的一部分,而不是C++的一部分。我们 know that a lot of C++ compilers support __restrict__ as an extension. This question 还详细讨论了 restrict__restrict__ 的作用。

现在,上述问题的讨论发生在很久以前,并没有谈论C++17、C++20,也没有未来标准的计划。我发现 n3988 proposal 讨论了 C++ 中类似 restrict 的别名、C++ 中语法更丰富的复杂性以及可能的补救措施。

根据 IBM 博客 (2014),n3988 was encouraged for future work

This question talks about the history of restrict and C++ without anything conclusive regarding the actual implementation and mentions the papers I already listed or the one mentioned in the comments (p1296).

除此之外,我找不到关于在即将推出的 C++ 中支持 restrict 的计划的任何内容(据我所知,它不是 C++17 的一部分)。这似乎是一个非常有用的功能,所以我想

C 的 restrict 甚至在 C++20 中也没有。 paper already mentioned 在 2018 年 11 月的初步演示中是 well-received,可能是因为它避免了限定符的关键困难——即使是 C 语言,也没有人了解它如何与类型系统的其余部分交互.部分原因是添加 restrict 不会改变任何一个指针的含义,但会根据执行的算法影响它与一组其他指针(其成员资格不是 well-specified)的关系他们以后。另一部分是因为 C++ 允许对类型进行如此多的操作:std::vector<T *restrict> 是什么意思,索引 a std::vector<T> &restrict 的类型是什么?

这种 contract-based 方法将提供什么样的实际优化机会尚不清楚;一般而言,关于合同和优化仍有许多未解决的问题。