Машина Даффа (устройство Даффа)

Материал из Весельчак У
Версия от 17:04, 8 февраля 2013; RXL (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

На самом деле это не физическое устройство, а идиома программирования на языке ANSI C.

М.Д. была придумана компьютерным инженером канадского происхождения Томом Даффом (см. Tom Duff). Оригинальность и непривычность подхода Даффа поражают при первом знакомстве: одни считают это гениальным трюком, другие - грязным хаком (см. обсуждение статьи "Сопрограммы в языке программирования C"), но равнодушным не остается практически никто.

Классическая М.Д. выглядит так. Операторы switch и do while переплетены в ней настолько причудливо, что первый вопрос, который почти у всех возникает при виде М.Д.: "А это в самом деле можно скомпилировать без ошибок???". Но на самом деле М.Д. не противоречит ни синтаксису ANSI C, ни здравому смыслу; более того, умелое ее использование позволяет красиво решать самые различные задачи, например, "раскручивание циклов", построение конечных автоматов, реализация кооперативной многозадачности через механизм протопотоков и т.п.