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 的一部分)。这似乎是一个非常有用的功能,所以我想
- 如果我在 proposals/discussion 方面遗漏了什么?
- 是否有关于
restrict
在 C++ 中的用法的其他信息?
- 是否有其他方法可以通过仅使用 "standard" 功能来实现编译器优化(
__restrict__
允许)?
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 方法将提供什么样的实际优化机会尚不清楚;一般而言,关于合同和优化仍有许多未解决的问题。
简而言之,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 的一部分)。这似乎是一个非常有用的功能,所以我想
- 如果我在 proposals/discussion 方面遗漏了什么?
- 是否有关于
restrict
在 C++ 中的用法的其他信息? - 是否有其他方法可以通过仅使用 "standard" 功能来实现编译器优化(
__restrict__
允许)?
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 方法将提供什么样的实际优化机会尚不清楚;一般而言,关于合同和优化仍有许多未解决的问题。