Чому Лісп корисний? [зачинено]


64

Очевидно, що Lisp є перевагою для AI , але мені не здається, що Lisp швидше, ніж Java, C # або навіть C. Я не майстер Lisp, але мені здається, що зрозуміти перевагу мені надзвичайно важко можна було б писати бізнес-програмне забезпечення в Ліспі.

І все ж це вважається мовою хакера.

Чому Пол Грехем виступає за Ліса? Чому ITA Software обрала Lisp для інших мов високого рівня? Яке значення вона має для цих мов?


20
Рядок "Я не думаю, що Lisp швидше, ніж Java, C # або насправді швидше, ніж C", дещо заплутаний. C, як правило, використовується як "швидкий код, тому що ви програмуєте близько до металу" - це орієнтир, який потрібно обіграти майже про все. Тепер Java та інші мови GC'd можуть перемогти її в деяких контекстах, наприклад, швидкість розподілу пам'яті / очищення. Але це речення все-таки здається трохи назад.
Майкл Х.

2
Lisp - мова вищого рівня, ніж ті, які ви згадали, тому, як правило, повільніше.
segfault

5
@Bo Tian: "мова вищого рівня" потребує однозначного визначення. Навіть якби він був, це звучить як непослідовник. (дякую @Mark)
Майк Данлаве

5
@BoTian "вищий рівень" не відповідає "повільнішому" за замовчуванням.

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

Відповіді:


78

Є кілька причин, над якими я працюю над тим, щоб стати компетентним для Common Lisp.

  1. Гомоїконічний код. Це дозволяє структурувати самомодифікуючий код.
  2. Макроси, що знають синтаксис Вони дозволяють переписати код котла.
  3. Прагматизм. Звичайний Lisp призначений для того, щоб зробити роботу робочими професіоналами. Як правило, більшість функціональних мов не є.
  4. Гнучкість. Він може робити багато різних речей, і все з розумною швидкістю.
  5. Бородавість. Реальний світ безладний . Прагматичне кодування закінчується тим, що потрібно використовувати або вигадувати безладні конструкції. Звичайний Лісп має достатню бородавість, щоб він міг виконувати речі.

Можливо, єдиною реальною причиною вибору проти «Common Lisp» є те, що стандартні бібліотеки датовані.

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


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

4
Крім того, я лише трохи використовував Lisp (Common Lisp), і загальне відчуття, яке я отримав, було те, що №2 було найбільшою вигодою для Lisp. Можливо, я думаю про неправильну парадигму, але не думаю, що в мене ніколи не було ситуації, коли самовиправляючий код був необхідний. Якщо у вас є конкретна причина використовувати його, то так, але в іншому випадку макроси здаються справжньою рисою вбивці. Правка: Щойно зрозумів, що це, власне, та сама особливість.
Метт Оленік

3
@Matt: Так. FWIW, я нещодавно натрапив на Nemerle, експериментальну мову CL # з CLR з макросами. nemerle.org . Варто заїхати в якийсь момент, я думаю, лише для досвіду.
Пол Натан

2
"Прагматизм. CL призначений для того, щоб виконувати роботу працюючими професіоналами. Більшість функціональних мов, як правило, не є.": Я не згоден з цим твердженням. Мене дуже цікавить Лісп і намагаюся приділити трохи часу, щоб його вивчити. Але я вважаю, що інші мови FP також дуже ефективні для "виконання справ", принаймні, це було моїм досвідом роботи зі Scala та Haskell.
Джорджо

1
"CL призначений для того, щоб зробити роботу робочими професіоналами. Більшість функціональних мов, як правило, не є.": Чи можете ви детальніше розглянути це? Особливо у другій частині речення. Чи можете ви назвати кілька прикладів?
Джорджіо

23

Мені подобається Лісп

  • єдиний, простий і елегантний спосіб представлення і коду, і даних.
  • унікальна точка зору, яка дає мені вирішальні 80 бонусних балів IQ на вирішення важких проблем (з підказкою капелюха до Алана Кей)
  • надзвичайно спритне, інтерактивне та розмовне середовище розвитку
  • безпрецедентна сила створювати та маніпулювати абстракціями

Програмування - це боротьба зі складністю. Абстракції - це єдиний ефективний інструмент боротьби з постійно зростаючою складністю (з нашим дуже обмеженим і постійним розміром черепа). Керувати абстракціями за допомогою Ліспа - це як мати джина з n + 1 побажаннями.


5
+1 для "Програмування - це боротьба зі складністю. Абстракції - це єдиний ефективний інструмент для боротьби зі зростаючою складністю (з дуже обмеженим і постійним розміром черепа)." (Хочеться, щоб я міг дати +10.)
Джорджіо

Що таке "надзвичайно спритне, інтерактивне та розмовне середовище розвитку"?
qed

6
Чи не повинні це бути (+ 1 n)бажаннями чи ще кращою практичністю (incf n)?
Reb.Cabin

21

Я вважаю, що правильна відповідь Ліспа є більш гномічною. Щось на кшталт: "Якщо вам доведеться просити, ви не готові".

Тоді, якщо хтось запитає далі, правильна відповідь або "так", якщо це питання / або питання, або "Ви не готові".


5
Пол Грехем цитує Луї Армстронга: "Якщо вам доведеться запитати, що таке джаз, ви ніколи не дізнаєтесь".
Джейсон Бейкер

25
+1. Хоча іноді фрази на кшталт "Якщо потрібно запитати, ти не готовий", змушують мене думати, що той, хто так говорить, просто не може пояснити
superM

5
@superM Функціональні мови Lisp та Lisp мають властивість того, що коли хтось їх вивчить, їх більше не можна пояснювати!
езотерик

18

Я думаю, що перевага Lisp у галузі штучного інтелекту (AI), про яку всі згадують, є дещо історичною випадковістю ... Lisp почався для / в AI, але це загальна мова.

Я вважаю, що швидкість виконання не є єдиним важливим аспектом мови (хоча я це робив один раз). Однак один із аспектів, який мені подобається у Lisp, - це те, що для мене він поєднує Python та C в одному. Я можу почати кодувати без декларацій і прототипу відразу і дуже швидко (час виконання та REPL дуже важливі для цього). Після того, як у мене щось працює, я додаю декларації типу і потроху «оптимізую» свій код. Дивно натискати клавішу SLIME і дивитися машинну мову, створену для функції, яка мене цікавить. У Python немає декларацій типу, тому я не можу отримати більшу швидкість, але в C, швидше все робити набагато болючіше. Lisp дуже корисний у цьому випадку.

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

Я не знаю жодної іншої мови, якою ви можете писати невеликі підмовні мови, щоб краще описати свою проблему з легкістю Lisp. У цьому полягає перевага, про яку говорить Пол Грехем у « Побитті середніх» . Це надзвичайна модульність і стислість. На Java мені потрібно написати багато сирого тексту, щоб висловити одну ідею. У Lisp я міг написати деякі макроси, які автоматично генерують цей код, а потім просто використовувати ці. У будь-якому випадку, ви повинні зрозуміти деякі приклади цього, а потім судити самі. Коли я це "побачив", мене здуло, і я все ще думаю, що Лисп є найбільшою мовою лише з цієї причини. Я завжди шукаю макроси на основних мовах, щоб побачити, чи відповідають вони потужності макросів Lisp, але на сьогоднішній день я їх не знайшов. Четверта частина - близька секунда.

Я закінчу декількома зауваженнями стосовно бізнес-програмного забезпечення:

  1. Для бізнес-програмного забезпечення потрібні бібліотеки, і хороші, і Lisp не в цьому добре. Зазвичай вони мені не потрібні, але коли я це роблю, мені доводиться вибирати з невеликого вибору неповного програмного забезпечення, яке використовує декілька людей. Я повинен сприяти виправленню цього, я думаю ...

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


7
Спробуйте clojure, це пісня на JVM. Таким чином, використовуючи JVM, ви можете використовувати всі речі Java.
Захарій К

@zachary: Є щонайменше 2 поширених реалізації Lisp на JVM. ABCL відносно зрілий.
Ларрі Коулман

Clojure - це 100% сумісний з Java (принаймні, я ніколи не знаходив нічого на Яві, що Clojure не міг би покращити, і таким чином, що явайці не можуть скаржитися). На Clojure сильно впливають кращі звичайні Лісп та кращі FP. З цим і SBCL, і CLisp, і Emacs, будь-який Ліспер сьогодні повинен відчувати себе королем.
Reb.Cabin

13

Мені не подобається Лісп.

(Мені подобається багато понять, які вона використовує, як вона робить потужні методи, доступні вдома, тощо).

Але я ніколи не був переконаний, що насправді користуюся ним ((хоча кілька людей намагалися ), оскільки переваги мови можна досягти за допомогою інших мов програмування (деякі безпосередньо, а деякі опосередковано), тому користі недостатньо щоб змусити мене витрачати час на його вивчення і миритися з жахливим синтаксисом.)))

Але так, з причин, яким це подобається деяким людям, перегляньте ці запитання щодо переповнення стека:

Напевно, є ще декілька у пов’язаних із ними питань.


26
Msgstr "Мислення з жахливим синтаксисом". Можливо, це було занадто давно, оскільки я був новичком Ліспа, але простота і регулярність синтаксису Lisp - це величезна особливість, оскільки саме це дозволяє мені розширити Lisp у собі. Я можу додати користувальницькі ітератори, можу додати нові конструкції "with-xxx", які автоматично очищаються після себе, щоб розробник не мав потреби і т. Д. Синтаксис - це особливість, а не помилка.
Майкл Х.

5
Для можливості розширення мови самостійно не потрібен синтаксис, обмежений півдесятка символів. Також: "Синтаксис - це особливість, а не помилка" ? - Я знаю. Я не називав це помилкою.
Пітер Бауфтон

8
Гаразд, як ви отримуєте переваги макросистеми? Скільки мов дозволяють побудувати для них об'єктно-орієнтоване розширення в одній досить короткій главі (Пол Ґрем, "Про Лісп").
Девід Торнлі

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

8
Але мати можливість легко переміщуватися між S-exps здається величезним ... Тоді, що стосується дужок, мені подобається така цитата: " Дужки"? Які дужки? Я не помітив жодних дужок з мого першого місяця програмування Lisp. Мені подобається запитати людей, які скаржаться на дужки в Ліспі, чи їх турбують усі пробіли між словами в газеті "- Кен Тілтон
Седрік Мартін,

9

Я інтерпретую "Lisp" як " Common Lisp "; Я не сумніваюся, інші відповіді скажуть " Схема ". (Підказка: Лісп - це сім'я мов.)

Що означає "швидше"? З точки зору часу, необхідного для виконання еталону, ні, це не швидше, ніж C ( але це може бути ).

"Швидкий" з точки зору того, як довго потрібно Joe Random Hacker, щоб написати робочу програму або виправити помилку у великій програмній системі? Майже напевно.

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


Хіба це не було б дивовижно, якби ви могли написати у своїй редакторі невелику функцію, яка негайно зробить щось із рештою вашого коду? Або ти вже можеш це зробити?
Позначити С

4
@Mark: Я думаю, ви описуєте Emacs.
Ферруччо

@Ferruccio Я подумав, що спочатку потрібно запустити свій код.
Марк C

2
@Mark C: Ну, вам потрібно виділити регіон, а потім M-x eval-region(або eval-buffer), але це все.
Френк Ширар

1
@MarkC: Крім того, якщо ви знаходитесь в буфері нуля , ви можете просто написати свою функцію і натиснути C-j(що морально еквівалентно для введення), і воно набере чинності негайно.
Тихон Єлвіс

7

Мені подобається Лісп, тому що це відмінний засіб для висловлення своїх думок. Присудок для моєї улюбленої мови - «Якби я міг вибрати що-небудь, щоб висловити ідеї, що б це було?». В даний час це Lisp * ( Схема конкретна), і я вважаю, що я виписую в ній замітки про програмування. Як зазначає ІРЛ , папір та ручка. Навіть коли я замислююся над програмами, які мені потрібно реалізувати в PHP або Ruby або Python.

Це не трюк, якого я навчив себе, або щось, що я роблю для надійності ботаника (ніхто все одно не бачить всередині мого ноутбука); просто Ліпп для мене настільки природніше замислитися, ніж будь-яка з альтернатив, і будь-яка мова, яка резонує з тобою, що глибоко є тобою, котрий є скарбом.

* Як і виноска, Хаскелл досить швидко закриває прогалину, коли я дізнаюся більше про це.


6

Питання - це влада. Потужність = Робота (функціональність програми) / Час

"Нам не вдалося перемогти програмістів Lisp; ми були після програмістів на C ++. Багато з них нам вдалося перетягнути приблизно на півдорозі до Ліспа".

- Гай Стіл, співавтор спец Java

Накресліть якусь криву між C ++ та Java. Продовжуйте рух, і в якийсь момент уздовж лінії ви знайдете Лісп.


2
Проблема тут полягає в тому, що ви втрачаєте багато C ++ функціоналу, переходячи на Java, але забираєте його знову (часто в поліпшеному вигляді) під час переходу до Lisp.
Девід Торнлі

@DavidT Питання ТА у цій точній цитаті має посилання на джерело (пошук "цитувати"). Цитата не повинна сприйматись так серйозно.
Марк C

@David: Як макроси. Це не лише те, що вони залишили їх на шляху до Яви (а значить, і на C #), але і зробили їх відсутність "чеснотою". Макроси дуже зручні, якщо я будую DSL на основі базової мови.
Майк Данлаве

@Mike Dunlavey: Мені дуже не подобаються макроси в C ++ (чорт, я не люблю їх у C, але у мене там немає великого вибору). Мені дуже подобаються макроси в Common Lisp. Ви знаєте, я думаю, що моя проблема з цим коментарем полягає в тому, що мені подобається як C ++, так і Common Lisp набагато більше, ніж мені подобається Java.
Девід Торнлі

@David: Я з вами 100% на макроси в Ліспі. У C / C ++ вони потворні і схильні до зловживання, але про людське око ( правда , бахрома ) речей , які я роблю, вони так набагато краще , ніж нічого. Звичайно, коли я це роблю на C ++, це дуже добре може розцінюватися як зловживання, але в Ліспі це сприймається як розумний. Піди розберися.
Майк Данлаве

6

Пол Ґрехем свого роду відповідає на це запитання сам у What What Lisp Different .

Майте на увазі, що він використовував його для свого стартапу в середині 1990-х, тому Python та Ruby насправді не були зрілі в той момент (а може, навіть не народилися).

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

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

Python не має точно такої функції; вам доведеться визначити функції та передавати їх навколо. У Рубі, здається, є блоки, можливо, це дещо обмежено порівняно з тим, що може зробити Лісп (я не впевнений).


Стаття Пола Грегама цікава тим, що, окрім кількох предметів, більшість мов, як видається, сьогодні мають функції, які він перераховує. Тож, можливо, Лісп в ті часи був більш переконливим; сьогодні це цінніше, як мова, яка запровадила ці риси?
Андрес Ф.

AST як синтаксис мови все ще є доменом Lisp. Мені невідомо про мову, що не використовується, коли макроси мають доступною цілою мовою під час компіляції (Так, компілятор, в основному, передає макро виклик до визначення макросу, яке є програмою Lisp самостійно. Ви хочете робити http і db в макросі під час компіляції. ?)
przemo_li

6

У мене в минулому була реакція на коліна на схему , але зараз я готовий дати постріл Ліспу ( Clojure , власне).

Розумієте, протягом багатьох років я зібрав шматочки мов, такі як Java, C #, C ++, Python, і все більше не викликає труднощів.

Clojure має багато обіцянок, видається дуже чистим і може вирішити багато реальних проблем. Важливим приводом для чистої мови, як Clojure, є поява багатоядерних комп'ютерів.

Так, LISP!

EDIT: ITA Software була заснована міськими містами, і Scheme / Lisp була єдиною мовою, яку вивчали багато хто з програм MIT. Якщо бути справедливим, можна скористатись алгоритмами Lisp гарячої заміни на працюючій виробничій системі, що є величезним плюсом.


8
Re: Речі вже не складні --- дайте Хаскелл піти і дайте нам знати, що ви думаєте. Крім того, ви завжди можете спробувати навчитися деяких INTERCAL для зміни!
Марк C

3
@ Марк С, вибачте, але я не торкаюся INTERCAL. Виклик - не єдиний критерій; воно також має бути здатним швидко вирішувати реальні проблеми. Принаймні Хаскелл багато хто використовується і любить.
робота

Це було жартома, звичайно.
Марк C

1
Оновлення запущеного коду (ретельно!) На виробничому сервері - одна з радощів Lisp, так. Пітон, принаймні, коли я грався з ним, не зробив цього добре; вам доведеться вручну перекомпілювати всі функції / методи, які посилалися на ваші зміни, в той час як усі звичайні реалізації Lisp обробляють це для вас. Я використовую ту саму силу для розробки: пишіть, тестуйте щось, редагуйте, тестуйте - цикл компіляції немає, і ви можете взяти ваші інтерактивні тести та перетворити їх на одиничні тести, якщо хочете.
Майкл Х.

@Job я забув ... PLEASE?
Марк C

6

Те, що мені подобається у Ліппі, це те, що він виходить за рамки парадигм. Одні скажуть, що Лісп функціональний, інші скажуть, що це декларативний, а інші скажуть, що це багатопарадигма. Я думаю, що все це пропускає суть. Коли ви використовуєте Lisp, парадигма вже не є обмеженням.

Хочете об’єкти? Ви можете їх мати. Хочете функціонального програмування? Ви можете це мати. Хочете логічного програмування Prolog ? Напишіть кілька макросів. Хочете декларативного програмування у стилі SQL? Дій. Хочете скористатись парадигмою, яка ще не була винайдена? Я впевнений, що це можна зробити в Ліспі.

Окрім мов, подібних до Forth , я ще не бачив, як інша мова пропонує такий рівень гнучкості.


+1 Мульти-парадигмальне програмування, десятиліттями раніше F #, дуже хороший момент.
Увімкнення

Я б хотів, щоб я міг підняти це десять разів. Немає ложки ... немає парадигми ... Це з великою точністю описує моє відчуття щодо Common Lisp :)
MadPhysicist

5

"Швидше" не просто виміряти річ - це дійсно залежить від того, який аспект ви оцінюєте. Залежно від завдання та реалізації Lisp, швидкість може наближатися до C. Подивіться на Великий бенчмаркінг Shoot-Out, щоб зануритися для деталей. Реалізація SBCL Lisp нарівні з сервером Java 6 і значно швидша, ніж Ruby або Python.

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

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


Якби я починав свіжий сьогодні, я б, мабуть, вибрав Рубі - він успадковував велику частину природи Ліспа, але в ньому є більш сучасні бібліотеки та єдиний доброзичливий диктатор, який веде його вперед. Але це не було питання, яке задав ОП.
Майкл Х.

Я насправді вибирав рубін, щоб почати, і зараз я намагаюся дізнатися новийLisp.
philosodad

5

Я вивчаю Lisp ( newLisp ) з кількох причин.

Причина номер одна: Лісп змушує мене думати інакше, що робить мене кращим кодером Рубі.

Дуже незручно робити речі певними способами в Lisp, наприклад, вкладені ітерації для проходження кількох списків. Тож воно змушує мене використовувати інші речі, наприклад map. У моїй улюбленій мові, Рубі, є той самий метод карт, але я не завжди ним користуюся, тому що він незнайомий: я навчився робити речі, використовуючи погану техніку, і коли мова підтримує цю техніку, я продовжую її використовувати.

Причина номер два: Лісп практичний і має хороші сучасні бібліотеки.

Існує дуже приємна, легка веб-рамка для новогоLisp під назвою dragonfly . Це дозволяє мені використовувати новий код Lisp замість PHP для деяких завдань. Мені не дуже подобається PHP, і newLisp здається більш цікавим для цієї конкретної задачі, ніж Рубі.

Причина номер три: Лісп синтаксично та концептуально узгоджується.

Для мене це велика різниця між Ruby і Python, послідовність.


+1: "Лисп синтаксично та концептуально послідовний". Це дуже важлива особливість мови. Деяким погано розробленим мовам не вистачає послідовності, вони схожі на велику колекцію ідіом, зібраних у певному порядку (я маю на увазі одну мову, але не буду називати її :-)). Лісп у цьому відношенні дуже послідовний. Як тільки у мене з’явиться певний час, я обов'язково спробую це навчитися.
Джорджо

4

Чи можете ви сказати "Лояльність до бренду"?

Я почав у Фортран. Я любив це.

Я перейшов на Лісп. Спочатку я ненавидів це. Тоді я навчився любити це і ненавидіти Фортран.

Пізніше Pascal, C, C ++, різні асемблери, C #. (Насправді я не люблю C #.)

Я думаю, я непостійний?


4

Коли Лисп був створений, вони почали з математики, а не з інформатики (яка ще не існувала ще). І команда Ліспа дійсно отримала деякі речі. У 1960 році в Ліспі було збирання сміття! Вони дійсно зробили чудову роботу.

Я думаю, що пісня Вічного вогню висвітлює її.


Так, очевидно, Лісп був першою мовою GCed.
Марк C

2

Велика нічия - громада. З часу винайдення мови Lisp отримав розмаїття для найбільш амбітних і яскравих розробників. Де б дослідники не намагалися вирішити проблеми, які ніколи не були вирішені, ви, швидше за все, знайдете Лісп, як у дослідженні штучного інтелекту (AI), комп'ютерному зорі, плануванні, представленні знань та комплексній евристичній оптимізації. Мова піддається вирішенню проблем одночасно знизу вгору і зверху вниз, що, здається, допомагає протистояти найсильнішим викликам.

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

Система OOP, CLOS , знаходиться у своєму класі з точки зору гнучкості. Повернутися до рудиментарного C ++ / Java / C # OOP дуже важко після того, як відчути смак.  Шаблони дизайну GoF 5 стають непотрібними, оскільки їх можна виразити просто та безпосередньо.

Мова не має жодного корпоративного власника та жодної остаточної реалізації, хоча він має стандарт ANSI з багатьма відповідними реалізаціями. Основні нові впровадження відбуваються кожні десятиліття, і старі залишаються досить активними. Експерти можуть довго планувати використовувати свої спеціалізовані знання. Це спричиняє деяке анархічне тертя та роздробленість громади, але це також означає, що килим не можна витягнути, а мова не може стати неминучою з корпоративних чи проектних політичних причин. Завжди працює над декількома комерційними та відкритими версіями. Орієнтовані на більшу ефективність регулярно орієнтуються на 2x-коефіцієнт найшвидших імперативних мовних реалізацій, що значно фінансуються.

Ахіллесова п'ята ранньої комерціалізації Ліспа - це пам'ять пам’яті для забезпечення як типів безпеки мови, так і вдосконалених середовищ розробки програмного забезпечення, які вони включали, з неймовірними можливостями, такими як повна онлайн-документація, включаючи графіку. Машина Lisp з символікою 64 Мб не була ефективною у порівнянні з робочою станцією 8 Мб. Сьогодні ціни на оперативну пам’ять знизилися і існує неабиякий інтерес до мов Lisp, особливо зважаючи на те, що основні мови Java, C #, PHP сьогодні просунулися лише мінімально порівняно з тими, що були 30 років тому.

Сьогодні сучасні мови конкурують з Lisp за розумну передачу з розумними розробниками: Python, Lua , Erlang , Haskell і OCaml . Але жоден не пропонує однакового поєднання зрілості, адаптивності, декількох стандартів та швидкості.


1

Я насправді не роблю Лисп. Але місце, в якому я працюю, робить кінцеві елементи з мільйонами ліній переважно Fortran. Хлопець, якого я найбільше поважаю щодо обчислювальних матеріалів (кодує механіку обчислювальної рідини ), вважає, що ідеальною комбінацією є Lisp зовні (головним чином, тому що ви уникаєте безладних проблем із управлінням пам’яттю) та Fortran за алгоритми низького рівня (Fortran найкраще використовувати векторні можливості SSE / AVX , і ми вважаємо, що цей потенціал навряд чи закриється).

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