Язык позволяет создавать веб-страницы в виде программ, при компиляции которых генерируется сразу серверный код, клиентский код для браузера и, при необходимости, код SQL, если используется база данных. Таким образом, Ur/Web включает в себя основные технологии World Wide Web, освобождая разработчика от необходимости осваивать каждую из них по отдельности.
«Я уверен, что это язык с потенциально широким кругом применений, который позволит снизить затраты на разработку разноплановых веб-проектов, — заявил Адам Члипала, автор Ur/Web, профессор МТИ. — Он дает возможность использовать общепринятые методы программной инженерии для тех аспектов веб-разработки, которые сейчас требуют узкоспециализированных подходов».
В феврале Члипала представит Ur/Web на традиционном симпозиуме по языкам программирования, организуемом Association for Computing Machinery.
Сейчас разработка веб-сайта требует знания нескольких различных языков и понимания принципов их взаимодействия. В частности, HTML предоставляет базовые возможности форматирования веб-страниц, а вместе с ним обычно применяют еще ряд смежных технологий: CSS, дает возможность модифицировать внешний вид веб-страницы, XML структурирует данные для классификации и обработки, JavaScript предоставляет возможности написания логики пользовательского интерфейса. А если данные хранятся в базе, разработчику еще нужно знать язык запросов SQL.
Ur/Web инкапсулирует все перечисленные технологии и частично компилируется в машинный код, благодаря чему, по словам автора, программы на нем могут работать гораздо быстрее, чем интепретируемый код распространенных языков веб-разработки.
«В Ur/Web все основано на так называемых транзакциях — все, что нужно для обработки клиентского запроса, абстрагируется в виде одиночной функции, — объясняет Члипала. — Язык реализован с рядом оптимизаций, обеспечивающих возможность параллельного выполнения многих запросов на физических серверах. Принцип представления всех действий в виде транзакций упрощает распараллеливание для программиста».
Кроме возможности освобождения разработчиков от освоения множества веб-технологий Ur/Web предлагает ряд механизмов безопасности, способных сделать сайты более защищенными. Автор языка приводит пример: благодаря предусмотренным в Ur/Web ограничениям внедренный код для вывода рекламы не будет иметь доступа к календарному виджету, размещенному на той же странице.
Кроме того, подобно традиционным языкам программирования, таким как Си и Java, и в отличие от веб-языков наподобие JavaScript Ur/Web является языком со строгой типизацией. Это значит, что все переменные и функции должны отвечать заранее объявленному типу данных, что не позволит атакующим передавать через веб-формы данные, отформатированные так, чтобы вызвать сбой. Ur/Web также поддерживает возможность ограничивать в коде области, из которых может происходить обращение к той или иной переменной.
Потенциальный минус языка в том, что он требует освоения нетрадиционной для веб-разработчиков парадигмы программирования, признает Члипала. Ur/Web - функциональный язык: программа на нем представляет собой набор функций. Для разработчика, больше привычного к процедурным и объектно-ориентированным языкам, освоить функциональный может быть сложнее.
Создатель Ur/Web сравнивает его с Haskell, функциональным языком, который многие разработчики считают экзотикой, но который специалисты ценят за возможность быстрого написания надежных и корректных программ.
Исследователи из МТИ в последнее активно раздвигают горизонты языков программирования. Один из коллег автора Ur/Web разрабатывает яызк Sketch, способный автоматически дописывать фрагменты разрабатываемой программы, а в рамках проекта под названием Stack реализуется механизм распознавания ценных участков кода, которые компиляторы отбрасывают, полагая неисполняемыми.