Продолжение
Материал из Википедии — свободной энциклопедии
Продолжение (англ. continuation) представляет состояние программы в определённый момент, которое может быть сохранено и использовано для перехода в это состояние. Продолжения содержат всю информацию, чтобы продолжить выполнения программы с определённой точки. Состояние глобальных переменных обычно не сохраняется, однако для функциональных языков это несущественно (выборочное сохранение/восстановление значений глобальных объектов в Scheme достигается отдельным механизмом dynamic-wind). Продолжения похожи на goto Бейсика или setjmp()/longjmp() Си, так как также позволяют перейти в любое место программы. Но продолжения, в отличие от goto, позволяют перейти только в участок программы с определённым состоянием, которое должно быть сохранено заранее, в то время, как goto позволяет перейти в участок программы с неинициализированными переменными. Для функциональных языков продолжением также называют функцию, передаваемую в качестве аргумента другой функции, и используемую для гибкого развития хода вычислений. Поскольку продолжение, раз использовано, не возвращает управления, такой стиль применим лишь в языках с оптимизацией хвостовой рекурсии (Scheme, ML, Haskell).
[править] Поддержка языками программирования
Многие языки программирования предоставляют эту возможность под различными именами, например:
- Scheme:
call/cc(краткая запись дляcall-with-current-continuation) - SML:
SMLofNJ.Cont.callcc - Си:
setcontextet al. (UNIX System V и GNU libc) - Руби:
callcc - Smalltalk:
Continuation currentDo:, в большинстве современных реализаций продолжения могут быть реализованы на чистом Smalltalk, не требуя специальной поддержки в виртуальной машине. - Rhino :
Continuation - Haskell :
callCC(в модулеControl.Monad.Cont) - Factor :
callcc0иcallcc1 - Python :
yield
[править] См. также
[править] Ссылки
- Продолжение всемирной паутины — о использования продолжений для построения веб-приложений.
| Это незавершённая статья о компьютерных языках. Вы можете помочь проекту, исправив и дополнив её. |

