Машина Даффа (устройство Даффа) — различия между версиями
Dale (обсуждение | вклад) |
RXL (обсуждение | вклад) |
||
(не показана 1 промежуточная версия 1 участника) | |||
Строка 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''' переплетены в ней настолько причудливо, что первый вопрос, | + | Классическая '''М.Д.''' выглядит [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, ни здравому смыслу; более того, умелое ее использование позволяет красиво решать самые различные задачи, например, "раскручивание циклов", построение конечных автоматов, реализация кооперативной многозадачности через механизм протопотоков и т.п.