Насколько LISP по-прежнему полезен в сегодняшнем мире? Какая версия больше всего используется?

Я пытаюсь научить себя новому языку программирования через регулярные промежутки времени. Недавно я прочитал, как Lisp и его диалекты находятся на полном противоположном конце спектра от таких языков, как C /C ++, что сделало меня любопытным, чтобы больше узнать об этом. Однако для меня неясны две вещи, и я ищу для них руководство:

  1. Является ли LISP все еще практикуемым /используемым в сегодняшнем мире, или это устаревший язык, такой как FORTRAN /COBOL? Я имею в виду, помимо сохранения существующего кода, используется ли он вообще для новых проектов?

  2. Каков наиболее широко используемый диалект? Я столкнулся с Scheme и Common Lisp как с двумя наиболее распространенными диалектами и хотел, чтобы ваше мнение о том, что является наиболее предпочтительным /полезным, чтобы учиться, - и было бы очень приятно, если вы можете предложить любые ресурсы для начинающих рангов, чтобы начать с них.

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

117 голосов | спросил 3 revs, 3 users 100%
TCSGrad
1 Jam1000000amThu, 01 Jan 1970 03:00:00 +030070 1970, 03:00:00

15 ответов


59

Мне нравится Scheme, если вы хотите работать с JVM, вы должны проверить Clojure, который является lisp, который предназначен для работы в JVM. И да Lisp по-прежнему стоит узнать, насколько мощным может быть такой минимальный дизайн! Люди, которые создали lisp, получили некоторые вещи действительно прав. Удивительно, сколько из крутых новых особенностей современных языков было в 1960-х годах!

Для встроенной схемы попробуйте воспользоваться: http://www.gnu.org/s/guile/

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
68

В ответ на вопрос 2 «Самый широко используемый диалект»:

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

Самый основной код, написанный

  • Возможно, схема (все диалекты) из-за образовательных приложений
    • 270 школ ... Предположим, 50 студентов в год, 500 строк кода /студента, 10 лет подряд. 1 000 000 + строк на основе математики салфетки.
    • 500 000 строк Racket в самой Racket и его инструментах.
  • Возможно, Common Lisp из-за AI и большого количества кода с открытым исходным кодом и производственного кода (см. производственный код).
  • Возможно, Emacs Lisp из-за ...
    • Emacs: более 1 000 000 строк
    • Количество emacs lisp, написанное публично - 237 модулей, около 200 строк /модулей - строки 40 000 + только на EmacsWiki, возможно, намного больше в ELPA
    • Плюс приложения, написанные в файлах emacs Lisp, .emacs и т. д.
  • Clojure
    • Трудно оценить. В основном меньше доткомов. Может быть много.

Победитель: схема или общий Лисп. Слишком много неизвестных.

Самый «код производства»

Победитель: я предполагаю Common Lisp . Я думаю, что мы можем ответить «Да» на вопрос 1 на основе использования Common Lisp и Clojure.

Большинство конечных пользователей

  • Общий Лисп
    • Клиенты ITA Software, включая Orbitz, Bing Travel и Kayak.com - вероятно, миллионы.
  • Clojure
    • Citigroup (без подробностей), Akamai (нет данных), simple.com, многие другие. Вероятно, миллионы.
  • Схема
  • Emacs Lisp - В основном программисты, в основном на платформах unix. Может быть миллион.

Победитель:. Схема имеет лучший нижнюю границу здесь, так как есть цифры продаж на Uncharted, но это весьма спорно

Заключение

Взаключение, я нахожу, что большие яблоки.

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
43
  

Является ли LISP по-прежнему практикуется /используется в сегодняшнем мире, или это устаревший язык

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

  

Каков наиболее широко используемый диалект?

Это правильный вопрос, но ответить на него непросто. Также не может быть особенно полезным ответить: многие реализации имеют определенную направленность, поэтому их лучше всего выбрать, если они соответствуют вашей конкретной проблеме, а не основаны на том, как широко она используется в других целях. Вместо этого я расскажу вам немного о ваших вариантах, и вы сами можете решить.

LISP - это семейство языков, и каждый из этих языков имеет семью диалектов и реализаций. Широко диалекты попадают в два лагеря «LISPs» и «Схемы».

лепечет: До недавнего времени Common LISP был королем. Это была попытка объединить все разрозненные LISP и, не будучи недобрыми, была «C ++» LISP. Иными словами, это был HUGE . У него было все. За последние несколько лет появился Clojure. Clojure - это LISP, который работает на виртуальной машине Java и пытается укорениться в философии функционального программирования. Традиционно, другие LISP были строго мультипарадигмой. Clojure интересен тем, что получает как самое лучшее, так и самое худшее из LISP и JVM. Там по-прежнему много многословий на Java-языках, и они были довольно свободны и легки с синтаксисом, поэтому у него много кнопок и кнопок для разных вещей, но у них есть некоторые really интересные идеи о типах данных, особенно некоторые из практических способов, с помощью которых они придумали идеи из функционального программирования.

Схема: Схемы являются строгим подмножеством LISP. Схема была изобретена Стилем и Суссманом, и в раннем возрасте была заметна возможность использования в курсе лекций MIT Computing 101. Схема определена в «Пересмотренном отчетном отчете по алгоритмической языковой схеме (RnRS)». Да. В них есть математическая шутка. Схема является стандартизированным языком таким образом, что другие LISP не являются. Это очень помогает в переносимости между реализациями, но это не серебряная пуля. Усилия по стандартизации, как правило, консервативны, а инновации в реализации, особенно вокруг таких вещей, как модули, имеют тенденцию быть разрозненными. Существует также серия SRFI («Запросы схемы для реализации»), которая аналогична процессу RFC IETF. Люди используют его для стандартизации мелких вещей по мере необходимости.

Схемы отличаются от LISP, что у них есть набор жестких требований, которые они должны удовлетворить, одним из которых является «оптимизация хвостовых вызовов», которая помогает сделать рекурсию эффективной. Поэтому рекурсивные стили программирования гораздо более популярны в Scheme, чем в LISP. Схема также не является недоброй, как «C» LISP. То есть, это небольшие языки, и вы должны иметь возможность держать все это в своей голове сразу.

В настоящее время существуют две семейства схем: те, которые основаны на 5-й версии (R5RS) и на основе 6-й версии (R6RS). Сложность R6RS была намного выше, чем у любого из ее предшественников, и поэтому многие реализации R5RS решили пропустить ее, надеясь, что R7RS будет больше похож на R5RS, чем на R6RS. Процесс стандартизации R7RS в настоящее время продолжается, и он попытался включить как желания исполнителей R5RS, так и желания людей R6RS, стандартизируя небольшой базовый язык в своей первой рабочей группе, а затем ввел вторую рабочую группу для стандартизации более крупных функций. Это позволит языку иметь эффективные и полезные реализации как на крошечном встроенном оборудовании, так и на более способных машинах.

Теперь я буду более конкретным:

PicoLisp - это действительно,действительно классный LISP. Это крошечно! Это автор написал для себя и, как я понимаю, он зарабатывал на жизнь с 1980-х годов. Если вы когда-нибудь получите возможность поговорить с ним, тогда вы должны это сделать: он действительно интересен и действительно знает свои вещи, и вы не получите даже самого маленького нюха из чего-либо основного или скучного.

Я не знаком с реализациями Common Lisp, поэтому я больше не буду комментировать их.

Guile - официальная схема GNU.

Racket - это схема R6RS, но в последнее время она, похоже, расширила сеть и пытается «служить платформой для создания, проектирования и реализации языка».

Курица стремится стать практичной схемой. Он основан на R5RS и компилируется до C. Это, оказывается, действительно, действительно, важное преимущество, поскольку он делает абсолютно тривиальным использование существующих библиотек C. Поэтому Chicken, вероятно, является самой полезной схемой для замены Perl, Python, Ruby и т. Д. В качестве вашего ежедневного языка сценариев. Есть несколько человек, которые использовали его исключительно для всех своих потребностей в течение нескольких лет. Он имеет интерактивный REPL, а также компилятор. Сообщество (как в списке рассылки, так и в IRC) хорошо осведомлено, дружелюбное и полезное.

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

Ищите реализацию с компилятором или, по крайней мере, что-то, что не является строго IDE или REPL. Множество реализаций, предназначенных для обучения, очень сложно использовать для сценариев общего назначения.

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

  

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

Схема не является профессионально мертвой, но вам, возможно, придется пойти на некоторые длины, чтобы использовать ее в этом контексте. Что-то вроде Chicken - это гораздо больше, чем академическое преследование, и оно легко охватывает почти все основы любых языков высокого уровня, которые вы в настоящее время используете.

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
27

На самом деле я не могу говорить за всех Lisps, но Clojure определенно является горячим и актуальным языком в настоящее время. Группа пользователей London Clojure, с которой я ездила в начале этой недели, насчитывала более 100 участников ....

Я нашел, что это очень интересный опыт для изучения Lisp в форме Clojure за последний год (после большого опыта работы с Java и C #). Основными причинами этого являются:

  • Он уделяет большое внимание функциональному программированию (более того, чем большинство других Lisps). Автор и BDFL Rich Hickey часто цитировали Haskell как одно из его вдохновляющих факторов для дизайна языка, что означает, что вы получаете такие вещи, как полностью неизменяемые структуры данных и ленивые бесконечные последовательности и т. Д.
  • Метакропрограммирование макросов - философия Lisp «код - это данные», которую трудно понять, если вы на самом деле ее не испытали, но это одна из причин, почему Lisps настолько выразительны и продуктивны.
  • Фантастическая поддержка многоядерного параллелизма . На самом деле я считаю, что Clojure - это лучший язык для параллельного программирования прямо сейчас. См. http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey для просветительской презентации об этом.

Это также кажется практическим выбором для реального производства по следующим причинам:

  • Работа на JVM с очень простой Java-совместимостью дает вам доступ ко всем библиотекам и инструментам в экосистеме Java
  • По умолчанию это динамический язык , что делает его очень удобным для разработки и быстрого прототипирования практически без шаблона. Однако вы можете добавить подсказки статического типа, чтобы получить довольно хорошую производительность там, где вам это нужно.

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

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
9

В настоящее время я тоже изучаю Lisp (и мне это нравится). Я использую Common Lisp, но я также перепутал с SBCL , Arc (заметьте, это версия Lisp от Paul Graham, которая, как упоминалось Витором Брагой, создала магазин Yahoo /Viaweb) и Allegro CL , который похож на Visual Studio для Lisp (может создавать графические интерфейсы, однако я никогда не использовал его).

Как и для использования, Lisp много используется в искусственном интеллекте, но я буду честен, я не уверен, сколько других «общих» использует для Lisp. Многие веб-сайты, которые были построены в Lisp изначально, были переписаны на других языках, поэтому трудно сказать, что он используется в веб-разработке (не сказать, что это не так, но более крупные сайты, которые его используют, больше не делают ). После быстрого поиска (очень быстро) вот список программ, написанных в Common Lisp из Wikipedia .

[EDIT] Что касается использования Lisp профессионально, есть задания, которые вы бы использовали Lisp. Они не так многочисленны, как, например, Java или C #, но они существуют. Я думаю, что Lisp является одним из тех языков, который используется для внутренних приложений и может обеспечить конкурентное преимущество, которое компании не хотят отказываться от рекламы, использующей Lisp. Я помню, что я видел сообщение на P.SE, в котором говорилось, что Smalltalk была похожа на финансовую арену.

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

  

«Lisp заслуживает изучения глубокого просветительского опыта, который у вас будет, когда вы его получите, этот опыт сделает вас лучшим программистом до конца ваших дней, даже если вы на самом деле никогда не используете Lisp».   - Эрик Раймонд, «Как стать хакером»

[/EDIT]

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
8

Если вы хотите изучить Lisp сегодня, я бы посмотрел на любую ракетку, которая является быстрой реализацией схемы (ну, она фактически немного отошла от схемы, так что теперь это ее собственный диалект) или clojure, что выгоды от JVM, на котором он работает (поэтому доступны библиотеки для библиотек, а также вы можете взаимодействовать с вашим собственным кодом Java).

Даже если вы не научитесь его фактически использовать, изучение всегда полезно: вы изучаете новые способы думать и решать проблемы даже на других языках, как только вы на некоторое время обдумали Lisp .

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
7

Значительная часть бэкэнда Amazon раньше была в Lisp, но теперь была переписана на C ++, или так я слышал (я должен признать, что у меня нет надежного источника для этого).

Yahoo! Магазины - один из классических примеров веб-приложений Lisp. Из Yahoo! Магазины славы вы, возможно, слышали о Paul Graham . Грэм является одним из самых известных адвокатов Лиспа и много пишет об этом предмете. Возможно, вы захотите прочитать его сайт, чтобы узнать его очки.

В AutoCAD использовался диалоги Lisp для своей макросистемы. Я не знаю, все ли это делает.

Схема - чистый язык и очень элегантный. Это, наверное, мой любимый язык программирования, поэтому я могу быть предвзятым. Если бы я собирался написать прямо сейчас основное приложение, я бы, вероятно, написал скелетное приложение на C, расширил и определл бы бизнес-правила на Схеме. Это позволяет мне использовать Scheme и использовать C - для скорости и для чистой доступности библиотек практически для всех.

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
4
  

Является ли LISP по-прежнему практикуется /используется в сегодняшнем мире, или это устаревший язык, такой как FORTRAN /COBOL? Я имею в виду, помимо сохранения существующего кода, используется ли он вообще для новых проектов?

Я знаю нескольких парней, которые делают Lisps в некоторых стартапах в Силиконовой долине, и я знаю, что Amazon.com использует Lisp с самого начала (хотя я слышал, что они почему-то заменяют его C ++)

Но одна компания, которой следует следить, Naughty Dog . Все их игры написаны с диалектом Лиспа. Первоначально они катались самостоятельно, но они используют MZScheme в серии Uncharted.

  

Каков наиболее широко используемый диалект? Я столкнулся с Scheme и Common Lisp как с двумя наиболее распространенными диалектами и хотел, чтобы ваше мнение о том, что является наиболее предпочтительным /полезным, чтобы учиться, - и было бы очень приятно, если вы можете предложить любые ресурсы для начинающих рангов, чтобы начать с них.

Я бы сделал ставку на то, что Common Lisp, Clojure, Scheme и Emacs Lisp являются четырьмя наиболее распространенными диалектами, и я подозреваю, что Scheme является наиболее распространенным. Конечно, мне не с чем с этим справиться. :)

Мне больше нравится SICP и Little Schemer, как это было предложено другими, но я также предлагаю Land of Lisp , что довольно интересно. :)

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
2

Я думаю, что это частично зависит от того, что вы хотите с ним сделать - если вы хотите улучшить свои представления о различных концепциях программирования и сделать себя лучшим программистом, тогда я бы сказал, что стоит изучить хотя бы небольшой объем Лисп. Если вы ищете еще один язык для добавления в свое резюме, чтобы получить работу с этим языком, вы, вероятно, захотите посмотреть в другом месте. Там не так много рабочих мест Lisp.

Я лично пытаюсь использовать либо SBCL, либо совсем недавно Clojure (и некоторые Emacs Lisp, но htat, потому что я долгосрочный пользователь Emacs - я попытаюсь изучить Emacs Lisp, когда я попробую изучить Lisp). Теперь мне нужно только найти время, чтобы поиграть с этими языками ...

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
2

Я не знаю, что в LISP есть много рабочих мест, я, конечно, их не вижу. Но я помню, что долгое время читал о каком-то NASA-зонде, где они запускали LISP, и смог вставить новый код с земли.

Также в Нью-Йорке группа знакомств clojure огромна. Я предполагаю, что если вы заинтересованы и зайдите в свою группу знакомств clojure, вы можете найти возможности для работы в сети и поиска (не clojure-заданий, кроме таких, как Java /C ++ /и т. Д.). В нью-йоркской области это кажется абсолютно огромным, другие области могут быть разными.

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

Классическим примером является реализация MAX (a, b, c). Вы можете сделать свернутую функцию с кучей операторов if. Или вы могли бы просто сказать

MAX (MAX (a,             б),        в)

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

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
2

Две дополнительные точки:

Во-первых, Lisp - отличный язык для написания кода, в котором взаимодействия между функциями или данными часто сложны. На многих популярных языках, если вы смущены тем, почему ваша программа делает то, что она делает, вам нужно написать специальные функции, чтобы вы могли изучить внутреннее состояние программы по мере ее продвижения. На некоторых языках вам придется ждать, пока ваш код будет перекомпилирован. Конечно, могут быть такие инструменты, как отладчики, которые помогают в этом. Однако в Lisp все, что вам нужно, это способ остановить программу, а затем, как правило, у вас есть доступ к всем в Lisp. В Common Lisp иногда я просто набираю ^ C или бросаю вызов error в одну функцию (это единственное, что нужно перекомпилировать, и вам не нужно ничего делать, чтобы перекомпилировать Это). Как только я останавливаю программу, меня сразу бросают в отладчик, но отладчик дает мне все возможности Lisp, и я могу выйти из отладчика, вызвать определенные функции и т. Д. Я могу легко изучить любую структуру данных в моей программе. Большинство схем должны допускать подобные методы. Lisp не уникален в этом отношении, но то, что он предлагает, выходит за рамки того, что предлагают многие популярные языки.

Во-вторых: если вы собираетесь экспериментировать с любым диалектом Lisp, я бы не сделал этого без (a) с помощью редактора, который соответствует круглым скобкам, и (b) обучения правильному отступу Lisp. Было бы неплохо использовать редактор, который также будет аппроксимировать правильный отступ для вас. Форматирование кода на языке C /C ++ /Java предназначено для языков с меньшим количеством скобок /скобок /скобок, чем Lisp. Стиль печати Lisp довольно хорошо работает, как только вы знакомы с ним, и вы не теряете путаницы в круглых скобках или теряете половину своего пространства, помещая одну закрывающую скобку в строке.

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
1

Сейчас у меня создается впечатление, что Lisp в основном используется в консалтинговых магазинах (а не в том, что консалтинговые магазины используют его в основном).

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

Традиционно Scheme является довольно академическим диалектом Lisp, а Common Lisp - отраслевым диалектом.

Lisp особенно полезен для символических манипуляций и возможностей рефлексии.

В качестве примера, код, который я написал для изучения Lisp, был программой, которая создавала случайные лямбда-функции, оценивала их и затем работала на них, пытаясь минимизировать разницу функции с целевой функцией. Все это было прямой манипуляцией. На языке, таком как C ++ или Java, мне пришлось бы изобретать представление для функций, которые будут манипулировать компьютером.

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
1

Я хотел бы добавить некоторую точку зрения на Common Lisp и Scheme. Я избегал clojure из-за JVM, поэтому у меня нет большой перспективы.

Схема - красивый лаконичный, четко определенный язык. Он принял много решений, которые CL должен был сделать из-за наследия, и принял более чистый подход. Например, переменные и функции находятся в одном пространстве имен. Язык по умолчанию меньше и более краток, который хорошо подходит для обучения вам тем вещам, в которых работает lisp, например, это влияет на использование рекурсии вместо итерации, поскольку по умолчанию она не имеет итерационных циклов и требует оптимизации хвостового вызова , У схемы очень интересная гигиеническая макросистема, которая имеет большое значение для обучения. Но IMO, я бы рекомендовал сначала изучить макеты Unhygienic CL-стиля, из которых большинство (?) Диалектов схемы предлагают хотя бы одну реализацию, даже если она не входит в спецификацию. Поскольку кажется, что вы хотите выучить язык для обучения, я бы рекомендовал Scheme, поскольку, кроме того, многие из его концепций легко переносятся на другие листы и вообще на динамические языки.

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

Common Lisp, с другой стороны, представляется гораздо более прагматичным подходом к разработке языка. Стандарт таков, что большой код lisp является переносимым между реализациями, многие компиляторы быстры и хорошо оптимизированы. Существует большой набор пакетов, многие из которых переносимы между реализациями. И, по-видимому, (относительно) большое количество реальных продуктов создается на языке. И, скажем, quicklisp, управление пакетами кажется достаточно близким к тому, что вы получите в современном сообществе, например, Ruby или Node. CL, однако, не имеет недостатков, он имеет очень большую спецификацию в этой точке по сравнению с схемой, и даже это CLOS-система объектов, то, что традиционно написана как библиотека в Lisps, является частью спецификации IIRC. И вы можете чувствовать, что наследие укоренено через большую часть системы. Например, стандартный системный подход к сборке изображения для компиляции кажется особенно загадочным.

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

TLDR; Если ваша цель - учиться, я рекомендую Схему. Однако, если вы хотите создать программное обеспечение, я бы рекомендовал Common Lisp из двух основных вариантов lisp.

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
0

Я многому научился из ответов. Спасибо всем, кто внес свой вклад в этот просветительский разговор.

Я должен упомянуть newLISP . Хотя он немного отличается от CL и Scheme, он реализует множество очень полезных функций. Я считаю, что HTTP-сервер, многофункциональная обработка (Cilk) и функции удаленной оценки очень чисты и просты в использовании.

Единственный исполняемый файл маленький, быстрый и включает в себя много холодных батарей.

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45
0

Еще одним фактором, который следует учитывать при выборе диалекта Lisp для изучения, может быть количество и качество реализаций. Если диалект имеет только одну или две реализации, то вы застряли с их недостатками, пока эти недостатки не будут исправлены, и всегда есть шанс, что люди перестанут совершенствовать реализацию. Сам по себе это не повод не использовать диалоги одного варианта Lisp, но это то, что нужно учитывать. Преимущество Scheme и Common Lisp заключается в том, что существует множество реализаций этих диалектов. Оба языка опубликовали стандарты, поэтому относительно недавние реализации, скорее всего, будут работать с одним и тем же кодом. Некоторые из этих реализаций были долгое время, но все еще находятся в активной разработке: теперь они являются высококачественными реализациями, и они все еще дорабатываются. (Например, Steel Bank Common Lisp - SBCL, упомянутый выше, - очень быстро. Интересно, насколько легко было бы сделать Lisp на основе JVM как можно быстрее.)

ответил DepressedDaniel 19 MonEurope/Moscow2016-12-19T22:41:45+03:00Europe/Moscow12bEurope/MoscowMon, 19 Dec 2016 22:41:45 +0300 2016, 22:41:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132