cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

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

Open IMMZ opened 1 year ago

IMMZ commented 1 year ago

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

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

sergii-rybin-tfs commented 1 year ago

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

Ultrafeel commented 11 months ago

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