Сообщение C++ времени компиляции - про ограничения от 01.12.2024 17:15
Изменено 01.12.2024 17:17 Shmj
C++ времени компиляции - про ограничения
А вы знаете что C++ может порождать не только инструкции, включаемые в исполняемый файл (и исполняемые на машине пользователя), но так же и инструкции, который исполняются в момент компиляции.
В принципе, почти во всех ЯП есть кое-что (обычно по мелочи), что исполняется в момент компиляции/сборки на машине разработчика. Как минимум всегда можно написать 24*7 и оно вычислит.
Но C++ пошел дальше — там можно почти все, но с ограничениями! Такие ограничения C++ времени компиляции:
1. Нет обращения к изменяемым глобальным переменным, нет статических переменных внутри функции и пр. (в т.ч. нет static_cast).
2. Нет динамического выделения памяти и связанного с ним (в т.ч. полноценного полиморфизма).
3. Нет reinterpret_cast.
4. Нет вызова системных функций.
5. ?
Зато все остальное — можно юзать.
Хотя вот эти 4 пункта накладывают такие ограничения, что язык изменяется до неузнаваемости. К примеру, вот так выглядит счетчик
И сам вопрос. А что если снять ограничения? Какие риски? Вот будет компил-тайм полноценным C++ языком. И что плохого случится?
В принципе, почти во всех ЯП есть кое-что (обычно по мелочи), что исполняется в момент компиляции/сборки на машине разработчика. Как минимум всегда можно написать 24*7 и оно вычислит.
Но C++ пошел дальше — там можно почти все, но с ограничениями! Такие ограничения C++ времени компиляции:
1. Нет обращения к изменяемым глобальным переменным, нет статических переменных внутри функции и пр. (в т.ч. нет static_cast).
2. Нет динамического выделения памяти и связанного с ним (в т.ч. полноценного полиморфизма).
3. Нет reinterpret_cast.
4. Нет вызова системных функций.
5. ?
Зато все остальное — можно юзать.
Хотя вот эти 4 пункта накладывают такие ограничения, что язык изменяется до неузнаваемости. К примеру, вот так выглядит счетчик
Автор: rg45
Дата: 27.11 18:42
, для примера (да, оказывается можно ухитриться).Дата: 27.11 18:42
И сам вопрос. А что если снять ограничения? Какие риски? Вот будет компил-тайм полноценным C++ языком. И что плохого случится?
C++ времени компиляции - про ограничения
А вы знаете что C++ может порождать не только инструкции, включаемые в исполняемый файл (и исполняемые на машине пользователя), но так же и инструкции, который исполняются в момент компиляции.
В принципе, почти во всех ЯП есть кое-что (обычно по мелочи), что исполняется в момент компиляции/сборки на машине разработчика. Как минимум всегда можно написать 24*7 и оно вычислит.
Но C++ пошел дальше — там можно почти все, но с ограничениями! Такие ограничения C++ времени компиляции:
1. Нет обращения к изменяемым глобальным переменным, нет статических переменных внутри функции и пр. (в т.ч. нет static_cast).
2. Нет динамического выделения памяти и связанного с ним (в т.ч. полноценного полиморфизма).
3. Нет reinterpret_cast.
4. Нет вызова системных функций.
5. ?
Зато все остальное — можно юзать.
Хотя вот эти 4 пункта накладывают такие ограничения, что язык изменяется до неузнаваемости. К примеру, вот так выглядит счетчик
И сам вопрос. А что если снять ограничения? Какие риски? Вот будет компил-тайм полноценным C++ языком. И что плохого случится?
В принципе, почти во всех ЯП есть кое-что (обычно по мелочи), что исполняется в момент компиляции/сборки на машине разработчика. Как минимум всегда можно написать 24*7 и оно вычислит.
Но C++ пошел дальше — там можно почти все, но с ограничениями! Такие ограничения C++ времени компиляции:
1. Нет обращения к изменяемым глобальным переменным, нет статических переменных внутри функции и пр. (в т.ч. нет static_cast).
2. Нет динамического выделения памяти и связанного с ним (в т.ч. полноценного полиморфизма).
3. Нет reinterpret_cast.
4. Нет вызова системных функций.
5. ?
Зато все остальное — можно юзать.
Хотя вот эти 4 пункта накладывают такие ограничения, что язык изменяется до неузнаваемости. К примеру, вот так выглядит счетчик
Автор: rg45
Дата: 27.11 18:42
(да, оказывается можно ухитриться).Дата: 27.11 18:42
И сам вопрос. А что если снять ограничения? Какие риски? Вот будет компил-тайм полноценным C++ языком. И что плохого случится?