LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

задача, которую тоже нельзя реализовать только с помощью фвп: сделать конструкцию «with-open-...»

Так оно же будет работать за счёт unwind-protect, try-catch-finally, bracket и т.п. специальных форм или функций вокруг исключений, stack unwinding и т.п. механизмов рантайма. Сами with-* макросы тут просто сахар который не привносит ничего что нельзя было бы написать достаточно просто и без них. То же самое с foreach - есть обычные циклы и функции вроде std::for_each и map - какая разница стоит имя переменной до коллекции или после? Чисто сахарное же отличие, тогда как полноценные макросы это не дешёвая фича (то есть «либо это лисп, либо макросы неполноценные»). То же самое с printf - реализуется cl:format, varargs, шаблонными функциями, классами типов (тут, разве что, вопрос с type safety может быть).

Простые примеры не особо впечатляют - чтобы макросы выглядели какой-то реальной киллер фичей это нужен более-менее сложный компилируемый eDSL, а какие задачи требуют или хотя бы хорошо ложатся на построения компилируемых eDSL-ей? При наличии такой задачи раздельная компиляция с выхлопами транслятора DSLя (интерпортабельного, но уже не «embedded») делается не особо сложно.

Исходная версия quasimoto, :

задача, которую тоже нельзя реализовать только с помощью фвп: сделать конструкцию «with-open-...»

Так оно же будет работать за счёт unwind-protect, try-catch-finally, bracket и т.п. специальных форм или функций вокруг исключений, stack unwinding и т.п. механизмов рантайма. Сами with-* макросы тут просто сахар который не привносит ничего что нельзя было бы написать достаточно просто и без них. Тоже самое с foreach - есть обычные циклы и функции вроде std::for_each и map - какая разница стоит имя переменной до коллекции или после? Чисто сахарное же отличие, тогда как полноценные макросы это не дешёвая фича (то есть «либо это лисп, либо макросы неполноценные»). Тоже самое с printf - реализуется cl:format, varargs, шаблонными функциями, классами типов (тут, разве что, вопрос с type safety может быть).

Простые примеры не особо впечатляют - чтобы макросы выглядели какой-то реальной киллер фичей это нужен более-менее сложный компилируемый eDSL, а какие задачи требуют или хотя бы хорошо ложатся на построения компилируемых eDSL-ей? При наличии такой задачи раздельная компиляция с выхлопами транслятора DSLя (интерпортабельного, но уже не «embedded») делается не особо сложно.