Федеральное агентство по образованию
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет Информатики
Кафедра теоретических основ информатики
УДК 681.3.06
ДОПУСТИТЬ К ЗАЩИТЕ В ГАК
Зав. Кафедрой, проф., д.т.н. .
_________________ Ю.Л. Костюк
«____»_________________ 2008 г.
Юшкеев Сергей Анатольевич
РАЗРАБОТКА WEB-ПРИЛОЖЕНИЙ
НА ОСНОВЕ «ОТЛОЖЕННЫХ ВЫЧИСЛЕНИЙ»
Дипломная работа
Научный руководитель
| И. А. Кудрявцев
| Исполнитель,
студ. гр. 1431
| С. А. Юшкеев
| Электронная версия дипломной работы помещена в электронную библиотеку. Файл _______________________
Администратор _________________________
Томск – 2008
Реферат
Дипломная работа 37 с., 15 рис., 9 источников, 3 прил.
ПРОДОЛЖЕНИЯ, ЗАМЫКАНИЯ, СРЕДА РАЗРАБОТКИ, WEB-ПРИЛОЖЕНИЕ, ТЕХНОЛОГИИ РАЗРАБОТКИ ПО, DJANGO
Объект исследования – разработка web-приложений.
Цель работы – реализация сервера web-приложений, позволяющего ускорить и упростить процесс разработки ПО за счет естественного способа программирования логики, основанного на последовательном представлении шагов алгоритма.
Методы исследования – анализ существующих подходов к разработке web-приложений, применение продолжений в web-разработке, эмуляция продолжений.
Разработан сервер приложений, демонстрирующий практическое применение рассмотренных концепций. Кроме того произведена интеграция разработанных модулей в исходный сервер приложений с целью расширить его функциональность.
Содержание
Введение 5
1 Обзор существующих методик 7
1.1 Эволюция web-разработки 7
1.2 Проблемы традиционного подхода 9
1.3 Аналоги 13
1.3.1 Seaside 13
1.3.2 Apache Cocoon 2.1 13
2 Web-разработка, основанная на продолжениях 15
2.1 Базовая концепция 15
2.2 Подходы 17
2.2.1 Эмуляция CPS, основанная на замыканиях (англ. closure) 18
2.2.2 Эмуляция работы продолжений, основанная на микропотоках (англ. microthreads) 19
3 Реализация 22
3.1 Stackless Python 22
3.2 Система управления продолжениями 22
3.3 Хранилище продолжений 23
3.4 Сервер приложений 25
3.5 Интеграция с Django 26
Заключение 30
Список использованных источников 31
Приложение А. Руководство системного программиста 32
Приложение Б. Руководство прикладного программиста Django 37
Приложение В. Файлы проекта 38
Введение Транзакционная природа HTTP ставит перед разработчиками проблему сохранения данных между двумя транзакциями. При создании крупных web-приложений сложность разработки повышается ввиду того, что web-браузеры предлагают пользователям иные способы навигации, помимо тех, которые предоставляются пользовательским интерфейсом приложений. Пользователь всегда имеет возможность возвратиться на предыдущую страницу, создать копию в новом окне, продолжая работать с копиями параллельно, а так же сделать любой запрос с помощью адресной строки. Задача же разработчика заключается в том, чтобы приложение реагировало корректно на любые действия пользователя.
Традиционный подход предполагает использование событийно-ориентированной модели для обработки действий пользователя, но этот подход порождает другую проблему. Логика приложения разносится во множество модулей, которые обрабатывают свои функциональные части. Чтобы приложение было устойчиво к различным действиям пользователя, функционал этих частей минимизируется. Но эти функциональные части непременно связаны между собой, и эти связи множатся с увеличением web-приложения. Таким образом, мы получаем тяжелую для понимания в целом логику, вследствие чего поддержка приложения становится не менее фундаментальной задачей, чем его разработка.
Кроме того, одна функция может быть реализована в несколько транзакций, что ставит следующие две проблемы. Во-первых, единую функцию приходится разбивать на несколько функциональных шагов и отдельно их обрабатывать. Во-вторых, возникает проблемы хранения данных, полученных на предыдущих итерациях.
Предлагаемое решение основано на идее продолжений (англ. continuations) и представляет собой альтернативную методику разработки web-приложений. Оно позволяет значительно упростить разработку и поддержку крупных проектов за счет того, что код приложения, написанный с использованием продолжений, представляет собой последовательный поток действий, не зависящий от транзакционной природы HTTP, что позволяет программировать приложение в полном соответствии с его логикой. По сути, отправка ответа клиенту и получение запроса в коде являются не более чем вызовом встроенной функции[1].
Продолжение (иногда «отложенные вычисления») представляет собой состояние программы, которое может быть сохранено и использовано для перехода в это состояние. Продолжения содержат всю информацию, чтобы продолжить выполнения программы с определённой точки. Состояние глобальных переменных обычно не сохраняется, однако для функциональных языков это несущественно. Продолжения похожи на goto Бейсика, так как также позволяют перейти в любое место программы. Но продолжения, в отличие от goto, позволяют перейти только в участок программы с определённым состоянием, которое должно быть сохранено заранее, в то время как goto позволяет перейти в участок программы с неинициализированными переменными. Продолжения так же можно представить как копию текущего состояния локального окружения и указатель на следующую инструкцию[2].
Теперь представим, что любая функция, кроме обычных параметров принимает один дополнительный параметр – продолжение, к которому перейдёт управление после окончания работы функции. Таким образом, из функций никогда не происходит возврата. Функции просто дают команду на выполнение оставшихся вычислений. Такой метод называется "стиль передачи продолжений" (англ. CPS – continuation passing style). Поскольку продолжение, раз использовано, не возвращает управления, такой стиль применим лишь в языках с оптимизацией хвостовой рекурсии.
Целью работы является разработка сервера web-приложений с прозрачной для конечного разработчика поддержкой продолжений, который позволяет исполнять написанные в традиционном, характерном для «настольных» приложений, стиле.
|