Что такого хорошего в Лиспе? [закрыто]


105

Я недостаточно знаю Лисп, чтобы сказать, хорошо это или плохо. Кажется, что все, кто использовал Lisp, любят его, но самые популярные языки в наши дни происходят от C.

Так что же такого хорошего в Лиспе и почему он не используется чаще? Есть ли что-нибудь просто плохое в Лиспе (кроме бесконечного количества круглых скобок)?


5
«Самые популярные языки в наши дни произошли от C» лишь на первый взгляд. Если вы посмотрите на функции вместо использования фигурных скобок, вы обнаружите, что современные языки не так уж далеки от Лиспа и все время становятся ближе. Программа на C #, Python или Ruby, скажем, будет больше похожа на Lisp, чем на C.
Кен

11
Хорошим примером языка, который выглядит как C, но действует больше как Lisp, является JavaScript. Во многом его дизайн похож на схему.
JAL

Хороший момент, Кен: все больше возможностей, которые раньше были уникальными для Lisp (функции первого класса, функции как данные, даже макросы), появляются и на других языках. И обратная связь не является односторонней: Lisp развивает новые методы и идиомы с учетом других языков (например, CLOS в ответ на успех объектно-ориентированной парадигмы).
itowlson

6
Lisp заимствовал идеи отовсюду, но CLOS в ответ на что? CLOS (1986-1987) был в значительной степени стандартизацией более ранних объектных систем для Lisp, например, Lisp Machine Lisp (1980) включал Flavors. Я не думаю, что «успех парадигмы объектно-ориентированного программирования» был еще очевиден в 1980 году: «C с классами» было всего год (и до переименования в «C ++» оставалось еще 3 года), и я не знаю. что Simula-67 всегда была очень популярна. В Lisp есть множество других расширенных функций, которых нет в популярных языках сегодня; ОО оказался успешным, но Лисп не получил его, потому что (или когда) он был популярен.
Кен

Не думаю, что всем, кто использовал Lisp, он нравился. Мой опыт другой. Попробуйте спросить студентов, изучающих информатику, которые начали со Scheme. Вероятно, это понравится 10%, 30% будут уважать и 60% возненавидят. Я также не думаю, что самые популярные языки произошли от C.
Райнер Йосвиг,

Ответы:


58

Лисп - это Чак Норрис языков программирования.

Лисп - это планка, с которой сравниваются другие языки.

Знание Лиспа демонстрирует просвещенность разработчика.

Я слышал о трех слабостях (и их контраргументах):

  1. Динамический набор текста.

    Есть аргумент в пользу статически типизированных языков, который вращается вокруг предоставления компилятору информации, достаточной для обнаружения определенного класса ошибок, чтобы они не возникали во время выполнения. Но все равно нужно тестировать.

    В этой статье аргументируется необходимость динамического набора текста вместе с дополнительным тестированием: строгая печать против строгого тестирования .

  2. Трудно подобрать.

    На самом деле здесь есть две части: обучение и инструменты.

    Lisp требует некоторых усилий, чтобы действительно «понять», но оно того стоит, потому что изучение Lisp действительно сделает вас лучшим программистом на других языках. Например, как только вы действительно «получите» замыкания, вы поймете внутренние классы Java. И как только вы «получите» первоклассные функции, вы будете разочарованы каждый раз, когда будете использовать язык без них.

    Я читал «Маленького программиста» и читаю « Практический Common Lisp» , и оба они превосходны.

    Далее идут инструменты. У меня Mac, поэтому я сосредоточился на Aquamacs Emacs (делает Emacs пригодным для жизни новичком) и Steel Bank Common Lisp (SBCL).

  3. Отсутствие библиотек.

    Пока не могу сказать наверняка, но сомневаюсь. Для создания веб-сайтов, похоже, Hunchentoot и Elephant предоставляют хороший набор инструментов. Но на самом деле я не вижу, чтобы Lisp'ы жаловались на отсутствие библиотек (может быть, потому, что Lisp настолько мощный, что они просто не нужны?).


4
По адресу (3) - Вы смотрели на Clojure?
viksit

5
«Но на самом деле я не вижу, чтобы Lisp'ы жаловались на отсутствие библиотек (может быть, потому, что Lisp настолько мощный, что они просто не нужны?)». Я бы исправил последнее утверждение на «(может быть, потому, что Lisp настолько мощный, что они просто не нужны НИМ?)» Это имеет огромное значение.
Агниус Василяускас

50
Ничего не говорит, почему шепелявка - это здорово, мой голос против.
Kilon

30
Проголосовали против, потому что "X великолепен! X великолепен! X похож на Y, что также здорово, потому что я говорю, что это здорово!" не является ответом на вопрос «Почему X считается великим?». Политическая ссылка также неуместна и бесполезна (большинство людей даже не думают, что либертарианство - хорошая идея). Эти три пункта полезны, но я бы хотел, чтобы они не были «У него есть слабость A ... Но на самом деле это даже не слабость!».
Superbest

1
Лисп - это Чак Норрис языков программирования. вот что делает его таким хорошим. Понял. Проголосовали против.
NiCk Newman

71

«Лисп - это программируемый язык программирования».
- Джон Фодераро, CACM, сентябрь 1991 г.

Вот мой взгляд:

На первый взгляд, Lisp - красивый, простой функциональный язык программирования. Синтаксиса почти нет, и все части логически совпадают.

Если копнуть немного глубже, прочитать SICP и написать метациркулярный оценщик, вы обнаружите две вещи: во-первых, весь интерпретатор (с учетом всего нескольких примитивов) представляет собой всего лишь страницу кода, а во-вторых, взаимосвязь между кодом и данными. позволяет применять элегантные методы программирования.

Как только вы полностью усвоите это, кажется, что другие языки высечены в камне, когда они позволяют вам говорить лишь несколько вещей. Lisp может построить любую абстракцию, если вы можете определить для нее синтаксис и семантику.


1
Теоретически вы можете встроить в Лисп любой язык, например Rust, Ruby, C, Java, Python, Erlang. Таким образом, версия Python (Hy) и Rust с s-выражением называется (Risp) [хотя я не знаю, насколько они стабильны]. Если вы пишете код на Hy вместо Python, у вас есть возможность макросов и структурного редактирования, такого как parinfer / paredit ( shaunlebron.github.io/parinfer ). Макросы позволяют вам встраивать свои собственные DSL в Lisp, а также их можно использовать для преобразования медленного кода в быстрый код с помощью макросов компилятора. Вы также можете превратить код Python (Hy) в Rust (Risp), преобразовав дерево sexp.
aoeu256

Я тоже слышал это высказывание несколько раз. Не могли бы вы дать еще немного @ aoeu256?
Студент

67

Lisp хорош тем, что имеет очень минимальный, простой, регулярный синтаксис.

Lisp плох, потому что у него очень минимальный, простой, регулярный синтаксис.


4
Что плохого в минимальном, простом, регулярном синтаксисе?
oskarkv

27
@oskarkv - полностью обычный минимальный синтаксис означает отсутствие предвзятости в отношении какого-либо конкретного использования. Это звучит хорошо, пока вы не столкнетесь с принципом Парето: более эффективно смещаться в сторону наиболее часто встречающихся случаев и перестать притворяться, что все случаи одинаково вероятны. Если 20% ваших клиентов находятся в Нью-Йорке и 80% в Лос-Анджелесе, имеет ли смысл сидеть на заборе где-нибудь на границе Канзаса и Оклахомы, чтобы оставаться «непредвзятым» с географической точки зрения? Или есть смысл ехать туда, где больше всего клиентов? Мы предпочитаем языки, которые искажают свои функции в сторону вероятных проблем.
Дэниел Эрвикер,

4
Синтаксис Лиспа действительно хорош. Я изучил Haskell после Clojure, но к тому времени даже синтаксис Haskell казался помехой. Однородность suntax Лиспа велика. Итак, я не совсем понимаю, о каком предубеждении вы говорите. Уклонение в сторону негибкости? Плохо звучит.
oskarkv

3
Это действительно плохо звучит, когда ты так говоришь. Я не так выразился! Как насчет предвзятого отношения к наиболее частым событиям, наиболее вероятным ситуациям? Это (конечно) относительные термины, поэтому все зависит от того, что вы делаете. Если вам действительно не хватает информации о том, что вы будете делать, нет смысла пытаться подготовиться. Но это, вероятно, неправда - у вас есть информация, и вы можете подготовиться («предвзято») к наиболее вероятным ситуациям, к которым вам нужно быть готовым.
Дэниел Эрвикер


16

Вот несколько полезных ссылок:


1
На Лиспе все отлично (я только что закончил, хотя признаю, что макросы становятся немного плотными); но вам нужно знать Лисп, чтобы его прочитать. Помимо этой маленькой проблемы, это отличная книга не только о Лиспе, но и о программной инженерии в целом.
JS


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.