дизайн для основанного на продолжении фреймворка Python для веб-приложений - PullRequest
0 голосов
/ 18 сентября 2010

Существует множество основанных на продолжении фреймворков для Java, Ruby и т. Д., Но в Python их нет. Фреймворк Nagare несколько решает проблему, но он не использует стандартный Python и использует Python без стеков для решения проблемы продолжения.

Мне было интересно,

Какая часть стандартного ограничения Python для создания такого продолжения веб-фреймворка в стандартном Python?

и какие обходные пути к нему? и что является стандартной частью в архитектуре структуры продолжения (как контроллер представления модели в MVC)?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2010

Правильно, продолжение - это свойство языка, и, к сожалению, CPython не имеет продолжения.

Обходные пути в чистом Python хорошо известны: используйте обратные вызовы / средства защиты, например Twisted и Tornado, или везде используйте «yield»чтобы имитировать сопрограммы, как дизель.Но оба подхода вынуждают вас изменить способ разработки и кодирования приложения.Кроме того, продолжение может быть «воспроизведено», так как основанные на продолжении фреймворки автоматически решают проблему с кнопкой «назад».

Наконец, если быть точным, в Nagare мы используем травление замороженного тасклета для полученияобъект продолжения.

2 голосов
/ 18 сентября 2010

Прежде чем вы даже начнете рассматривать написание среды, основанной на продолжениях, вам нужен язык программирования, который имеет продолжения (или, по крайней мере, сопрограммы, которые можно использовать для эмуляции продолжений). Продолжение - это управляющая структура, такая как циклы, замыкания или функции, а не шаблон проектирования, такой как MVC. К сожалению (в настоящее время) стандартный Python не поддерживает продолжения. Именно поэтому люди разработали Python без стеков.

Java - это особый случай. Сам язык не поддерживает продолжения, но виртуальная машина поддерживает (для поддержки исключений). Я думаю, что они сделали, чтобы изменить скомпилированный байт-код во время выполнения и изменить порядок команд, чтобы он выглядел так, как будто он поддерживает продолжения. Вроде как реализация Python без стека с помощью мартышки-патчинга.

...