Десятое правило Гриспена

Десятое правило Гриспена

Десятое правило Гринспена – известный афоризм из области программирования:[1]

Любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию языка Common Lisp.[2]

Смысл правила в том, что программисты, ограниченные низкоуровневыми языками вроде C, преодолевают ограничения языка с путём введения в текст программ аналогов свойств, свойственных более выразительным языкам вроде Лиспа.

Содержание

Происхождение

Изобретено примерно в 1993 году Филипом Гринспеном. Правил с 1 по 9 (как можно было бы ожидать) не существует. Название сам Гринспен объяснял так: "Просто я пытался дать правилу запоминающееся имя."[3]

Уточнение Морриса

Известный хакер Роберт Моррис уточнил:

Любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию языка Common Lisp …в том числе и сам Common Lisp[4].

Уточнение содержит несколько смыслов:

  1. Транслятор Common Lisp, написанный на C или Фортране, получается таким, как в 10-м правиле Гринспена. Возможно, это одна из причин, по которым большинство известных реализаций Common Lisp написано на самом Common Lisp.
  2. Может рассматриваться как шутливое описание работы функции eval в Лиспе.
  3. Намёк на распростанённость рекурсии в функциональных языках

Дополнение о Прологе

Любая достаточно сложная программа на Лиспе наверняка содержит медленную реализацию языка Пролог. [5]

Эта формулировка отражает тот факт, что программы на Прологе содержат островки в стиле Лиспа, а программы на Лиспе – островки в стиле Пролога.

Дополнение об Эрланге

С распространением распределенного программирования и популяризацией идей, реализованных в

Любая достаточно сложная распределенная программа содержит заново написанную, неспецифицированную, глючную и медленную реализацию языка [6]

Эту поправку также называют следствием Армстронга.

Обобщение

Правило часто варьируется путём замены слов "Common Lisp" на любимый функциональный язык говорящего (например, Haskell). Можно обобщить, что

Любая достаточно сложная программа на императивном языке содержит заново написанную, неспецифицированную, глючную и медленную реализацию функционального языка.

Ссылки


Wikimedia Foundation. 2010.

Игры ⚽ Поможем решить контрольную работу

Полезное



Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»