LISP (и такие диалекты, как Scheme, Common LISP и Clojure) не получили большой поддержки в отрасли, даже несмотря на то, что они являются довольно приличными языками программирования. (На данный момент кажется, что они набирают обороты).
Теперь, это не имеет прямого отношения к вопросу, который вы бы использовали диалект LISP для производственной программы? Что за программа и почему? Использование такого рода интеграции в некоторый другой код (например, C) также включены, но обратите внимание, что это то, что вы имеете в виду в своем ответе. Широкие концепции предпочтительны, но конкретные приложения также являются нормальными.
Ответы:
Вы бы использовали диалект LISP для производственной программы?
Абсолютно
Что за программа и почему?
Лисп - это динамический язык общего назначения. Сегодня он имеет те же основные трудности, что и другие динамические языки общего назначения, которые не публикуются Microsoft: собственные потоки, интеграция с графическим интерфейсом, детерминированная работа GC и небольшие объемы памяти.
Я полагаю, что нативные потоки создаются LispWorks и SBCL. Возможно, другие? Я не исследовал полностью.
LispWorks и Franz Common Lisp - коммерческие продукты - интегрируются в GUI до определенной степени успеха. Не имея $$, чтобы купить их, я не знаю, насколько хорошо это работает. Я подозреваю, что они работают довольно хорошо ...
Можно выполнить детерминированную операцию GC (это делается в Java с некоторым уровнем успеха), но я не знаю, есть ли в существующих системах Lisp (поддерживаемых) какой-либо код для этого.
Я полагаю, небольшой след памяти достигается некоторыми Лиспами.
Суть в том, что Common Lisp технически готов к созданию производственных систем. И это так .
Подавляющее большинство разработчиков испуганы (выберите один) динамическими языками, макросами, круглыми скобками, отсутствием любимой IDE, плохим опытом в колледже, небольшим количеством рабочих мест в нем, а затем не используют его.
Лично я хотел бы создать полноценную производственную систему в Common Lisp с нуля в командной среде.
редактировать: я действительно не ответил, почему Lisp, в отличие от других языков.
В моем опыте с Лиспом - не значительным, но значительно большим, чем «Привет, мир» - я обнаружил, что этот язык чрезвычайно полезен после первых болей «Argh new language». Большая часть языка соединяется в очень регулярной и довольно очевидной манере, которую я не нахожу, чтобы другие языки работали как. Частично это слияние выражений и заявлений. Часть этого - основной тип данных списка. Частью этого является система типов. Часть этого - макросистема. Не поймите меня неправильно, хотя, есть болевые точки. Но они не бьют меня по лицу так сильно, как болевые точки других языков.
Одним из упрощенных примеров является процедура длины списка Python. Подход Python заключается в вызове
len(mysequence)
. Но, если мы думаем об этом, длина является свойством последовательности. Итак,mysequence.len()
это более подходящая идея. Лисп по существу устраняет это синтаксическое различие.(length thing)
это и синтаксис вызова функции и синтаксис метода. Конечно, некоторые люди расстраиваются и хотят синтаксической разницы. Я предпочел бы иметь регулярность.edit2: я преобразовал часть моей MS диссертации, которая работает на рабочем столе, в Common Lisp, и с ним было приятно работать до сих пор.
источник
Я лично знаю людей, использующих Lisp в форме Clojure в паре инвестиционных банков и стартапов в Лондоне. Я также выбрал Clojure в качестве основного языка разработки для своего собственного стартапа, поэтому я готов положить свои деньги туда, где я говорю :-)
Я нашел, что это был очень поучительный опыт изучения Clojure за последний год (после большого опыта работы с Java и C #). Основными причинами этого являются:
Это также представляется практическим выбором для реального использования по следующим причинам:
источник
Я бы использовал LISP, если бы это был лучший выбор для работы. Просто некоторые вещи, которые влияют на «лучший выбор»:
Все эти факторы должны учитываться при принятии решения о том, подходит ли LISP для проекта. В корпоративном мире я никогда не испытывал это.
источник
Абсолютно. Пол Грэм хорошо это объясняет .
источник
Где: Emacs - это реальное приложение, использующее LISP.
Почему: это был отличный способ выразить соответствие между нажатием клавиши и действием. Это интерпретируется, и это быстро, и оно четко определено, и это просто.
источник
И Macsyma, и Autocad основаны на диалекте Лисп. Я бы классифицировал их как «реальный мир», а также Emacs.
источник
Абсолютно я бы это учел. Специально для новых разработок, которые имели некоторый параллельный вычислительный потенциал. Это, кажется, сладкое место для этих типов функциональных языков.
источник
Lisp - один из лучших вариантов реализации компиляторов. И поскольку использование DSL и eDSL в настоящее время увеличивается, Lisp становится все более ценным. Я использую диалект Lisp для всех моих задач, связанных с DSL.
источник
Прямо сейчас я пытаюсь использовать newLisp в качестве замены для Php на моем личном веб-сайте через платформу Dragonfly . Если я смогу понять, как заставить Apache играть хорошо, я воспользуюсь им (встроенный веб-сервер работает очень хорошо, но я бы предпочел работать через Apache). И как только это произойдет, я буду использовать newLisp везде, где я буду использовать Php, потому что мне не нравится Php, а мне нравится newLisp.
В настоящее время Clojure не является хорошим выбором для приложений для Android, но я знаю, что люди работают над этим. Так что, если это выяснится, это было бы другим местом, где я бы использовал диалект Lisp для реальных приложений ... но опять же, это потому, что я просто не люблю Java.
Но, честно говоря, я предпочитаю Ruby Lisp ... но это в основном вопрос сообщества и документации.
источник
Я реализовал проприетарное коммерческое приложение в Common Lisp под названием Tankan, которое работает в Microsoft Windows как собственный исполняемый файл.
Это программа для тренировки запоминания японских иероглифов.
Программа работает как фоновый HTTP-сервер. Выполнение этого сервера и переход к его страницам координируется крошечным приложением-иконкой в области системных уведомлений («Tray»), которое я разработал с использованием Visual C ++.
Приложение крошечного значка в трее запускается, отслеживает и останавливает сервер на базе Lisp и связывается с ним по каналам Win32, привязанным к его стандартному вводу и выводу. Через канал сервер Lisp сообщает приложению иконки в трее точный URL-адрес с правильным номером порта, и это приложение иконки в трее может запускать браузер через API-интерфейс оболочки для просмотра этого URL-адреса. Пользователь просто дважды щелкает значок, чтобы вызвать пользовательский интерфейс.
Программа Lisp поддерживает в своей памяти довольно сложное состояние сеанса, которое содержит историю ввода пользователя и различные отношения между различными объектами. Круговая нотация объекта Lisp (включаемая
*print-circle*
переменной) и то, как она работает в пользовательскихprint-object
методах CLOS, очень помогает в реализации персистентности: пользователи могут сохранить состояние на диск и продолжить с того места, где они остановились. Все сохраняется, включая состояние пользовательского интерфейса. В графе объектов много общих подструктур, а также циклов. Кроме того, много статических ошибок, которые не нужно сохранять, например, содержимое объектов словарных статей. С помощью пользовательских методов печати объектов ANSI Common Lisp вы можете создавать сжатые печатные представления для объектов, которые, тем не менее, являются машиночитаемыми,JavaScript почти не используется в веб-интерфейсе. Даже элементы управления для скрытия и отображения частей пользовательского интерфейса выполняются путем отправки формы и повторного рендеринга HTML. Следовательно, каждая деталь состояния пользовательского интерфейса находится на сервере и сохраняется при сохранении пользователем. Повторное создание HTML очень быстро. Это делается с помощью гигантского выражения обратной цитаты Lisp, которое передает HTML-генерирующий макрос. Код, скомпилированный Clozure Common Lisp (CCL), делает это настолько быстрым, что вы даже не подозреваете, что когда вы нажимаете кнопку [+] в пользовательском интерфейсе, чтобы открыть что-то, вы отправляете запрос на сервер, который восстанавливает вся проклятая страница, а не просто запуск некоторого локального JavaScript для изменения видимости локального элемента документа.
Программа изначально была разработана с CLISP. Благодаря тому, что ANSI CL является стандартным языком, с реализациями, которые хорошо соответствуют, и не слишком много хитрых ошибок в языке («неопределенное» или «определяемое реализацией» поведение), он довольно легко переносится на CCL.
CLISP не был оставлен; он по-прежнему используется для поддержки лицензирования, используя большую часть общей базы кода.
Я разработал оригинальную систему лицензирования для программы, используя криптографическую систему с эллиптическими кривыми, предоставляемую библиотекой IronClad, которая используется сервером лицензирования для подписи лицензий для их сертификации. (Кажется, я помню, что мог использовать программу командной строки OpenSSL для генерации параметров EC для ключа сервера.)
Лицензии представлены в виде объектов Lisp. Это дань переносимости Lisp, что программа Windows, скомпилированная Clozure Common Lisp, может генерировать лицензию на основе S-выражений, программа CLISP, запущенная на сервере Debian, может заполнить отсутствующее поле цифровой подписи в этом объекте и отправить его обратно в программа Windows, которая может проверить подпись.
На сервере, помимо службы лицензирования на основе CGI, используется простой API командной строки для управления лицензиями. Вы можете перечислить лицензии, найти конкретные и отредактировать их атрибуты: например, изменить дату истечения срока действия временной лицензии, чтобы предоставить пользователю исключение. Сервер лицензирования также генерирует электронные письма. Я не использовал никакой библиотеки для обработки CGI на стороне сервера: просто свернутый вручную код Lisp для работы с переменными среды Apache и аргументами командной строки. (Хотя код библиотеки используется для работы с кодировкой URL и генерацией HTML.) База данных не используется для хранения; лицензии объединяются в файл с именем
licenses.lisp
и все.источник
Если кто-то заплатил мне, конечно.
Они, вероятно, были бы более заинтересованы в оплате кого-то, кто знает язык, хотя. Я только играл с elisp и схемой несколько раз.
источник