Чем отличаются различные реализации ANSI CL? - PullRequest
29 голосов
/ 22 февраля 2009

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

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

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

Спасибо.

Ответы [ 9 ]

31 голосов
/ 22 февраля 2009
15 голосов
/ 22 февраля 2009

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

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

14 голосов
/ 17 января 2012

Я смотрю на Win32 решения того же вопроса. Что касается бесплатных реализаций Lisp в Windows, я настоятельно рекомендую Clozure CL (CCL). На это есть несколько причин. Во-первых, Clozure поддерживает 32- и 64-разрядные двоичные файлы. Это очень быстро и несколько компактно. Но самое главное, это последовательно и правильно. Я считаю, что это очень зрелый Лисп, после работы с Lispworks (который я скучаю) в течение нескольких лет. CCL очень хорошо работает с собственными потоками ОС, сокетами и некоторыми другими элементами, которые не являются частью спецификации CL. Внедрение CLOS кажется очень тщательным. И это ГХ и управление памятью отлично. Я сравнил CCL с SBCL на Win32, и хотя SBCL был несколько быстрее в нескольких тестах, он значительно увеличился, и его изображение продолжало расти и расти даже после нескольких принудительных сборок мусора. Между тем, 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") - это , а не Common Lisp. Как бы хорошо это ни было, я думаю, что если вы уже знаете CL, то изучение Clojure не стоит много различий. Я уверен, что некоторые могут поднять их быстро, но я конечно не сделал. (Если вам нужен Java-совместимый код, посмотрите на ABCL).

1021 * Дэйв *

12 голосов
/ 22 февраля 2009

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

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

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

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

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

3 голосов
/ 21 апреля 2009

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

3 голосов
/ 22 февраля 2009

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

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

2 голосов
/ 15 сентября 2011

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

так что новичок лучше всего подойдет.

1 голос
/ 22 августа 2009

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

1 голос
/ 24 февраля 2009

Зависит от выбранной вами ОС

  • Windows - используйте ecl или abcl
  • Linux - используйте sbcl или ecl или abcl или cmucl
  • Mac - ccl или ecl или sbcl
  • Другое - abcl или ecl или sbcl

РЕДАКТИРОВАТЬ:

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

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

РЕДАКТИРОВАТЬ 2011-10: Windows Sbcl теперь имеет поддержку потоков. Это еще не полностью слито в mainiline, но есть довольно стабильный форк, который имеет многопоточность и другие специфические особенности Windows.

...