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


29

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

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

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

Спасибо.

12

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

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

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

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

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


3

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

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

  0

Спасибо за обмен :-) 22 фев. 092009-02-22 04:22:12

  0

Я действительно не знаю, что много, но я чувствовал себя плохо, вы не получите ответ. Надеюсь, то, что я вам посоветовал, помогает! 22 фев. 092009-02-22 04:32:40

  0

SBCL компилирует собственный код sto, clisp компилируется в байт-код, который затем интерпретируется виртуальной машиной clisp. Это источник проблем, связанных с скоростью и переносимостью, о которых вы упоминали. 24 фев. 092009-02-24 11:12:34


31

См. Common Lisp Implementations: A Survey Daniel Weinreb.

  0

Спасибо, я пройду через это. 22 фев. 092009-02-22 08:37:52


15

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

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

  0

Спасибо, я только что сделал переключатель. 23 фев. 092009-02-23 05:02:24

+1

Рефлектор SBCL прост в использовании, чем clisp. 08 окт. 112011-10-08 02:49:40

  0

@jrockway - этот совет все еще держится сейчас в 2012 году? 21 сен. 122012-09-21 01:30:10

  0

Я не писал много CL в последнее время, но SBCL все еще достаточно хорош для меня. 27 сен. 122012-09-27 00:13:07

+1

CLISP обычно настраивается с поддержкой readline, тогда как SBCL этого не делает. REPL SBCL значительно улучшен (из командной строки), если он запущен с помощью [rlwrap] (http://www.cliki.net/rlwrap), который использует readline для выполнения аналогичных функций. При работе с SLIME я не заметил никакой разницы в простоте использования. Если это не то, что означал @z_axis, возможно, он может предоставить более подробную информацию. Кроме того, [repl-utilities] (https://github.com/m-n/repl-utilities) может сделать любой REPL лучше. Теперь, когда я снова прочитаю комментарии, я вижу, что Чарли разговаривает с jrockway ... что бы ни было, мой комментарий все еще стоит. 03 май. 132013-05-03 11:49:45

  0

@CharlieFlowers Я просто попробовал его с SBCL 1.2.4.27-25de136, и у него нет истории или возможности использовать клавиши со стрелками и т. Д. CLISP имеет намного лучший REPL из коробки. 01 окт. 142014-10-01 23:30:34


1

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

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

EDIT:

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

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

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

  0

Я продолжаю слышать, что sbcl не очень хорошо работает в Windows, но я редко слышу, почему. Что заставляет вас не говорить sbcl в Windows? Это глючит? 25 фев. 092009-02-25 07:10:01

+1

Вы забыли упомянуть clozurecl. Это эволюция openmcl. Он быстрый (как в скорости компиляции, так и во время выполнения), создает собственный код (но несколько медленнее, чем sbcl, насколько я знаю). Он доступен как для окон, так и для Linux (также для других ОС) как для x86, так и для x86-64. SBCL нестабилен в окнах. Его поддержка резьбы еще не выполнена полностью. 21 апр. 092009-04-21 06:06:50

  0

Я упомянул его как ccl. Это прекрасный impelementationm, но не работает без SSE2, поэтому я не могу запустить его. 21 апр. 092009-04-21 10:39:11

  0

@ MarkoKocić вы уверены, что ваш процессор не имеет SSE2? двойная проверка, все процессоры с Pentium III. P.S. или это было троллинг? :)) 12 окт. 112011-10-12 12:41:37

  0

@LukaRamishvili AMD Athlon XP 2400 не имеет SSE2, и CCL не работает на нем. 13 окт. 112011-10-13 09:08:32

+1

Печально. Однако, требуя SSE2, разработчики CCL могут эффективно обрабатывать строки, так как все строки CCL являются 32-разрядными. 15 ноя. 112011-11-15 11:06:54


3

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


1

Мне очень повезло с установкой clisp с использованием cygwin, если вы находитесь под окнами.


2

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

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

+1

Рефлектор SBCL является минималистичным. В общем, большинство разработчиков lisp используют SLIME, который обеспечивает намного лучшее REPL. 26 сен. 112011-09-26 18:28:50

  0

Но я привык использовать VIM не emacs 27 сен. 112011-09-27 00:06:03

  0

@z_axis использовать emacs viper-mode 15 ноя. 112011-11-15 11:07:27

+5

или использовать утилиту 'rlwrap' при запуске любого lisp из командной строки. Это делает REPL гораздо более дружелюбным. 07 дек. 122012-12-07 00:54:11


14

Я рассматривал решения 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
+3

Не могу больше согласиться на CCL на Windows (x86 или x86_64).Еще одна приятная вещь в том, что он отлично работает на Linux, Mac, BSD и Solaris, так что вы можете буквально программировать один раз, работать практически везде. Я имею тенденцию развиваться в Windows и выталкивать свой код на серверы Linux. Никогда не делайте этого с CCL. 07 дек. 122012-12-07 00:51:49