В чем разница между продолжением (как в Smalltalk) и прерыванием (как в ассемблере)?

StackOverflow https://stackoverflow.com/questions/815431

Вопрос

Я изо всех сил пытаюсь понять концепцию Continuations (как используется в Seaside с Smalltalk). Фрагмент из Википедии гласит:

  

" ... относится к первоклассным продолжениям, которые являются конструкциями, которые дают языку программирования возможность сохранять состояние выполнения в любой точке и возвращаться к этой точке в более поздней точке программы ... "

Разве это не просто еще один способ выразить то, что программист на ассемблере сделает при программировании прерывания? Или я полностью упустил суть!

Это было полезно?

Решение

Продолжение можно рассматривать как копию снимка запущенного процесса. Запись продолжения означает, что текущий процесс скопирован и отложен. После этого код продолжает нормально выполняться. Оценка продолжения означает, что текущий процесс завершается, а скопированный возобновляется точно в том состоянии, в котором он был захвачен. Продолжения обычно можно возобновить несколько раз.

Прерывание больше похоже на сопрограмму, где есть два разных потока выполнения (код приложения, обработчик прерываний), которые чередуют друг друга.

Другие советы

Продолжения примерно эквивалентны setjump / longjump в C. Вы можете ожидать, что ваш контекст останется неповрежденным, когда вы вызовете продолжение (стек, флаги, регистры, указатель инструкций и т. д.) после его выхода. Таким образом, он похож на программный вызов прерывания, за исключением того, что вам не нужно возвращаться (или, точнее, вызывать продолжение) после того, как обработчик завершится, и продолжение не является неявным.

В чем-то они похожи. Однако продолжения вызываются самой программой, а прерывания обычно генерируются процессором или устройствами на компьютере. Кроме того, прерывание больше похоже на сигнал C, оно просто вызывается, а затем управление возвращается в программу. Прерывание отвечает за сохранение состояния и его восстановление после этого.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top