migmit: (Default)
[personal profile] migmit
Хотел написать программный пост про то, как я не люблю генераторы кода. Причём любые. Сюда попадают макросы: CPP, Лисп (считай, целиком), Template Haskell, да всё подряд. И внешние препроцессоры — например, тот же CPP, когда он используется отдельно от C. Отдельной строкой сюда идут шаблонизаторы, генерирующие программный код — как в HSP, скажем. И всякие безумные тулзы, генерирующие "заготовки" сайтов, как это делает, например, Snap (и я уж молчу про разные джанги).

Не получилось. Потому что есть один язык генерации кода, который я могу терпеть. Он абсолютно ублюдочен. По сравнению с ним, синтаксис того же Template Haskell — это произведение искусства. Он завязан на единственный язык, и оторвать его невозможно. Его не получится использовать без интенсивной гуглёжки. И всё же я могу терпеть его наличие в коде и даже писать на нём сам.

Называется — шаблоны C++.

Date: 2012-10-19 07:49 am (UTC)
From: [identity profile] voidex.livejournal.com
Шаблоны C++ прекрасны в своём уродстве. Они оказались способны решать задачи, для которых не были созданы, и тем самым завораживают. Разве можно удивляться, что на Template Haskell возможно создать список типов? Template Haskell скучен.

Date: 2012-10-19 08:55 am (UTC)
From: [identity profile] migmit.livejournal.com
Да, это очень близко к моим ощущениям.

Date: 2012-10-22 12:37 pm (UTC)
From: [identity profile] blueher.livejournal.com
А что в кодогенерации такого плохого? Не, я понимаю ненависть к шаблонизаторам которые подталкивают к нарушению принципа DRY. Но в кодогенерации как таковой - что плохого? Жду программного поста, вообщем ;)

PS: Вот есть google protocol buffers - с моей скромной точки зрения - типичный правильный пример использования кодогенератора. Если без кодогенерации - как построить ему альтернативу?