Русская Википедия:Десятое правило Гринспена
Десятое правило Гринспена (Шаблон:Lang-en) — афоризм из области программирования, гласящий:[1][2]
Шаблон:Начало цитатыЛюбая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp. Шаблон:OqШаблон:Конец цитаты
Происхождение
Правило было сформулировано примерно в 1993 году Филипом Гринспеном. Хотя оно известно как «десятое», предшествующих ему правил не существует. Название сам Гринспен объяснял так:[3]
Шаблон:Начало цитатыПросто я пытался дать правилу запоминающееся название. Шаблон:OqШаблон:Конец цитаты
Значение
Смысл правила в том, что программисты, ограниченные низкоуровневыми языками вроде Си, преодолевают ограничения языка путём введения в текст программ аналогов свойств, присущих более выразительным языкам вроде Лиспа.
Уточнение Морриса
Впоследствии хакер Роберт Моррис уточнил:[4]
Шаблон:Начало цитаты…в том числе и сам Common Lisp. Шаблон:OqШаблон:Конец цитаты
Уточнение может рассматриваться в качестве комментария к сложности создания эффективной реализации языка Common Lisp или просто как шутливое описание работы функции eval в Лиспе.
Дополнение о Прологе
Шаблон:Начало цитатыЛюбая достаточно сложная программа на Лиспе наверняка содержит медленную реализацию половины языка Пролог. Шаблон:OqШаблон:Конец цитаты
Эта формулировка[5] отражает тот факт, что программы на Прологе содержат островки в стиле Лиспа, а программы на Лиспе — островки в стиле Пролога.
Дополнение об Эрланге
С распространением распределённого программирования и популяризацией идей, реализованных в языке Erlang, Роберт Вирдинг предложил такой вариант:[6]
Шаблон:Начало цитатыЛюбая достаточно сложная распределённая программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Erlang. Шаблон:OqШаблон:Конец цитаты
Эту поправку также называют следствием Армстронга.
Обобщение
Правило часто варьируется путём замены слов «Common Lisp» на любимый функциональный язык говорящего (например, Scheme или Haskell). Можно обобщить, что:
Шаблон:Начало цитатыЛюбая достаточно сложная платформа содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины функционального языка. Шаблон:OqШаблон:Конец цитаты
Примечания
Шаблон:Common Lisp Шаблон:Лисп
развернутьПартнерские ресурсы |
---|
- ↑ Revenge of the Nerds Шаблон:Wayback, by Paul Graham. Шаблон:Ref-en
- ↑ Philip Greenspun’s Research Шаблон:Wayback Шаблон:Ref-en
- ↑ 10th rule of programming Шаблон:Wayback Шаблон:Ref-en
- ↑ Paul Graham quotes Шаблон:Wayback Шаблон:Ref-en
- ↑ comp.lang.prolog: why not use LISP-imp of Prolog as opposed to Prolog itself? Шаблон:Ref-en
- ↑ [erlang-questions] Erlang concurrency Шаблон:Wayback Шаблон:Ref-en