Машина Даффа (устройство Даффа) — различия между версиями

Материал из Весельчак У
Перейти к: навигация, поиск
 
Строка 4: Строка 4:
  
 
Классическая '''М.Д.''' выглядит [http://en.wikipedia.org/wiki/Duff%27s_device#Original_version так]. Операторы '''switch''' и '''do while''' переплетены в ней настолько причудливо, что первый вопрос, который почти у всех возникает при виде '''М.Д.''': "А это в самом деле можно скомпилировать без ошибок???". Но на самом деле '''М.Д.''' не противоречит ни синтаксису ANSI C, ни здравому смыслу; более того, умелое ее использование позволяет красиво решать самые различные задачи, например, "раскручивание циклов", построение конечных автоматов, реализация [[Кооперативная многозадачность|кооперативной многозадачности]] через механизм [[Протопоток|протопотоков]] и т.п.
 
Классическая '''М.Д.''' выглядит [http://en.wikipedia.org/wiki/Duff%27s_device#Original_version так]. Операторы '''switch''' и '''do while''' переплетены в ней настолько причудливо, что первый вопрос, который почти у всех возникает при виде '''М.Д.''': "А это в самом деле можно скомпилировать без ошибок???". Но на самом деле '''М.Д.''' не противоречит ни синтаксису ANSI C, ни здравому смыслу; более того, умелое ее использование позволяет красиво решать самые различные задачи, например, "раскручивание циклов", построение конечных автоматов, реализация [[Кооперативная многозадачность|кооперативной многозадачности]] через механизм [[Протопоток|протопотоков]] и т.п.
 +
 +
[[Category:Толковый словарь]]

Текущая версия на 17:04, 8 февраля 2013

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

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

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