cpp-ru / ideas

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

Не принимать P1073R1 в текущем виде (constexpr! выражения, которые вычисляются _только_ на этапе компиляции) #317

Closed apolukhin closed 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +24, -1 Автор идеи: Amomum

Предложение хорошее, но в нем предлагается использовать ключевое слово "constexpr!" для обозначения таких выражений. Считаю, что нужно новое ключевое слово.

В существующем виде в С++ нет ни одной пары ключевых слов, которые бы отличались всего одним символом. И нет ключевых слов, которые включают в себя спецсимволы (в том числе !).

Отличие между constexpr и constexpr! не бросается в глаза, что может привести к путанице. К тому же constexpr! будет еще тяжелее произносить вслух или проговаривать про себя. Как это вообще проговорить - "констэкспр восклицательный знак"? "Констэкспр банг"? "Констэкспр экскламейшн марк"?

Гуглить "constexpr!" тоже будет очень тяжело, большинство поисковых систем фильтрует спецсимволы.

Считаю, что необходимо новое ключевое слово (compilet? compiletime?) или более значительная модификация слова "constexpr" (strict_constexpr? constexpr_only?), чтобы устранить вышеописанные проблемы.

apolukhin commented 3 years ago

Андрей Руссков, 6 июля 2018, 7:42 токен constexpr сам по себе длинный, для его задач хорошо бы подошло занятое слово static. Какой-нибудь force_constexpr был бы слишком непечатным

nenomius, 6 июля 2018, 14:16

Как это вообще проговорить - "констэкспр восклицательный знак"?

вот так: https://i.imgflip.com/2dhylk.jpg

ZzZombo, 8 июля 2018, 8:32 Предлагаю использовать comp[ile]time. Согласен с возражениями полностью.

michail.vms, 9 июля 2018, 0:00 Поддерживаю и, как где-то уже писали, лучше добавить просто атрибуты к constexpr.

Yauheni Akhotnikau, 9 июля 2018, 15:16 Может быть constexpr и constexpr для старого поведения constexpr. И constexpr<strong> для нового, когда вычисление должно быть только в compile-time. Ну или какие-то другие значения в уголовых скобках, но применить именно template-подобный синтаксис как максимально знакомый для С++ников.

Например, constexpr<compiletime, runtime> -- можно вычислять и там, и там. А constexpr -- только во время компиляции.

Dmitry Volosnykh, 10 июля 2018, 17:50 Может static_constexpr по аналогии с static_assert?

yndx-antoshkka, 12 июля 2018, 12:54 Это предложение дублирует #316

Предлагаю дальнейшее обссуждение проводить в нём.