Чем полезен Лисп? [закрыто]

64

Очевидно, что Lisp является преимуществом для ИИ , но мне не кажется, что Lisp немного быстрее, чем Java, C # или даже C. Я не владелец Lisp, но мне невероятно трудно понять преимущество можно было бы написать при написании программного обеспечения для бизнеса на Лиспе.

И все же это считается языком хакера.

Почему Пол Грэм защищает Лисп? Почему ITA Software выбрала Lisp среди других языков высокого уровня? Какое значение это имеет по сравнению с этими языками?

Питер Мортенсен
источник
20
Строка «Я не думаю, что Lisp работает быстрее, чем Java, C # или, по сути, быстрее, чем C», несколько сбивает с толку. C обычно считается стандартом для «быстрого кода, потому что вы программируете близко к металлу» - это эталон, который можно превзойти практически во всем. Теперь Java и другие языки GC могут превзойти его в некоторых контекстах, например, в скорости выделения / очистки памяти. Но, тем не менее, это предложение кажется немного отсталым.
Майкл Х.
2
Лисп - это язык более высокого уровня, чем те, что вы упомянули, поэтому он обычно медленнее.
segfault
5
@ Бо Тянь: «язык более высокого уровня» нуждается в однозначном определении. Даже если бы он был, это звучит как несеквитур. (спасибо @Mark)
Майк Данлавей
5
@BoTian «более высокий уровень» не равен «медленнее» по умолчанию.
24
Лисп существует, чтобы показать, насколько ошибочен любой другой дизайнер языков.

Ответы:

78

Есть несколько причин, по которым я работаю над освоением Common Lisp.

  1. Гомоиконный код. Это позволяет структурировать самоизменяющийся код.
  2. Синтаксические макросы. Они позволяют переписать стандартный код.
  3. Прагматизм. Common Lisp предназначен для работы профессионалов. Большинство функциональных языков, как правило, нет.
  4. Гибкость. Он может делать много разных вещей, все на разумных скоростях.
  5. Wartiness. Реальный мир грязный . Прагматическое кодирование приводит к тому, что приходится либо использовать, либо придумывать грязные конструкции. Обычный Лисп обладает достаточной настороженностью, чтобы справляться с делами.

Возможно, единственная реальная причина выбора против Common Lisp состоит в том, что стандартные библиотеки устарели.

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

Пол Натан
источник
8
Синтаксис может быть проблемой, если он значительно влияет на читаемость или удобочитаемость. Я не думаю, что это относится к Лиспу. Хороший редактор или IDE может сделать достаточно хорошую подсветку синтаксиса и сопоставление паренов, чтобы не иметь большого значения.
Мэтт Оленик
4
Кроме того, я только немного использовал Lisp (Common Lisp), и общее ощущение, которое я получил, было то, что # 2 было самым большим преимуществом для Lisp. Может быть, я думаю в неправильной парадигме, но я не думаю, что у меня когда-либо была ситуация, когда был необходим самоизменяющийся код. Если у вас есть конкретная причина для его использования, то да, но в противном случае макросы кажутся реальной функцией убийцы. Редактировать: Просто понял, что это, на самом деле, та же самая особенность.
Мэтт Оленик
3
@Matt: Да. FWIW, я недавно столкнулся с Nemerle, C # -ish CLR экспериментальным языком с макросами. nemerle.org . Думаю, в какой-то момент стоит ткнуть, просто ради опыта.
Пол Натан
2
«Прагматизм. CL предназначен для выполнения работы работающими профессионалами. Большинство функциональных языков, как правило, нет.»: Я не согласен с этим утверждением. Я очень заинтересован в Лиспе и пытаюсь посвятить некоторое время его изучению. Но я считаю, что другие языки FP также очень эффективны для «достижения цели», по крайней мере, таков мой опыт работы со Scala и Haskell до сих пор.
Джорджио
1
«CL предназначен для работы профессионалов. Как правило, большинство функциональных языков - нет.»: Можете ли вы уточнить это? Особенно по второй части предложения. Можете назвать несколько примеров?
Джорджио
23

Мне нравится Лисп за его

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

Программирование - это боевая сложность. Абстракции - единственный эффективный инструмент для борьбы со все возрастающей сложностью (с нашим очень ограниченным и постоянным размером черепа). Управлять абстракциями с помощью Lisp - все равно что иметь джина с n + 1 желанием.

оборота Маглоб
источник
5
+1 за «Программирование - это борьба со сложностью. Абстракции - единственный эффективный инструмент для борьбы со все возрастающей сложностью (с нашим очень ограниченным и постоянным размером черепа)». (Я хотел бы дать +10.)
Джорджио
Что такое «чрезвычайно гибкая, интерактивная и диалоговая среда разработки»?
Qed
6
Разве это не должно быть (+ 1 n)желаниями или даже лучшей практичностью (incf n)?
Reb.Cabin
21

Я считаю, что правильный ответ на Лисп более гномичен. Что-то вроде: «Если вам нужно спросить, вы не готовы».

Тогда, если кто-то задает вопросы дальше, правильный ответ - «да», если это вопрос или « или », или «Вы не готовы».

гленатрон
источник
5
Пол Грэм цитирует Луи Армстронга: «Если вы спросите, что такое джаз, вы никогда не узнаете».
Джейсон Бейкер,
25
+1. Хотя иногда такие фразы, как «Если ты должен спросить, ты не готов», заставляют меня думать, что тот, кто говорит так, просто не может объяснить
superM
5
@superM Lisp и Lisp-подобные функциональные языки обладают тем свойством, что как только кто-то их изучает, он уже не может их объяснить!
Эзотерик
18

Я думаю, что преимущество Lisp в области искусственного интеллекта (ИИ), которое все упоминают, является исторической случайностью ... Lisp начал для / в AI, но это язык общего назначения.

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

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

Я не знаю другого языка, на котором вы могли бы писать небольшие подъязыки, чтобы лучше описать вашу проблему с помощью Лисп. Это то преимущество, о котором говорит Пол Грэм в « Обыгрывании средних» . Это предельная модульность и лаконичность. В Java я должен написать много необработанного текста, чтобы выразить одну идею. В Лиспе я мог написать несколько макросов, которые генерируют этот код автоматически, а потом просто использовать их. Во всяком случае, вы должны понять некоторые примеры этого, а затем судить сами. Когда я «увидел» это, я был поражен, и я все еще думаю, что Лисп - лучший язык только по этой причине. Я всегда ищу макросы в основных языках, чтобы увидеть, соответствуют ли они мощности макросов Lisp, но на сегодняшний день я не нашел ни одного. Четвертая близкая секунда.

Я закончу с парой критических замечаний, касающихся программного обеспечения для бизнеса:

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

  2. Деловое программное обеспечение обычно создается большими группами людей, и я думаю, что общение может быть затруднено с помощью макросов, поскольку они в основном меняют язык. Многим программистам удобнее обнаруживать определенные шаблоны в коде, даже если текст программы длиннее и повторяется. Я предполагаю, что в ITA у них есть некоторые правила, касающиеся макросов, или у них есть огромная библиотека макросов, которая облегчает совместную работу (или, проще говоря, все программисты являются экспертами в Lisp).

Pau Fernández
источник
7
Попробуйте clojure, это ошибка на JVM. Таким образом, используя JVM, вы можете использовать все, что связано с Java.
Захари К
@zachary: В JVM есть как минимум 2 реализации Common Lisp. ABCL относительно зрелый.
Ларри Коулман
Clojure на 100% совместим с Java (по крайней мере, я никогда не нашел в Java ничего такого, что Clojure не может улучшить, и таким образом, что Javaists не может жаловаться). Clojure находится под сильным влиянием лучших Common Lisp и лучших FP. Учитывая это, SBCL, CLisp и Emacs, любой Лиспер в наши дни должен чувствовать себя королем.
Реб. Кабин
13

Мне не нравится Лисп.

(Мне действительно нравятся многие из концепций, которые он использует, как он делает мощные методы доступными изначально и так далее.

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

Но да, по причинам, которые нравятся некоторым людям, проверьте эти вопросы переполнения стека:

Наверное, есть еще несколько вопросов, связанных с ними.

Peter Boughton
источник
26
"Мириться с ужасающим синтаксисом". Может быть, прошло слишком много времени с тех пор, как я был новичком в Lisp, но простота и регулярность синтаксиса Lisp - огромная особенность, поскольку именно это позволяет мне расширять Lisp сам по себе. Я могу добавить пользовательские итераторы, я могу добавить новые конструкции контекста «with-xxx», которые автоматически очищаются после себя, поэтому разработчик не должен и т. Д. Синтаксис - это функция, а не ошибка.
Майкл Х.
5
Возможность расширения языка сама по себе не требует синтаксиса, ограниченного полдюжиной символов. Также: «Синтаксис - это функция, а не ошибка» ? - Я знаю. Я не назвал это ошибкой.
Питер Боутон
8
Хорошо, как вы получаете преимущества макросистемы? Сколько языков позволяют вам построить объектно-ориентированное расширение для них в одной достаточно короткой главе (Пол Грэм, «На Лиспе»).
Дэвид Торнли
6
Синтаксис не более ужасен, чем другие языки. Я обнаружил, что скобки визуально «исчезают» через некоторое время. С хорошим отступом, код легко читается.
Барри Браун
8
Но способность легко перемещаться между S-EXPS кажется огромной ... Тогда, что касается скобок, мне нравится следующая цитата: круглые скобки? Какие скобки? Я не заметил никаких скобок с моего первого месяца программирования на Лиспе. Мне нравится спрашивать людей, которые жалуются на круглые скобки в Лиспе, беспокоит ли их все пробелы между словами в газете "- Кен Тилтон
Седрик Мартин
9

Я буду интерпретировать «Лисп» как « Общий Лисп »; Я не сомневаюсь, что другие ответы скажут " Схема ". (Подсказка: Лисп это семья языков.)

Что значит «быстрее»? С точки зрения времени, необходимого для запуска теста, нет, он не быстрее, чем C ( но это может быть ).

«Быстро» с точки зрения того, сколько времени потребуется Джо Рэндом Хакеру, чтобы написать работающую программу или исправить ошибку в большой программной системе? Почти наверняка.

Что касается этого хакера, я использую его, потому что я хочу писать код, а не шаблон. Я хочу написать что-то один раз , а не постоянно повторяться. И я хочу взаимодействовать с программой, пока я пишу ее.

Frank Shearar
источник
Разве это не было бы замечательно, если бы вы могли написать небольшую функцию внутри вашего редактора, которая бы немедленно сделала что-то для остальной части вашего кода? Или ты уже можешь это сделать?
Марк С
4
@Mark: я думаю, что вы описываете Emacs.
Ферруччо
@Ferruccio Я думал, что сначала тебе нужно запустить свой код.
Марк С
2
@ Марк C: Ну, вам нужно выделить регион, а затем M-x eval-region(или eval-buffer), но это все.
Фрэнк Шеарар
1
@MarkC: Кроме того, если вы находитесь в пустом буфере, вы можете просто написать свою функцию и нажать C-j(что морально эквивалентно вводу), и она вступит в силу немедленно.
Тихон Джелвис
7

Мне нравится Лисп, потому что это отличная среда для выражения моих мыслей. Предикат для моего любимого языка: «Если бы я мог выбрать что-нибудь для выражения идей, что бы это было?». В настоящее время это Lisp * ( конкретная схема ), и я пишу в нем заметки по программированию. Как и в реале , бумага и ручка заметки. Даже когда я думаю о программах, мне нужно реализовать их на PHP, Ruby или Python.

Это не уловка, которой я учил себя, или что-то, что я делаю для надежности ботаника (в любом случае никто не видит внутри моего блокнота); просто для меня Lisp гораздо более естественен, чем любая из альтернатив, и любой язык, который резонирует с вами и глубоко ценит вас.

* Как сноска, Хаскелл довольно быстро сокращает разрыв, когда я узнаю больше о нем.

Inaimathi
источник
6

Проблема в силе. Мощность = Работа (функциональность программы) / Время

«Мы не стремились победить программистов на Лиспе; мы преследовали программистов на С ++. Нам удалось перетащить многих из них примерно на полпути к Лиспу».

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

Постройте некую кривую между C ++ и Java. Продолжайте, и в какой-то момент вдоль линии вы найдете Лисп.

compman
источник
2
Проблема здесь в том, что вы теряете большую часть функциональности C ++, переходя на Java, но поднимаете ее снова (часто в улучшенной форме) при переходе на Lisp.
Дэвид Торнли
@DavidT В SO вопросе по этой точной цитате есть ссылка на источник (ищите "цитировать"). Цитата не должна быть воспринята так серьезно.
Марк С
@ Давид: как макросы. Они не просто оставили их при переходе на Java (и, следовательно, на C #), но и сделали их недостаток «добродетелью». Макросы действительно удобны, если я строю DSL поверх базового языка.
Майк Данлавей
@ Майк Данлавей: Мне действительно не нравятся макросы в C ++ (черт, мне они не нравятся в C, но у меня там нет большого выбора). Мне очень нравятся макросы в Common Lisp. Вы знаете, я думаю, что моя проблема с этим комментарием в том, что я люблю и C ++, и Common Lisp гораздо больше, чем Java.
Дэвид Торнли
@ Дэвид: я с тобой 100% на макросах в Лиспе. В C / C ++ они уродливы и склонны к злоупотреблению, но для вида ( правда , бахрома ) вещей , которые я делаю, они так гораздо лучше , чем ничего. Конечно, когда я делаю это в C ++, это вполне может рассматриваться как злоупотребление, но в Лиспе это считается теплым умом. Пойди разберись.
Майк Данлавей
6

Пол Грэм как бы сам отвечает на этот вопрос в книге «Чем отличается Лисп» .

Имейте в виду, что он использовал его для своего стартапа в середине 1990-х годов, поэтому Python и Ruby не были действительно зрелыми (или, возможно, даже не родились).

В основном, Lisp обладает всеми преимуществами динамических языков, и я думаю, что для большинства современных веб-приложений Python и Ruby довольно хороши, и у них есть преимущество фреймворков, документации и динамичных сообществ.

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

Python точно не имеет этой функции; вам нужно определить функции и передать их. В Ruby, похоже, есть блоки, возможно, он несколько ограничен по сравнению с тем, что может делать Lisp (я не уверен).

hasen
источник
Статья Пола Грэхема интересна тем, что, за исключением нескольких пунктов, большинство языков в наши дни, кажется, имеют функции, которые он перечисляет. Так что, может быть, в те дни Лисп был более убедительным; в настоящее время это более ценно, как язык, который представил эти функции?
Андрес Ф.
AST как синтаксис языка по-прежнему является доменом Lisp. Я не знаю ни о каком языке, не являющемся лисписом, где у макросов доступен весь язык во время компиляции (да, компилятор в основном вручную вызывает вызов макроса для определения макроса, который является программой на Лиспе. Вы хотите использовать http и db в макросе во время компиляции ?)
przemo_li
6

В прошлом у меня была коленная реакция на Схему , но теперь я готов дать Лиспу (на самом деле Clojure ) шанс.

Видите ли, за эти годы я выбрал немного языков, таких как Java, C #, C ++, Python, и все больше не вызывает проблем.

У Clojure много обещаний, он выглядит очень чистым и может решить многие реальные проблемы. Ярким аргументом в пользу чистого языка, такого как Clojure, является появление многоядерных компьютеров.

Yay LISP!

РЕДАКТИРОВАТЬ: ITA Software была основана выпускниками MIT, и Scheme / Lisp был единственным языком, который изучали многие выпускники MIT. Чтобы быть справедливым, можно использовать горячую замену алгоритмов Lisp на работающей производственной системе, что является огромным плюсом.

Работа
источник
8
Re: Вещи больше не сложные - дайте Haskell попробовать и дайте нам знать, что вы думаете. Кроме того, вы всегда можете попробовать выучить ИНТЕРКАЛ для разнообразия!
Марк C
3
@ Марк С, извините, но я не трогаю INTERCAL. Вызов не единственный критерий; он также должен уметь быстро решать реальные проблемы. По крайней мере, Haskell используется и любим многими.
Работа
Это было в шутку, конечно.
Марк С
1
Обновление запущенного кода (осторожно!) На рабочем сервере - одна из радостей Lisp, да. Python, по крайней мере, когда я играл с ним, делал это не очень хорошо; вам придется вручную перекомпилировать все функции / методы, которые ссылаются на ваши изменения, в то время как все реализации Common Lisp справятся с этим за вас. Я использую ту же мощь для разработки: писать, тестировать что-то, редактировать, тестировать - без цикла компиляции, и вы можете пройти интерактивные тесты и превратить их в модульные тесты, если хотите.
Майкл Х.
@ Джоб, я забыл ... PLEASE?
Марк С
6

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

Хотите объекты? Вы можете иметь их. Хотите функциональное программирование? Ты можешь иметь это. Хотите Пролог -Style логического программирования? Напишите несколько макросов. Хотите декларативное программирование в стиле SQL? Действуй. Хотите использовать какую-то парадигму, которая еще не была изобретена? Я уверен, что это можно сделать в Лиспе.

Помимо Forth- подобных языков, мне еще предстоит увидеть другой язык, предлагающий такой уровень гибкости.

Jason Baker
источник
+1 Программирование нескольких парадигм, десятилетия впереди F #, очень хороший момент.
Orbling
Я хотел бы поднять это десять раз. Там нет ложки ... нет никакой парадигмы ... Это описывает мои чувства к Common Lisp с большой точностью :)
MadPhysicist
5

«Быстрее» не просто измерить - это действительно зависит от того, какой аспект вы сравниваете. В зависимости от задачи и реализации Lisp, скорости могут приближаться к C. Посмотрите на Великий сравнительный тестовый перестрелку, чтобы погрузиться в детали. Реализация Lisp в SBCL наравне с Java 6 Server и значительно быстрее, чем Ruby или Python.

Но чистая скорость - не главная причина выбора языка программирования - если бы это было так, мы бы все еще программировали на ассемблере , верно? Для меня ежедневная радость Lisp заключается в том, что код компилируется, но мне не нужно закрывать приложение, перекомпилировать все, а затем начинать работать с нуля. Вместо этого я могу изменить одну функцию, и это изменение вступит в силу везде, и я сразу же смогу увидеть эффект в своем приложении. Более того, этот очень быстрый подход «пиши, тестируй, пиши больше, тестируй больше» значительно упрощает немедленное тестирование во время написания кода (а затем вы можете превратить эти интерактивные тесты в модульные тесты позже).

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

хедрон
источник
Если бы я только начинал сегодня, я бы выбрал Ruby - он унаследовал большую часть природы Lisp, но у него есть более современные библиотеки и один доброжелательный диктатор, продвигающий его вперед. Но это был не тот вопрос, который задал ОП.
Майкл Х.
Я действительно выбрал ruby ​​для начала, и теперь я пытаюсь выучить newLisp.
Philododad
5

Я изучаю Lisp ( newLisp ) по нескольким причинам.

Причина первая: Lisp заставляет меня думать иначе, что делает меня лучшим Ruby-кодером.

Кажется очень неловким делать что-то определенным образом в Лиспе, например, вложенные итерации для просмотра нескольких списков. Так что это заставляет меня использовать другие вещи, как map. У моего любимого языка, Ruby, есть тот же метод карт, но я не всегда использую его, потому что он незнаком: я научился делать вещи, используя плохую технику, и когда язык поддерживает эту технику, я продолжаю использовать ее.

Причина вторая: Lisp практичен и имеет хорошие современные библиотеки.

Для newLisp есть очень приятный и легкий веб-фреймворк, называемый dragonfly . Это позволяет мне использовать код newLisp вместо PHP для некоторых задач. Я не очень люблю PHP, и newLisp кажется более увлекательным для этой конкретной задачи, чем Ruby.

Причина третья: Lisp синтаксически и концептуально согласован.

Для меня это большая разница между Ruby и Python, согласованность.

философия
источник
+1: «Лисп синтаксически и концептуально согласован». Это очень важная особенность языка. Некоторым плохо разработанным языкам не хватает согласованности, они похожи на большую коллекцию идиом, собранных в каком-то порядке (я имею в виду один язык, но я не буду его называть :-)). Лисп в этом отношении очень последовательный. Как только у меня будет время, я обязательно постараюсь научиться этому.
Джорджио
4

Можете ли вы сказать «лояльность к бренду»?

Я начал в Фортране. Я люблю это.

Я перешел на Лисп. Сначала я ненавидел это. Тогда я научился любить его и ненавидеть Фортран.

Позже Паскаль, C, C ++, различные ассемблеры, C #. (На самом деле я не люблю C #.)

Я думаю, я ненадежен?

Майк Данлавей
источник
4

Когда был создан Lisp, они начали с математики, а не с компьютерных наук (которых на самом деле еще не было). И команда Lisp поняла некоторые вещи действительно правильно. У Лиспа была сборка мусора в 1960 году или около того! Они действительно проделали отличную работу.

Я думаю, что песня The Eternal Flame охватывает ее.

Zachary K
источник
Да, очевидно, Лисп был первым языком GCed.
Марк С
2

Большая ничья - это сообщество. С момента изобретения языка Lisp привлекал самых амбициозных и ярких разработчиков. Везде, где исследователи пытаются решить проблемы, которые никогда не были решены, вы, вероятно, найдете Лисп, например, в исследованиях искусственного интеллекта (ИИ), компьютерном зрении, планировании, представлении знаний и сложной эвристической оптимизации. Язык поддается решению проблем как снизу вверх, так и сверху вниз одновременно, что, похоже, помогает в решении самых сложных задач.

Расширяемый синтаксис с помощью макросов означает, что редко требуется расширять определение языка. Многое из того, что потребует расширения языка в более ограниченном языке, - это просто макрос с Лиспом. Таким образом, программисты на Лиспе могут свободно использовать заново изобретенные концепции языка без нового языкового стандарта и без необходимости реального снижения скорости. На базовом уровне, запечатывание стандартного кода становится ненужным из-за небольших расширений. Совершенно новые идеи в потоке управления, такие как унификация в стиле Prolog, реализуются эффективно и компактно в качестве расширений.

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

У языка не было единого корпоративного владельца и единой окончательной реализации, хотя он имеет стандарт ANSI со многими соответствующими реализациями. Крупные новые реализации появляются каждые десять лет, а старые все еще довольно активны. Специалисты могут планировать использовать свои специализированные знания еще долго. Это действительно вызывает некоторое анархистское трение и фрагментацию сообщества, но это также означает, что ковер не может быть вырван, и язык не может стать умирающим по корпоративным или проектным политическим причинам. Всегда есть несколько коммерческих реализаций и реализация с открытым исходным кодом. Те, кто больше ориентирован на производительность, регулярно сравнивают с 2-кратным коэффициентом самых быстрых, хорошо финансируемых императивных языковых реализаций.

Ахиллесова пята ранней коммерциализации Lisp - это занимаемая памятью область, в которой учитывались как функции безопасности типов языка, так и расширенные среды разработки программного обеспечения, которые они включали, с невероятными функциями, такими как полная онлайн-документация, включая графику. Машина Symbolics Lisp объемом 64 МБ оказалась недешевой по сравнению с рабочей станцией Sun объемом 8 МБ. Сегодня цены на оперативную память упали, и существует огромный интерес к языкам Lisp, особенно с учетом того, что основные языки Java, C #, PHP сегодня продвинулись лишь минимально по сравнению с языками 30 лет назад.

В настоящее время есть современные языки, конкурирующие с Lisp за умную совместную работу с интеллектуальными разработчиками: Python, Lua , Erlang , Haskell и OCaml . Но ни один из них не предлагает такое же сочетание зрелости, адаптивности, множественных реализаций, соответствующих стандартам, и скорости.

bcaulf
источник
1

Я на самом деле не делаю Лисп. Но место, где я работаю, имеет конечные элементы с миллионами линий, в основном из Фортрана. Парень, которого я больше всего уважаю в вычислительных ресурсах ( вычислительная гидродинамика кодов ), считает, что идеальная комбинация - это Lisp снаружи (в основном потому, что вы избегаете беспорядочных проблем с управлением памятью) и Fortran для алгоритмов низкого уровня (Fortran лучше всего подходит для эксплуатации). векторные возможности SSE / AVX , и мы считаем, что это лидерство вряд ли будет закрыто).

Peter Mortensen
источник