Библиотека сайта rus-linux.net
Фреймворк Yesod
Глава 22 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: Yesod
Автор: Michael Snoyman
Дата публикации: 2012 г.
Перевод: Н.Ромоданов
Дата перевода: сентябрь 2013 г.
Creative Commons. Перевод был сделан в соответствие с лицензией Creative Commons. С русским вариантом лицензии можно ознакомиться здесь.
Yesod является веб-фреймворком, написанным на языке программирования Haskell. В то время как многие популярные веб фреймворки используют динамическую природу своих базовых языков, Yesod использует статические особенности языка Haskell с тем, чтобы создавать безопасный и быстрый код.
Разработка началась около двух лет назад, и с тех пор все еще идет. Фреймворк Yesod в реальных проектах используется еще не в полной мере, не со всеми его изначальными свойствами, появившимся вне фактических, реальных потребностей. Сначала разработка почти полностью напоминала игру одного актера. Примерно через год разработок, когда усилия, делаемые сообществом, переломили ход событий, Yesod превратился в процветающий проект с открытым кодом.
В своей эмбриональной фазе, когда Yesod был невероятно эфемерным и недостаточно определенным, было бы контрпродуктивным попытаться предложить его какой-нибудь команде с тем, чтобы на нем работать. Со временем он стал достаточно стабильным с тем, чтобы быть полезным для других, и это как раз был тот момент, когда следует оценить недостатки некоторых решений, которые были сделаны. Затем мы внесли значительны изменения в интерфейс API, обращенный к пользователю, с тем, чтобы сделать его более полезным, и все это зафиксировали в версии 1.0.
Вы можете спросить: почему еще один веб-фреймворк? Давайте вместо этого ответим на другой вопрос: Зачем использовать язык Haskell? Похоже, что большая часть мира вполне счастлива с одним из языков, относящихся к следующим двум стилям:
- Статически типизированные языки, такие как Java, C# и C++. В этих языках обеспечивается хорошая скорость работы и безопасность типов, но при программировании они более громоздки.
- Динамически типизированные языки, такие как Ruby и Python. Эти языки значительно увеличивают производительность (по крайней мере в краткосрочной перспективе), но работают медленно и очень слабо поддерживаются компиляторами с точки зрения проверки правильности. Решением этого последнего аспекта занимается юнит-тестирование. Мы вернемся к нему позже.
Такое деление ложное. Нет никаких причин, почему статически типизированные языки должны быть таким неуклюжими. Haskell способен быть столь же выразительным, как Руби и Python, оставаясь при этом строго типизированным языком. На самом деле, система типов в Haskell позволяет обнаружить гораздо больше ошибок, чем язык Java и ему подобные. Полностью устранены исключения, возникающие в случаях, когда значение указателя равно null; неизменяемые структуры данных упрощают обдумывание кода и упрощают параллельное программирование.
Так почему же язык Haskell? Это эффективный, дружественный для разработчика язык, в котором много проверок времени компиляции, что гарантирует корректность программ.
Целью проекта Yesod является распространение сильных сторон языка Haskell в направлении веб-разработки. Yesod стремится сделать код как можно более кратким. Во время компиляции на корректность проверяется, насколько это возможно, каждая строчка кода. Компилятор делает все это за вас вместо того, чтобы требовать больших библиотек юнит-тестов для проверки основных свойств. В глубине Yesod используются многие современные технологии повышения производительности, которые заставят летать ваш высокоуровневый код.
22.1. Сравнение с другими фреймворками
В общих чертах, Yesod больше похож на ведущие фреймворки, такие как Rails и Django., а не отличается от них. Он, в целом, соответствует парадигме Model-View-Controller (MVC), имеет систему шаблонов, в которой внешнее представление отделено от логики, предложена система объектно-реляционного отношения (Object-Relational Mapping — ORM) и есть контролер, предназначенный для реализации навигации.
Дьявол кроется в деталях. В Yesod делается попытка выявить основное количество ошибок на фазе компиляции, а не во время выполнения, а также для автоматически отлавливать как ошибки, так и изъяны в безопасности через систему типов. Хотя Yesod пытается оставаться дружественным высокоуровневым API, в нем для достижения высокой производительности используется ряд новых методов из мира функционального программирования, и эти внутренние особенности не скрыты от разработчиков.
Основной архитектурной проблемой в Yesod является балансирование этих двух, казалось бы противоречащих друг другу целей. Например, нет ничего революционного подхода в методе маршрутизации (используются типобезопасные адреса URL), применяемом в Yesod. Исторически, внедрение такого решения было утомительным процессом, подверженным ошибкам. Инновация, имеющаяся Yesod, состоит в в использовании шаблона Template Haskell(вариант генерации кода) для автоматизации типовых операций, необходимых для начальной самозагрузки процесса. Аналогичным образом, в течение долгого времени были повсюду типобезопасные страницы HTML; Yesod пытается выделить те аспекты, которые дружественны для разработчика и присутствуют в обычных языках работы с шаблонами, и, при этом, сохранить всю мощь, обеспечиваемую безопасностью типов.
Далее: Интерфейс веб-приложений