Заодно начал его потихоньку почитывать. В самом начале там приводятся результаты конкурса ПФП-2009, объявленного в третьем выпуске:
OCaml, Haskell, Erlang, Common Lisp, Python, C#, Visual Basic, Ada, Clojure.
Мы были приятно удивлены призовому месту решения на Visual Basic. Надо отметить его краткость и простоту кода. Решение «в лоб», без особых изысков в плане алгоритмов и структурирования программы, победило в практичности большинство своих аналогов на языках функционального программирования.
Среди недостатков присланных решений на языках функционального программирования надо отметить излишнее мудрствование: использование нетривиальных решений, отказ от использования библиотек синтаксического анализа XML, метапрограммирование, когда задача решалась более простыми средствами, не слишком теряя при этом в производительности. Сравните, например, решение на Visual Basic с решением OCaml–1: различие в производительности в двадцать процентов было получено ценой двукратного увеличения количества кода. Кстати, в этом выпуске журнала есть статья Дмитрия Попова (одного из участников конкурса) о синтаксическом анализе, содержащая, в частности, сравнительный анализ скорости работы различных библиотек синтаксического анализа XML (см. с. 74).
С другой стороны, в каких-то случаях такое мудрствование может быть оправдано. Вариант на Common Lisp, использующий несколько стадий метакомпиляции, кажется сложным для понимания (впрочем, автор все доходчиво рассказал в
своем LiveJournal ), но может похвастаться абсолютным рекордом скорости выполнения обрезки карт. Он может служить неплохой иллюстрацией к статье
«Лисп — абстракции на стероидах» Виталия Маяцких, опубликованной в предыдущем выпуске нашего журнала.
Интересно отметить, что победившее решение на C# вызвало у жюри более полярные мнения, чем решение на Visual Basic. Вот пара отзывов о победившем решении:
Эксперт–3:
«Программа реализована в лучших традициях продакшен программирования, простой первый прототип и аккуратно реализованный с разбиением на подпроекты и множеством вспомогательных утилит итоговый проект.»
Эксперт–4
«Декомпозиция: лютый овердизайн. Как будто платят за строчки кода. Куча мусора, не относящегося к задаче. Смысл утоплен в деталях реализации.»