Почему term rewriting (TR) такой непопулярный? Это же по-сути фундаментальная концепция, причём невероятно удобная. То же lambda calculus (на который так яростно дрочат в последнее время) можно напрямую выразить через term rewriting.
Почему так мало языков, которые используют такую фичу? Я знаю только Lisp, Prolog (которые не используют напрямую, но достаточно расширяемы, чтобы можно было прикрутить TR) и Pure с Mathematica (у которых TR - основной способ вычислить что-либо).
Почему столь простую, мощную, и невероятно выразитильную вещь никто не использует?
>>2001676 Про терминальные правила мы не слышали? > Но для языков программирования, что он даст? Полную свободу выражения. Можно строить любые абстракции, DSLы, что значит понятный и расширяемый код.
>>2001695 >Про терминальные правила мы не слышали? И все удобства будут перечеркнуты тем что ты будешь сидеть и выписывать портянки этих терминальных правил.
>>2001695 > Можно строить любые абстракции, DSLы, что значит понятный и расширяемый код. А мы разве сейчас этого не можем? Так-то и машина Тьюринга всё может, и брейнфак. Но зачем?
>>2001716 Всё дело в выразительности. Да, на брейнфаке можно написать ОС, но это максимально сложно. В TR любая задача сводится к построению формул редукции, и при этом нет никаких ограничений со стороны самого языка.
Написать брейнфак в TR просто, а вот TR на брейнфаке (и даже лямбдах) - не очень.
Почитай эту статью. Хотя она не про TR, а про хаскель, но должна вполне ответить на твой вопрос почему не. Хотя я бы перефразировал почему не для всего.
Если совсем по-простому объяснять аналогиями, зачастую даже ООП сильно излишне. ООП это по сути такое же автоматическое создание множества точек расширения и абстракции. Иногда эти точки расширения удачно подходят под меняющиеся требования, иногда не очень. Иногда это приводит к пиздецу из сплошных AbstractSingletonFactoryBeanAdapter.
TR на самом деле применяется повсеместно. Макросы это типичный TR. Кодогенерация это TR. Грамматики парсеров это TR. Редукция графов в вычислениях в хаскеле это TR. Разница только в том, что эти все TR направленные и работают за предсказуемое с небольшим разбросом время. Prolog и Mathematica нужны для другого, для перебора этих самых TR чтобы вместо человека "подумать", поискать, где же тут удачно можно редуцировать выражение, чтобы синтезировать новое знание. Никто не будет применять TR для эффективных вычислений по заранее известному алгоритму, потому что это сложно, накладно, это трудно для людей в первую очередь.
>>2001726 > готовый TR одинаково сложно. Чем сложно? Не сложнее, чем всё остальное FP. Я бы даже сказал, проще, ибо не надо задумываться о том как лучше сделать api.
>>2001841 Нет. Такие вопросы возникают у людей, открывших для себя отрасль дизайна языков программирования. Там есть довольно стройные, зачастую основанные на математической логике, модели вычислений, на основе которых создано несколько не самых популярных языков. И у неподготовленного мозга возникает иллюзия что все вокруг заняты чем-то не тем, и что у нас мог бы быть лучший мир, если бы все начали писать на языке NN. На деле далеко не всегда основная проблема программ написанных на популярных языках это то что пытается решить язык NN.
Почему так мало языков, которые используют такую фичу? Я знаю только Lisp, Prolog (которые не используют напрямую, но достаточно расширяемы, чтобы можно было прикрутить TR) и Pure с Mathematica (у которых TR - основной способ вычислить что-либо).
Почему столь простую, мощную, и невероятно выразитильную вещь никто не использует?