Сообщение Re: Вы пользуетесь constexpr? от 29.11.2024 3:40
Изменено 29.11.2024 4:00 Shmj
Re: Вы пользуетесь constexpr?
Здравствуйте, cppguard, Вы писали:
C>Заметил, что значительная часть нескольких последних стандартов иделяется этой части языка. Даже вот consteval появился. А насколько это реально нужно на практике? Точнее, у вас есть реальный пример, когда это было настолько нужно, что эквивалентоное единовременное вычисление на стадиции инициализации программы сильно проигрывает? Вообще существуют ещё языки, где есть что-то подобное?
Хотя rg45 и критиковал мою концепцию, однако все-же C++ разделятся на два разных подъязыка:
1. С++ времени компиляции.
2. C++ времени исполнения.
Это два разных языка, первый можно даже не использовать, при этом можно будет написать любую программу.
Первый ограничен — там нет возможности взаимодействия с системой, динамической памяти и пр. Но он довольно сложен, в чем-то даже более мозгодробилен, чем классический C++ времени исполнения.
Время компиляции допускает не так уж много конструкций. Интересные примеры:
Цикл, казалось бы:
А вот if — не умеет, нужно только if constexpr:
И даже
Ваш вопрос мне так же интересен, но пока он для меня открыт. Имхо, какая-то ошибка концептуальная возникла, из-за чего пришлось добавлять подъязык в языке.
C>Заметил, что значительная часть нескольких последних стандартов иделяется этой части языка. Даже вот consteval появился. А насколько это реально нужно на практике? Точнее, у вас есть реальный пример, когда это было настолько нужно, что эквивалентоное единовременное вычисление на стадиции инициализации программы сильно проигрывает? Вообще существуют ещё языки, где есть что-то подобное?
Хотя rg45 и критиковал мою концепцию, однако все-же C++ разделятся на два разных подъязыка:
1. С++ времени компиляции.
2. C++ времени исполнения.
Это два разных языка, первый можно даже не использовать, при этом можно будет написать любую программу.
Первый ограничен — там нет возможности взаимодействия с системой, динамической памяти и пр. Но он довольно сложен, в чем-то даже более мозгодробилен, чем классический C++ времени исполнения.
Время компиляции допускает не так уж много конструкций. Интересные примеры:
Цикл, казалось бы:
constexpr int sumUpTo(int n)
{
int sum = 0;
for (int i = 1; i <= n; ++i)
sum += i;
return sum;
}
constexpr int sum = sumUpTo(10);
А вот if — не умеет, нужно только if constexpr:
template <typename T>
constexpr auto process(T value)
{
if constexpr (std::is_integral_v<T>)
return value * 2; // Вычисляется, если T — целое число
else
return value / 2;
}
constexpr int result = process(5); // Результат 10
И даже
struct Point
{
int x, y;
constexpr Point(int x, int y) : x(x), y(y) {}
constexpr int distance() const { return x * x + y * y; }
};
constexpr Point p(3, 4);
constexpr int dist = p.distance();
Ваш вопрос мне так же интересен, но пока он для меня открыт. Имхо, какая-то ошибка концептуальная возникла, из-за чего пришлось добавлять подъязык в языке.
Re: Вы пользуетесь constexpr?
Здравствуйте, cppguard, Вы писали:
C>Заметил, что значительная часть нескольких последних стандартов иделяется этой части языка. Даже вот consteval появился. А насколько это реально нужно на практике? Точнее, у вас есть реальный пример, когда это было настолько нужно, что эквивалентоное единовременное вычисление на стадиции инициализации программы сильно проигрывает? Вообще существуют ещё языки, где есть что-то подобное?
Хотя rg45 и критиковал мою концепцию, однако все-же C++ разделятся на два разных подъязыка:
1. С++ времени компиляции.
2. C++ времени исполнения.
Это два разных языка, первый можно даже не использовать, при этом можно будет написать любую программу.
Первый ограничен — там нет возможности взаимодействия с системой, динамической памяти и пр. Но он довольно сложен, в чем-то даже более мозгодробилен, чем классический C++ времени исполнения.
Время компиляции допускает не так уж много конструкций. Интересные примеры:
Цикл, казалось бы:
А вот if — не умеет, нужно только if constexpr:
И даже
Ваш вопрос мне так же интересен, но пока он для меня открыт. Имхо, какая-то ошибка концептуальная возникла, из-за чего пришлось добавлять подъязык в языке.
Самое парадоксальное, что при всей сложности этого подъязыка — он не позволяет полноценно сделать ORM, чтобы сделать что-то типа LINQ и оно само транслировалось в полноценные SQL-запросы. Только простые какие-то вещи можно сделать типа счетчика (и то будет тонна запутанного кода), но не реально полезные.
C>Заметил, что значительная часть нескольких последних стандартов иделяется этой части языка. Даже вот consteval появился. А насколько это реально нужно на практике? Точнее, у вас есть реальный пример, когда это было настолько нужно, что эквивалентоное единовременное вычисление на стадиции инициализации программы сильно проигрывает? Вообще существуют ещё языки, где есть что-то подобное?
Хотя rg45 и критиковал мою концепцию, однако все-же C++ разделятся на два разных подъязыка:
1. С++ времени компиляции.
2. C++ времени исполнения.
Это два разных языка, первый можно даже не использовать, при этом можно будет написать любую программу.
Первый ограничен — там нет возможности взаимодействия с системой, динамической памяти и пр. Но он довольно сложен, в чем-то даже более мозгодробилен, чем классический C++ времени исполнения.
Время компиляции допускает не так уж много конструкций. Интересные примеры:
Цикл, казалось бы:
constexpr int sumUpTo(int n)
{
int sum = 0;
for (int i = 1; i <= n; ++i)
sum += i;
return sum;
}
constexpr int sum = sumUpTo(10);
А вот if — не умеет, нужно только if constexpr:
template <typename T>
constexpr auto process(T value)
{
if constexpr (std::is_integral_v<T>)
return value * 2; // Вычисляется, если T — целое число
else
return value / 2;
}
constexpr int result = process(5); // Результат 10
И даже
struct Point
{
int x, y;
constexpr Point(int x, int y) : x(x), y(y) {}
constexpr int distance() const { return x * x + y * y; }
};
constexpr Point p(3, 4);
constexpr int dist = p.distance();
Ваш вопрос мне так же интересен, но пока он для меня открыт. Имхо, какая-то ошибка концептуальная возникла, из-за чего пришлось добавлять подъязык в языке.
Самое парадоксальное, что при всей сложности этого подъязыка — он не позволяет полноценно сделать ORM, чтобы сделать что-то типа LINQ и оно само транслировалось в полноценные SQL-запросы. Только простые какие-то вещи можно сделать типа счетчика (и то будет тонна запутанного кода), но не реально полезные.