Информация об изменениях

Сообщение C++ времени компиляции - про ограничения от 01.12.2024 17:15

Изменено 01.12.2024 17:19 Shmj

C++ времени компиляции - про ограничения
А вы знаете что C++ может порождать не только инструкции, включаемые в исполняемый файл (и исполняемые на машине пользователя), но так же и инструкции, который исполняются в момент компиляции.

В принципе, почти во всех ЯП есть кое-что (обычно по мелочи), что исполняется в момент компиляции/сборки на машине разработчика. Как минимум всегда можно написать 24*7 и оно вычислит.

Но C++ пошел дальше — там можно почти все, но с ограничениями! Такие ограничения C++ времени компиляции:

1. Нет обращения к изменяемым глобальным переменным, нет статических переменных внутри функции и пр. (в т.ч. нет static_cast).
2. Нет динамического выделения памяти и связанного с ним (в т.ч. полноценного полиморфизма).
3. Нет reinterpret_cast.
4. Нет вызова системных функций.
5. ?

Зато все остальное — можно юзать.

Хотя вот эти 4 пункта накладывают такие ограничения, что язык изменяется до неузнаваемости. К примеру, вот так выглядит счетчик
Автор: rg45
Дата: 27.11 18:42
(да, оказывается можно ухитриться).

И сам вопрос. А что если снять ограничения? Какие риски? Вот будет компил-тайм полноценным C++ языком. И что плохого случится?
C++ времени компиляции - про ограничения
А вы знаете что C++ может порождать не только инструкции, включаемые в исполняемый файл (и исполняемые на машине пользователя), но так же и инструкции, который исполняются в момент компиляции.

В принципе, почти во всех ЯП есть кое-что (обычно по мелочи), что исполняется в момент компиляции/сборки на машине разработчика. Как минимум всегда можно написать 24*7 и оно вычислит.

Но C++ пошел дальше — там можно почти все, но с ограничениями! Такие ограничения C++ времени компиляции:

1. Нет обращения к изменяемым глобальным переменным, нет статических переменных внутри функции и пр. (в т.ч. нет const_cast).
2. Нет динамического выделения памяти и связанного с ним (в т.ч. полноценного полиморфизма).
3. Нет reinterpret_cast.
4. Нет вызова системных функций.
5. ?

Зато все остальное — можно юзать.

Хотя вот эти 4 пункта накладывают такие ограничения, что язык изменяется до неузнаваемости. К примеру, вот так выглядит счетчик
Автор: rg45
Дата: 27.11 18:42
(да, оказывается можно ухитриться).

И сам вопрос. А что если снять ограничения? Какие риски? Вот будет компил-тайм полноценным C++ языком. И что плохого случится?