ideas icon indicating copy to clipboard operation
ideas copied to clipboard

Аттрибут [[pure]] для функций.

Open IMMZ opened this issue 2 years ago • 2 comments

Наряду с аттрибутами [[likely]] и [[unlikely]] было бы неплохо добавить аттрибут [[pure]], чтобы указать, что функция чистая, т.е. не имеет побочных эффектов. Это могло бы помочь компиляторам с оптимизацией.

Пример: [[pure]] int sum(int a, int b) { return a + b; }

IMMZ avatar Feb 18 '23 08:02 IMMZ

Намного важнее было бы иметь такой qualifier. Уже есть 3 предложения про чистые функции, но не в одном из них нет предложения о квалификаторах. Простой пример: половина алгоритмов имеет неопределенное поведение при мутабельных (не чистых) функторах. И эту распространенную ошибку можно было бы предупредить на этапе компиляции. Огромный класс распространенных ошибок в многопоточном программировании тоже можно было бы избежать имея такой квалификатор.

sergii-rybin-tfs avatar Feb 18 '23 11:02 sergii-rybin-tfs

Может атрибуты [[reproducible]] и [[unsequenced]] из C23 как раз то что нужно. Мне кажется они и в C++ должны попасть.

Ultrafeel avatar Jul 28 '23 14:07 Ultrafeel