Я привык к ленивой оценке от Haskell и обнаружил, что меня раздражают языки с нетерпением по умолчанию, когда я использовал ленивую оценку должным образом. Это на самом деле довольно вредно, так как другие языки, которые я использую, в основном делают лениво оценивать вещи очень неудобно, обычно включая в себя развертывание пользовательских итераторов и т.д. Так что, приобретя некоторые знания, я фактически сделал себя less продуктивным на моих оригинальных языках. Вздох.
Но я слышал, что макросы AST предлагают еще один чистый способ сделать то же самое. Я часто слышал такие утверждения, как "Летивая оценка делает лишние макросы" и наоборот, в основном из спарринговых сообществ Lisp и Haskell.
Я использовал макросы в различных вариантах Lisp. Они просто казались действительно организованным способом копирования и вставки фрагментов кода, которые нужно обрабатывать во время компиляции. Они, конечно же, не были святым граалем, о котором думает Lispерс. Но это почти наверняка, потому что я не могу правильно их использовать. Конечно, наличие макросистемы в одной и той же основной структуре данных, которую сам язык собирает, действительно полезно, но по-прежнему в основном является организованным способом копирования и вставки кода. Я признаю, что базовая макросистема в том же АСТ, что и язык, который позволяет полностью изменить время исполнения, является мощным.
Я хочу знать, как можно использовать макросы для краткости и лаконично делать то, что делает ленивая оценка? Если я хочу обрабатывать файл по строкам, не разбивая все это, я просто возвращаю список, на котором была отображена рутинная процедура. Это прекрасный пример DWIM (что я имею в виду). Я даже не должен об этом думать.
Я явно не получаю макросы. Я использовал их и не был особенно впечатлен с учетом шумихи. Так что я чего-то не хватает, что не получаю, просматривая документацию в Интернете. Может кто-нибудь объяснить мне все это?