История изменений
Исправление SZT, (текущая версия) :
Как тогда будет работать «чтение произвольной формулы из stdin» и т.д.?
Да очень просто. Делаем код, который преобразовывает формулу в некое дерево. Делаем код, который может это дерево упрощать. В рантайме мы запускаем код преобразования произвольной формулы в дерево, а потом это дерево передаем в код, умеющий упрощать дерево. В компилтайме мы этому коду, умеющему упрощать дерево, передаем AST (которое и так дерево по сути).
Сложилось впечатление, что на С++ ты (активно) не пишешь. Ошибаюсь? В любом случае, было бы интересно послушать, что на твой взгляд является «ненужным хламом, который портит язык».
Ну очевидно, что если я задаю подобные вопросы, я на нем активно не пишу. Если б я на нем писал, я бы уже очевидно знал, что подобные вещи в плюсах не решаются никаким способом, кроме как написанием кода на плюсах, делающим код на плюсах.
А ненужный хлам это например эти дурацкие constexpr-ы, которые МОГЛИ БЫ БЫТЬ пригодны для решения поставленной задачи, если бы ими можно было генерировать код, который бы на этапе компиляции ВСТАВЛЯЛСЯ бы внутрь исходника, черт возьми! А еще лучше, чтобы у меня была возможность делать код, выполняющийся на этапе компиляции, но при этом без требования функциональной чистоты. Например вот такой код
https://ideone.com/RHz5vW - плюсошаблоны и кодогенерация на С++
mixin-ы из D http://melpon.org/wandbox/permlink/22k35NmuFvFuVGKu
В D мне в случае кодогенерации не надо заморачиваться с выплевыванием исходника в stdin и последующей компиляции из него
Или например SFINAE и этот их std::enable_if. Почему б не сделать нормальный способ работы с типами, вместо этих костылей?
Или например подход с метапрограммированием на плюсошаблонах (не просто там генерация шаблонных функций, а именно попытки метапрограммирования на этом). Код на шаблонах, если он например предназначен для упрощения арифметических выражений (как в задаче из ОП-поста) оказывается непригодным для использования на этапе выполнения, и по факту его надо полностью будет заново написать с нуля для рантайма. А лучше этот код на шаблонах вообще не писать, а просто сделать только лишь вариан для рантайма, кодогенерировать им упрощенные формулы и включать их при компиляции
Исправление SZT, :
Как тогда будет работать «чтение произвольной формулы из stdin» и т.д.?
Да очень просто. Делаем код, который преобразовывает формулу в некое дерево. Делаем код, который может это дерево упрощать. В рантайме мы запускаем код преобразования произвольной формулы в дерево, а потом это дерево передаем в код, умеющий упрощать дерево. В компилтайме мы этому коду, умеющему упрощать дерево, передаем AST (которое и так дерево по сути).
Сложилось впечатление, что на С++ ты (активно) не пишешь. Ошибаюсь? В любом случае, было бы интересно послушать, что на твой взгляд является «ненужным хламом, который портит язык».
Ну очевидно, что если я задаю подобные вопросы, я на нем активно не пишу. Если б я на нем писал, я бы уже очевидно знал, что подобные вещи в плюсах не решаются никаким способом, кроме как написанием кода на плюсах, делающим код на плюсах.
А ненужный хлам это например эти дурацкие constexpr-ы, которые МОГЛИ БЫ БЫТЬ пригодны для решения поставленной задачи, если бы ими можно было генерировать код, который бы на этапе компиляции ВСТАВЛЯЛСЯ бы внутрь исходника, черт возьми! А еще лучше, чтобы у меня была возможность делать код, выполняющийся на этапе компиляции, но при этом без требования функциональной чистоты. Или например вот такой код
https://ideone.com/RHz5vW - плюсошаблоны и кодогенерация на С++
mixin-ы из D http://melpon.org/wandbox/permlink/22k35NmuFvFuVGKu
Или например SFINAE и этот их std::enable_if. Почему б не сделать нормальный способ работы с типами, вместо этих костылей?
Или например подход с метапрограммированием на плюсошаблонах (не просто там генерация шаблонных функций, а именно попытки метапрограммирования на этом). Код на шаблонах, если он например предназначен для упрощения арифметических выражений (как в задаче из ОП-поста) оказывается непригодным для использования на этапе выполнения, и по факту его надо полностью будет заново написать с нуля для рантайма. А лучше этот код на шаблонах вообще не писать, а просто сделать только лишь вариан для рантайма, кодогенерировать им упрощенные формулы и включать их при компиляции
Исходная версия SZT, :
Как тогда будет работать «чтение произвольной формулы из stdin» и т.д.?
Да очень просто. Делаем код, который преобразовывает формулу в некое дерево. Делаем код, который может это дерево упрощать. В рантайме мы запускаем код преобразования произвольной формулы в дерево, а потом это дерево передаем в код, умеющий упрощать дерево. В компилтайме мы этому коду, умеющему упрощать дерево, передаем AST (которое и так дерево по сути).
Сложилось впечатление, что на С++ ты (активно) не пишешь. Ошибаюсь? В любом случае, было бы интересно послушать, что на твой взгляд является «ненужным хламом, который портит язык».
Ну очевидно, что если я задаю подобные вопросы, я на нем активно не пишу. Если б я на нем писал, я бы уже очевидно знал, что подобные вещи в плюсах не решаются никаким способом, кроме как написанием кода на плюсах, делающим код на плюсах.
А ненужный хлам это например эти дурацкие constexpr-ы, которые МОГЛИ БЫ БЫТЬ пригодны для решения поставленной задачи, если бы ими можно было генерировать код, который бы на этапе компиляции ВСТАВЛЯЛСЯ бы внутрь исходника, черт возьми! А еще лучше, чтобы у меня была возможность делать код, выполняющийся на этапе компиляции, но при этом без требования функциональной чистоты. См. миксины из D. Или например вот такой код
https://ideone.com/RHz5vW - плюсошаблоны и кодогенерация на С++
mixin-ы из D http://melpon.org/wandbox/permlink/22k35NmuFvFuVGKu
Или например SFINAE и этот их std::enable_if. Почему б не сделать нормальный способ работы с типами, вместо этих костылей?
Или например подход с метапрограммированием на плюсошаблонах (не просто там генерация шаблонных функций, а именно попытки метапрограммирования на этом). Код на шаблонах, если он например предназначен для упрощения арифметических выражений (как в задаче из ОП-поста) оказывается непригодным для использования на этапе выполнения, и по факту его надо полностью будет заново написать с нуля для рантайма. А лучше этот код на шаблонах вообще не писать, а просто сделать только лишь вариан для рантайма, кодогенерировать им упрощенные формулы и включать их при компиляции