Що так чудово в Ліспі? [зачинено]


104

Я не знаю достатньо Лісп, щоб сказати, добре це чи погано. Схоже, люблять усі, хто використовував Лісп, але найпопулярніші мови в наші дні походять з C.

То що ж таке велике про Lisp і чому його більше не використовують? Чи є щось просто погане про Лісп (крім невпинної кількості дужок)?


5
"Найпопулярніші мови в наші дні походять із С" лише поверхово. Якщо ви подивитесь на функції замість того, щоб просто використовувати фігурні дужки, ви побачите, що сучасні мови не так вже й далеко від Ліспа, і весь час наближаються. Програма в C # або Python або Ruby, скажімо, буде виглядати набагато більше, ніж Lisp, ніж сподобається C.
Кен

11
Хороший приклад мови, схожої на C, але більше схожий на Lisp - це JavaScript. Багато його дизайну схоже на Scheme.
JAL

Добре, Кен: все більше функцій, які раніше були унікальними для Lisp (функції першого класу, функції як дані, навіть макроси), надходять іншими мовами. І зворотний зв'язок не є одностороннім: Лісп розробляє нові методи та ідіоми в розпізнаванні інших мов (наприклад, CLOS у відповідь на успіх об'єктно-орієнтованої парадигми).
itowlson

6
Лісп брав ідеї з усіх кінців, але CLOS у відповідь на що? CLOS (1986-1987) значною мірою була стандартизацією більш ранніх об'єктних систем для Lisp, наприклад, Lisp Machine Lisp (1980), що включає Flavors. Я не думаю, що "успіх парадигми ОО" був очевидним ще в 1980 році: "C з класами" був лише рік (і ще 3 роки від перейменування на "C ++"), і я не знаю що Симула-67 колись була дуже популярною. У Lisp є маса інших вдосконалених функцій, яких у популярних мовах сьогодні немає; OO, мабуть, отримала успіх, але Лісп не отримав цього, оскільки (або коли) він був популярним.
Кен

Я не думаю, що всі, хто використовував Лісп, люблять це. Мій досвід інший. Спробуйте запитати студентів з інформатики, які розпочали роботу зі схеми. Ймовірно, близько 10% сподобається йому, 30% поважатимуть його, а 60% - ненавидять. Я також не думаю, що найпопулярніші мови походять з C.
Rainer Joswig

Відповіді:


58

Лісп - це мова програмування Чак Норріс.

Лісп - бар, на якому інші мови вимірюються.

Знання Lisp демонструє просвітлення розробників.

Я чув про 3 слабкі сторони (та їхні контр-аргументи):

  1. Динамічне введення тексту.

    Існує аргумент для статично набраних мов, що обертаються навколо того, щоб дати компілятору достатньо інформації, щоб схопити певний клас помилок, щоб вони не траплялися під час виконання. Але все-таки потрібно протестувати.

    У цій статті йдеться про динамічне введення тексту разом із додатковими тестуваннями: Сильне введення тексту та сильне тестування .

  2. Важко підібрати.

    Насправді це дві частини: навчання та інструменти.

    Лісп докладає певних зусиль, щоб дійсно «дістатись», але це того варте, адже вивчення Ліспа дійсно зробить тебе кращим програмістом інших мов. Наприклад, як тільки ви дійсно "отримаєте" закриття, ви зрозумієте внутрішні класи Java. І як тільки ви "отримаєте" першокласні функції, ви будете пригнічені щоразу, коли ви користуєтесь мовою без них.

    Я читав "Маленького схему" і читаю " Практичний звичайний лісп" , які є чудовими.

    Далі - інструменти. Я на Mac, тому я занурився в Aquamacs Emacs (робить Emacs зручним для новачків) та Steel Bank Common Lisp (SBCL).

  3. Відсутність бібліотек.

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


4
До адреси (3) - Ви подивилися на Clojure?
viksit

5
"Але насправді я не бачу, щоб Лісперс скаржився на відсутність бібліотек (можливо, тому що Лісп настільки потужний, що вони просто не потрібні?)". Я б виправив останнє твердження на "(можливо, тому що Лісп настільки потужний, що вони просто не потрібні ДЛЯ ЇХ?)" Це робить величезну зміну.
Агній Василіяускас

50
Нічого не скажеш, чому ліс чудовий, зворотне від мене.
Кілон

30
Відмовлено від того, що "Х приголомшливий! Х - здорово! Х - це як Y, що також чудово, тому що я кажу, що це здорово!" не є відповіддю на питання "Чому X вважають великим?". Політична довідка також є недоречною і не корисною (більшість людей навіть не вважає, що лібертаріанство є гарною ідеєю). Три моменти корисні, але я б хотів, щоб вони не були "У нього слабкість А ... Але насправді це навіть не слабкість!".
Супербест

1
Лісп - це мова програмування Чак Норріс. так що це робить його таким хорошим. Зрозумів. Захищений.
NiCk Newman

71

"Lisp - це програмована мова програмування."
- Джон Фодерара, CACM, вересень 1991 року

Ось мій погляд:

З іншого боку, Lisp - це приємна, проста функціональна мова програмування. Синтаксису майже немає, і всі фрагменти логічно поєднуються.

Якщо ви копаєте трохи глибше, читаєте SICP і пишете метациркулярний оцінювач, ви виявляєте дві речі: Один, весь інтерпретатор (з урахуванням лише декількох примітивів) - це лише ледь сторінка коду, а два - співвідношення коду та даних допускає елегантні методи програмування.

Після того, як ви повністю поглинули це, ви відчуваєте, що інші мови встановлені в камені, коли вони дозволяють вам сказати лише кілька речей. Lisp взагалі може побудувати будь-яку абстракцію, якщо ви можете визначити для неї синтаксис та семантику.


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

Я також чула це висловлювання кілька разів. Ви хотіли б трохи більше @ aoeu256?
Студент

66

Lisp хороший тим, що має дуже мінімальний, простий, регулярний синтаксис.

Lisp поганий, тому що він має дуже мінімальний, простий, регулярний синтаксис.


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

27
@oskarkv - абсолютно регулярний мінімальний синтаксис означає, що немає упередженості щодо будь-якого конкретного використання. Це звучить добре, поки ви не зіткнетеся з принципом Парето: ефективніше бути упередженим щодо випадків, що найчастіше зустрічаються, і перестати робити вигляд, що всі випадки однакові. Якщо 20% ваших клієнтів у штаті Нью-Йорк, а 80% в Лос-Анджелесі, чи є сенс сидіти на огорожі, десь на кордоні Канзас / Оклахома, щоб залишатися "неупередженими" в географічному відношенні? Або більше сенсу їхати туди, де більшість клієнтів? Ми віддаємо перевагу мовам, які перекосують їхні особливості у бік ймовірних проблем.
Даніель Ервікер

4
Синтаксис Lisp - це справді добре. Я дізнався Haskell після Clojure, але до того часу навіть синтаксис Haskell відчував себе перешкодою. Рівномірність заходу сонця Ліспа чудова. Отже, я точно не знаю, про які упередження ви говорите. Упередження до негнучкості? Звучить погано.
oskarkv

3
Це звучить погано, коли ви ставите так. Я не ставив це так! Як щодо упередженості до найпоширеніших подій, найбільш ймовірних ситуацій? Це, звичайно, відносні терміни, тому це залежить від того, що ти робиш. Якщо вам справді не вистачає будь-якої інформації про те, що ви будете робити, немає ніякого сенсу намагатися готуватися. Але це, мабуть, неправда - у вас є інформація, і тому ви можете підготуватися ("упереджуватися") до найімовірніших ситуацій, до яких потрібно бути готовим.
Даніель Ервікер


16

Ось кілька корисних посилань:


1
На Ліспі чудово (я просто на півдорозі, хоча, зізнаюся, макроси стають трохи густішими); але вам потрібно знати Ліспа, щоб прочитати його. Крім цієї маленької проблеми, це чудова книга не лише про Lisp, а й про інженерію програмного забезпечення взагалі.
JS


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.