В документе, представленном на симпозиуме Ассоциации вычислительной техники по принципам языков программирования, Адам Члипала, профессор программных технологий Дугласа Росса по развитию карьеры, описывает новый язык программирования под названием Ur / Web, который позволяет разработчикам писать веб-приложения самостоятельно. -содержащие программы. Компилятор языка — программа, которая превращает высокоуровневые инструкции в машинно-исполняемый код — затем автоматически генерирует соответствующий XML-код и спецификации таблиц стилей и встраивает JavaScript и код базы данных в нужные места.Ur / Web не только упрощает написание веб-приложений, но и делает их более безопасными. "Допустим, вы хотите иметь виджет календаря на своей веб-странице, и вы собираетесь использовать библиотеку, которая предоставляет виджет календаря, и на той же странице есть также рекламное окно, основанное на коде, предоставляемом рекламной сетью. , — говорит Хлипала. «Чего вы не хотите, так это того, чтобы рекламная сеть могла изменять способ работы календаря или автора кода календаря, чтобы иметь возможность вмешиваться в показ рекламы». Ur / Web автоматически запрещает такой несанкционированный доступ между элементами страницы.
Набор текста, определение объемаСпособность Ur / Web обеспечивать защиту и координировать разрозненные веб-технологии проистекает из двух общих свойств с большинством полноценных языков программирования, таких как C ++ или Java.
Во-первых, он «строго типизирован». Это означает, что любая новая переменная, которую программист определяет в Ur / Web, ограничена определенным типом данных.
Точно так же любая спецификация новой функции должна включать тип данных, с которыми работает функция, и тип данных, которые она возвращает.При вычислении возвращаемого значения функции может потребоваться создать новые переменные. (Например, функция, возвращающая среднее значение в базе данных, должна сначала вычислить их сумму.) Но эти переменные недоступны для остальной части программы. Это второе свойство, известное как «область видимости переменной», поскольку оно ограничивает область действия — широту доступности — переменных, определенных в функциях.«Возможно, вы захотите написать библиотеку, в которой в качестве частного состояния будет таблица базы данных, в которой записываются имена пользователей и пароли», — говорит Члипала. «Вы не хотите, чтобы какая-либо другая часть вашего приложения могла просто читать и перезаписывать пароли.
Большинство веб-фреймворков не поддерживают этот стиль. Они предполагают, что каждая часть вашей программы имеет полный доступ к базе данных».
Набор текста тоже помогает с безопасностью. Многие фреймворки веб-разработки генерируют запросы к базе данных таким образом, что кто-то, якобы входящий на веб-сайт, может ввести код в поле имени пользователя, которое фактически перезаписывает данные в базе данных. В Ur / Web имена пользователей будут представлять собой их собственный тип данных, который будет обрабатываться иначе, чем запросы к базе данных.
Оправдание ожиданийНабор текста также обеспечивает координацию между веб-технологиями.
Предположим, что часть кода JavaScript должна воздействовать на данные, полученные из базы данных, и что результат должен отображаться на веб-странице в месте, определяемом некоторым кодом XML. Если программист Ur / Web написал запрос к базе данных, извлекающий данные типа, которого JavaScript не ожидал, или если JavaScript сгенерировал вывод типа, которого страница XML не ожидала, компилятор зарегистрирует несоответствие и пометит код как содержащий ошибку.Часто код, который не типизирован явно, по-прежнему имеет неявные правила согласованности.
Например, если вы напишете запрос на языке базы данных SQL, который запрашивает среднее числовое значение группы текстовых полей, сервер базы данных сообщит вам, что он не может обработать ваш запрос. Чтобы позволить Ur / Web координировать поток данных между веб-технологиями, Chlipala пришлось создать библиотеки новых типов данных для SQL, XML и каскадных таблиц стилей (CSS), которые воплощают эти правила.
Хотя компилятор Ur / Web действительно генерирует код XML, JavaScript и SQL в своей текущей версии, он не создает таблицы стилей автоматически. Но, как говорит Хлипала, «компилятор может проанализировать всю вашу программу и сказать:« Вот исчерпывающий список всех классов CSS, которые могут быть упомянуты, и вот описание контекста, в котором каждый класс может быть used, который сообщает вам, какие свойства, возможно, стоит установить. ‘ Так, например, какой-то конкретный класс никогда не может быть использован в позиции, где свойства таблицы будут иметь какое-либо значение, поэтому вам не нужно беспокоиться об их установке ».
