Русская Википедия:Десятое правило Гринспена

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Десятое правило Гринспена (Шаблон: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 Шаблон:Лисп