Недавно имел несчастье дорабатывать сайт. Его самое первое и самое жестокое уродство было связано с языком реализации. Это было написано на Перле. Несмотря на то что есть люди способные даже на Перле писать хорошие CMS'ки (я даже видел одну такую), автор сего шедевра к их числу не относился.
Однако, он был нереально суров и, создавая механизм компоновки страницы, проявил бурную фантазию. Автор CMS'ки создал свой язык генерации страниц. Вот это мощно. Вот это по-нашему. В соответствии с мега-концепцией сначала генерировался скрипт написанный на этом языке а не страница, потом делались простейшие подстановки превращающие его в Перловый скрипт (ну типа system.out заменяет на print, какой в этом смысл я до сих пор не понял), после чего все это скармливается eval'у, который и выплёвывает скомпилированную страницу.
Далее. Автор CMS'ки знал про кэширование, но почему-то не знал что эту функциональность лучше реализовывать в виде класс/набора функций и запрятывать поглубже в недра системы. Однако каждый раз, когда требовалось чтение значения из кэша, вручную открывался файл, читался целиком, парсился и наконец выковыривалось нужное значение, если оно, конечно, там было, в противном случае оно добавлялось в кэш, после чего кэш благополучно обновлялся. И все это было повсюду, множество раз.
Но главные откровения были ещё впереди. Поковырявшись в кишках системы, закралась странная мысль, а CMS'ка ли это вообще? Сейчас попытаюсь объяснить что я имею ввиду. Если взять какую-нибудь Джумлу, то станет понятно, что основными сущностями являются «пользователь» и «материал». В этом скрипте основными сущностями были некие «item» и «description». Для тех у кого с английским беда, докладываю — «item» означает «товар». Материалов не было и в помине. А единственный пользователь был где-то захардкоден на уровне http-сервера. Озарение пришло резко, как удар киянкой по репе — корпоративный сайт данной конторы был реализован на базе скрипта для интернет-магазина.
Потом, кстати, нашлось ещё несколько подтверждений этой теории — вся система управлялась через каталог, а в папке с джаваскриптами лежал файлик cart.js
PS Ссылки по теме:
Первый проект