Продолжение

Продолжение

Продолжение (англ. continuation) представляет состояние программы в определённый момент, которое может быть сохранено и использовано для перехода в это состояние. Продолжения содержат всю информацию, чтобы продолжить выполнения программы с определённой точки. Состояние глобальных переменных обычно не сохраняется, однако для функциональных языков это несущественно (выборочное сохранение/восстановление значений глобальных объектов в Scheme достигается отдельным механизмом dynamic-wind). Продолжения похожи на goto Бейсика или setjmp()/longjmp() Си, так как также позволяют перейти в любое место программы. Но продолжения, в отличие от goto, позволяют перейти только в участок программы с определённым состоянием, которое должно быть сохранено заранее, в то время, как goto позволяет перейти в участок программы с неинициализированными переменными.

Программирование в стиле продолжений это программирование с использованием функции, передаваемой в качестве аргумента другой функции, и используемой для гибкого развития хода вычислений. Поскольку продолжение не возвращает управления, такой стиль применим лишь в языках с оптимизацией хвостовой рекурсии (Scheme, ML, Haskell).

Содержание

Ограниченные и неограниченные продолжения

Существует несколько разновидностей продолжений. Наиболее распространенная из них - неограниченные (undelimited continuations) продолжения, реализуемые с помощью функции call/cc или ее аналогов. Такие продолжения действительно представляют собой состояние всей программы (или одной ее нити) в определенный момент. Вызов такого продолжения не похож на вызов функции, поскольку он соответствует "прыжку" в сохраненное состояние программы и не возвращает никакого значения; такое продолжение обычно нельзя вызвать несколько раз. Ограниченные (delimited continuations) же продолжения абстрагируют зависимость результата некоторого блока программы от результата некоторого подвыражения этого блока. В определенном смысле они соответствуют сегменту стека вызовов, а не всему стеку. Такие продолжения могут использоваться как функции, вызываться несколько раз и т.п. Они абстрагируются с помощью механизма shift/reset: reset оборачивает внешний блок, shift действует как call/cc, но получает в качестве аргумента не глобальное продолжение, а ограниченное - зависимость значения блока reset от значения на месте блока shift. Существуют и другие разновидности, к примеру prompt/control.

Поддержка языками программирования

Многие языки программирования предоставляют эту возможность под различными именами, например:

  • Scheme: call/cc (краткая запись для call-with-current-continuation)
  • SML: SMLofNJ.Cont.callcc
  • Си: setcontext et al. (UNIX System V и GNU libc)
  • Ruby: callcc
  • Smalltalk: Continuation currentDo:, в большинстве современных реализаций продолжения могут быть реализованы на чистом Smalltalk, не требуя специальной поддержки в виртуальной машине.
  • Rhino : Continuation
  • Haskell : callCC (в модуле Control.Monad.Cont)
  • Factor : callcc0 и callcc1
  • Python : yield
  • Scala : Существует плагин для поддержки ограниченных продолжений.
  • PHP: Есть поддержка.
  • C#: конструкции yield return и await.

В любом языке, поддерживающем замыкания возможно писать программы в стиле продолжений (continuation-passing style) и вручную реализовать call/cc. В частности это принятая практика в Haskell, где легко строятся "монады, передающие продолжения" (для примера, монада Cont и трансформер монад ContT библиотеки mtl).

См. также

Ссылки

  • Продолжение всемирной паутины — о использования продолжений для построения веб-приложений.
  • Библиотечка ПФП — в статье "Паттерны использования call with current continuation" (перевод) описана концепция продолжений и дан ряд разнообразных примеров их использования.
  • Continuations and Continuation Passing Style — большая коллекция статей о разных видах продолжений и их использовании.



Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу
Синонимы:

Полезное


Смотреть что такое "Продолжение" в других словарях:

  • ПРОДОЛЖЕНИЕ — (продолжение)(продолжение)(продолжение)(продолжение)(продолжение)(продолжение)(продолжение) …   Этнографический словарь

  • ПРОДОЛЖЕНИЕ — ПРОДОЛЖЕНИЕ, продолжения, ср. Действие по гл. продолжить продолжать и продолжиться продолжаться. Продолжение начатой работы. Продолжение следует (примечание под неоконченным произведением, указывающее, что оно будет продолжено в следующем номере… …   Толковый словарь Ушакова

  • продолжение — в продолжение.. Словарь русских синонимов и сходных по смыслу выражений. под. ред. Н. Абрамова, М.: Русские словари, 1999. продолжение расширение, распространение; экстраполирование, экстраполяция, развитие, продление, пролонгирование,… …   Словарь синонимов

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

  • ПРОДОЛЖЕНИЕ — ПРОДОЛЖЕНИЕ, я, ср. 1. см. продолжать, ся. 2. Часть чего н. не закончившегося, не завершённого, продолжающегося. П. событий. Эта дорога п. магистрали. П. романа в очередном номере журнала. • В продолжение чего, предл. с род. то же, что в течение… …   Толковый словарь Ожегова

  • продолжение — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN continuation …   Справочник технического переводчика

  • продолжение — ждать продолжения • модальность, ожидание иметь продолжение • действие ожидать продолжения • модальность, ожидание получить продолжение • действие, начало продолжение следует • субъект, приближение / удаление (не) оставалось сомнений • действие,… …   Глагольной сочетаемости непредметных имён

  • продолжение — сущ., с., употр. сравн. часто Морфология: (нет) чего? продолжения, чему? продолжению, (вижу) что? продолжение, чем? продолжением, о чём? о продолжении; мн. что? продолжения, (нет) чего? продолжений, чему? продолжениям, (вижу) что? продолжения,… …   Толковый словарь Дмитриева

  • продолжение — в продолжение (форма вин. падежа) чего (указывается отрезок времени или событие, действие, во время которого что л. происходит). В продолжение ужина Грушницкий шептался и перемигивался с драгунским капитаном (Лермонтов). У старых писателей… …   Словарь управления

  • продолжение — ▲ стадия ↑ следующий продолжение следующая часть (# следует). | еще. дальше. далее. все (# трудишься?). ... и ... (вода все капает и капает). пока (дождь # идет). пока еще. все еще. ▼ преемственность ↓ …   Идеографический словарь русского языка


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»