Как различаются различные реализации ANSI CL?
=============================================

Когда я начал изучать CL из Practical Common Lisp, как проповедуется в книге, я начал с компилятора Allegro CL. Я прекратил использовать его, поскольку его коммерческий, но свободный бит меня не впечатлил. Для некоторых продуктов лицензирования потребовалось подключение к удаленному серверу.

Я переключился на «clisp» и использую его. Теперь я слышал о SBCL и планирую начать использовать его.

Итак, вопрос в следующем: как различаются различные реализации ANSI CL? Любой практический опыт использования одного над другим?

Спасибо.

Есть части ANSI CL, которые оставляют определенные детали вплоть до реализаций для определения; вы обнаружите, что для тех частей стандарта каждая реализация будет иметь свои собственные причуды.

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

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

В Windows лучшим вариантом будет, вероятно, Allegro или LispWorks, хотя я имел некоторый успех с clisp в Windows. Порт Windows SBCL прогрессирует, но я его не использовал, поэтому я не могу комментировать.

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



Я не знаю достаточно, чтобы дать вам подробный ответ, но я заметил, что SBCL был значительно быстрее, чем Clisp, когда я работал с CL для моего класса AI. Если у вас нет веских оснований, я бы посоветовал пойти с SBCL.

Я слышал, что Clisp проще установить и более портативен, чем SBCL (который имеет множество оптимизаций для конкретных процессоров), но если вы используете Linux, они оба достаточно легки для извлечения из диспетчера пакетов ,



См. [*Common Lisp Implementations: A Survey*](https://common-lisp.net/~dlw/LispSurvey.html) Daniel Weinreb.



Если вы находитесь на машине, которая может запускать SBCL, вы должны ее использовать. Это
самый быстрый бесплатный компилятор Lisp (он может генерировать быстрый код
как Haskell, OCaml, Java, C и C++, которые все очень быстрые,
особенно по сравнению с Python и Ruby). Это также довольно полная реализация
и поддерживает большинство функций Swank (для SLIME), что приятно при разработке.

Как упоминается в других комментариях, вы не заметите каких-либо различий
, когда вы впервые начинаете. Все бесплатные функции CL
являются «достаточно быстрыми» и поддерживают все функции, которые вам понадобятся. Но если вы начнете писать программное обеспечение для производства
, вы по достоинству оцените возможности SBCL. OTOH, теперь нет причин не переключаться.



В зависимости от вашей операционной системы выбора

* для Windows - использование ЭСЛ или ABCL
* Linux - использование SbCl или ЭСЛ или ABCL или CMUCL
* Mac - CCl или ECL или SBCL
* Другое - ABCL или ЭСЛ или SbCl

EDIT:

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

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

EDIT 2011-10:
Теперь в окнах Sbcl имеется резьбовая опора. Он еще не полностью слит в mainiline, но есть вилка, которая довольно стабильна, у которой есть резьба и другие специфические свойства Windows.



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



Мне очень повезло с установкой clisp с использованием [cygwin](https://www.cygwin.com/), если вы находитесь под окнами.



Кажется, что REPL SBCL не дружелюбен по сравнению с clisp? НАПРИМЕР. Я могу использовать клавишу TAB для автоматического заполнения ввода в виде clisp.

так что clisp лучше для lisp новичка.



Я рассматривал решения Win32 по тому же вопросу. Если вы хотите, чтобы все версии Lisp были бесплатными в Windows, я бы настоятельно рекомендовал Clozure CL (CCL). На это есть несколько причин. Во-первых, Clozure поддерживает 32- и 64-разрядные двоичные файлы. Это очень быстро и несколько компактно. Но самое главное, это последовательное и правильное. Я считаю, что это очень зрелый Lisp, после работы с Lispworks (который я пропустил) в течение нескольких лет. CCL выполняет очень приятную работу с потоками ОС, сокетами и некоторыми другими элементами, которые не являются частью спецификации CL. Его реализация CLOS представляется чрезвычайно тщательной. И это GC и управление памятью превосходны. Я сравнивал CCL с SBCL на Win32, и, хотя SBCL был немного быстрее на нескольких тестах, он намного увеличился, и его изображение продолжало расти и расти даже после нескольких принудительных GC. Между тем, CCL был последовательным, маленьким, быстрым и прекрасным в использовании. И если вы хотите, чтобы платформа, совместимая с Windows, Mac и Linux, поддерживала 32-разрядную и 64-разрядную поддержку, а затем не смотрите дальше.

Я попробовал CormanLisp на Win32, и было много вещей, которые мне понравились. Но он не работает должным образом на 64-битных платформах Windows и ограничен Win32. Это также не бесплатно, и почему-то я столкнулся с этим, когда я набросил на него какой-то мусорный код. Я также легко смог сбой SBCL. Не так с CCL. Скала. Действительно, эти ребята сделали удивительную работу и в конечном итоге помогут сохранить Лисп в живых.

Что касается SLIME, я не пытался заставить SLIME работать с SBCL, но я действительно хорошо работал с CCL. Независимо от того, какова ваша фантазия, я советую людям писать код, чтобы быть легко переносимым. Цель для Windows, Mac и Linux, а также для 64-битных. Если вы считаете это, тогда CCL - ваш лучший выбор.

Последняя попытка ответить на это - рассмотреть, что не так с другими.Вот что я нашел:

* CLISP хорош, но намного медленнее относительно SBCL или CCL. Я вижу немного вверх
* SBCL кажется бедной на Win32. Размер изображения может стать большим.
* CormanLisp хорошо работает на Win32, но не переносится и не поддерживает Windows x64.
Также кажется, что Роджер Корман не активно развивает CormanLisp, что является позором, но это реальность.
* Clojure (с "j") is *не* Common Lisp. Как ни приятно, я думаю, что
, если вы уже знаете CL, тогда не стоит накладных расходов на изучение
Clojure многих различий. Я уверен, что некоторые из них могут забрать их быстро, но я, конечно, этого не сделал.
(Если Java-совместимый код - это то, что вам нужно, тогда посмотрите на ABCL).

Dave