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