10-е правило Гринспуна в Perl? - PullRequest
4 голосов
/ 01 апреля 2010

Десятое правило программирования Гринспуна является распространенным афоризмом в компьютерном программировании и особенно в кругах языков программирования. В нем говорится:

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

Вопросы,

  1. Считаете ли вы, что это верно для интерпретатора Perl? Пожалуйста, только объективные аргументы (например, какие функции Common Lisp реализованы в интерпретаторе)

  2. Независимо, существует ли Lisp (или, по крайней мере, n ad hoc, неформально заданная, медленная реализация половины Common Lisp), полностью реализованная в Perl?

Ответы [ 5 ]

20 голосов
/ 01 апреля 2010

Вам может понравиться предисловие (а также остальная часть книги) для Perl Марка Джейсона Доминуса, предметом которого по сути является ваш вопрос. Он говорит:

Если вы подберете хорошую книгу о Лиспе, там будет раздел, в котором описываются хорошие возможности Лиспа. Например, книга Питера Норвига «Парадигмы программирования искусственного интеллекта» включает в себя раздел «Что делает Лисп отличным? это описывает семь особенностей Lisp. Perl разделяет шесть из этих функций; ...

У Марка есть много других вещей, которые можно сказать о Лиспе и Perl

Итак, Perl уже Лисп, практически, но я бы сказал, ни медленно, ни наполовину. Однако одна из вещей, о которых говорит Марк о разнице между Perl и Lisp, заключается в том, что Perlers имеет дело с неструктурированными строками (в целом), в то время как Lispers работает со структурированными данными, когда это возможно. Perl может сделать это, но Perlers, как правило, этого не делает.

2 голосов
/ 01 апреля 2010

Проблема с этим афоризмом в том, что в нем мало что сказано. Common Lisp настолько сложен и универсален, что реализует практически любую функцию, которую может иметь язык программирования. Таким образом, все, что на самом деле говорит о том, что любая достаточно сложная система содержит половину всех возможных функций.

И да, Perl достаточно сложен.

1 голос
/ 18 июня 2013

На Github , есть небольшой проект под названием "mini_scheme". Это небольшая, глючная и неполная смесь Scheme и Common Lisp. Итак, в Perl есть ваша «специальная, неофициально заданная, медленная реализация половины Common Lisp» (или Scheme).

1 голос
/ 01 апреля 2010
  1. См. » Какими функциями Perl обладает с Lisp? «. Отсутствующей функцией являются настоящие макросы (это исключает исходные фильтры и Devel :: Declare, которые являются плохой заменой от POV lisper). У Perl 6 есть.

  2. MJD предоставляет практическую демонстрацию основной части Lisp в Perl:
    Perl содержит λ-исчисление

1 голос
/ 01 апреля 2010

Я оставлю в стороне "медленные" и "забитые ошибками" части, потому что это в основном дешевые кадры. Ничто не мешает намеренной, формально определенной реализации всего Common Lisp быть медленной или подверженной ошибкам.

Что касается остального, я думаю, что это имеет тенденцию быть правдой, но во многом причина того, что это правда, заключается в том, что Common Lisp предоставляет совсем немного, а C предоставляет очень мало. Такие базовые вещи, как хеш-таблицы, связанные списки и расширяемые векторы, оставлены на усмотрение пользователя. Все управление памятью выполняется вручную, но вы можете автоматизировать его, выполнив пересчет или даже добавив сборщик мусора. Вы можете свернуть свой собственный полиморфный ОО, сохранив указатели функций в структуре где-нибудь и используя его в качестве vtable. Вы можете добавить переводчик для языка, который позволит вам легко создавать сценарии для вашего приложения или облегчать взаимодействие и тестирование во время выполнения.

Это почти половина Common Lisp; Perl действительно предоставляет все это и некоторые другие функции Lispy для загрузки. Но на самом деле это не так уж важно, потому что одна вещь, которая изменилась за 15 с лишним лет, с тех пор как Гринспен изобрел свой Десятый Закон (пропуская остальные девять), состоит в том, что многие языки добавили ту же половину общего Лисп. Гай Стил сказал, что о Java несколько лет спустя - он тащил программистов на полпути к Лиспу.

...