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

Материал из Весельчак У
Перейти к: навигация, поиск
(Новая страница: «На самом деле это не физическое устройство, а идиома программирования на языке ANSI C. '''М.Д.''...»)
 
Строка 3: Строка 3:
 
'''М.Д.''' была придумана компьютерным инженером канадского происхождения Томом Даффом (см. [http://en.wikipedia.org/wiki/Tom_Duff Tom Duff]). Оригинальность и непривычность подхода Даффа поражают при первом знакомстве: одни считают это гениальным трюком, другие - грязным хаком (см. [http://forum.shelek.ru/index.php/topic,25760.msg246759.html#msg246759 обсуждение] статьи [http://club.shelek.ru/viewart.php?id=338 "Сопрограммы в языке программирования C"]), но равнодушным не остается практически никто.
 
'''М.Д.''' была придумана компьютерным инженером канадского происхождения Томом Даффом (см. [http://en.wikipedia.org/wiki/Tom_Duff Tom Duff]). Оригинальность и непривычность подхода Даффа поражают при первом знакомстве: одни считают это гениальным трюком, другие - грязным хаком (см. [http://forum.shelek.ru/index.php/topic,25760.msg246759.html#msg246759 обсуждение] статьи [http://club.shelek.ru/viewart.php?id=338 "Сопрограммы в языке программирования C"]), но равнодушным не остается практически никто.
  
Классическая '''М.Д.''' выглядит [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, ни здравому смыслу; более того, умелое ее использование позволяет красиво решать самые различные задачи, например, "раскручивание циклов", построение конечных автоматов, реализация [[Кооперативная многозадачность|кооперативной многозадачности]] через механизм [[Протопоток|протопотоков]] и т.п.

Версия 15:35, 12 октября 2011

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

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

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