Возможно ли развертывание настольного приложения Common Lisp (или другого диалекта) для нескольких платформ?

Я хотел бы разработать графическое приложение в Common Lisp или другом диалоге Lisp, который можно было бы развернуть в Mac, Windows и Linux, чтобы улучшить мои знания об этом языке. В идеале:

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

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

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

Спасибо!

Ответы

Ответ 1

Я один из разработчиков lispbuilder-sdl, который в настоящее время размещен в коде google.

alt text http://img10.imageshack.us/img10/7664/mandelbrot.jpg

http://code.google.com/p/lispbuilder/

Это дает вам возможность запускать общие программы lisp на Linux, Windows и Mac без изменения. Мы используем библиотеку SDL и различные расширения.

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

(sdl:with-init ()
  (sdl:window 320 240)
  (sdl:draw-surface (load-image "lisp.bmp"))
    (sdl:with-events ()
      (:quit-event () t)
      (:video-expose-event (sdl:update-display))))

В вики также объясняется, как создавать автономные exe для различных общих реализаций lisp.

Ответ 2

В большинстве распространенных реализаций Lisp можно сбрасывать исполняемые изображения. Иногда это два файла (kernel + image), но часто это может быть только один исполняемый файл. Но исполняемый файл обычно запускается только на платформе, для которой он был скомпилирован. Коммерческие реализации, такие как LispWorks или Allegro CL, имеют расширенные возможности - например, можно удалить неиспользуемые части системы Lisp. Это называется "доставка".

Существует некоторая информация о приложениях LispWorks. LispWorks - коммерческая и покрывающая платформы, может быть дорогостоящей. Вам нужно будет купить среду разработки - доставка бесплатна на популярных платформах. В LispWorks имеется графическая библиотека для Windows, Mac и Unix/Linux. Последний основан на старом Мотиве. Преимущество состоит в том, что код может быть очень переносимым по платформам. Сама среда разработки LispWorks - это приложение LispWorks. На Mac, например, 32-битная версия и 64-битная версия работают как на PowerPC, так и на x86 из одного приложения.

Информация о 'бесплатных' версиях Common Lisp и библиотеках собрана на CLIKI. Написание приложений MS Windows не является самой сильной частью "бесплатного" Common Lisp.

Ответ 3

Схема PLT может делать все, что вы просите. Библиотека, которую он использует из коробки, это WxWindows, но вы можете получить привязки для других GUI-систем, если вы действительно этого хотите.

Схема PLT, вероятно, является Lisp с самой работой, проделанной для упрощения написания и распространения "маленькой игры или графического приложения". Они включают в себя многие примеры игр в базовом дистрибутиве, а их флагманский IDE DrScheme написан в их собственном графическая инфраструктура. Он может свободно создавать и распространять скомпилированный код схемы PLT на любой платформе.

Изменить: вы запросили какой-либо диалект Lisp. Возможно ли вариант Clojure?

Изменить 2:

Вы сказали, что Clojure является опцией. Если вы уже хорошо знакомы с Java и Swing, я думаю, что Clojure был бы хорошим способом - с оговоркой, что он получил довольно сильные синтаксические различия с другими Lisps. Книга будет опубликована.

Если вы еще не эксперт по Java, я думаю, что PLT Scheme по-прежнему будет лучшим выбором. Я прихожу к этому с "только начинающих изучать" w132 > "и" малых демо-приложений ". Другие люди отметили, что коммерческая реализация Common Lisp поддерживает то, что вы хотите, но это будет сложнее (и дороже) использовать в качестве вводных систем.

У всех этих реализаций есть макросистемы, которые, как я думаю, означает то, что вы подразумеваете под "кодом является первоклассным".

Ответ 4

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

Я добавлю, что "не устанавливать среду выполнения" немного проблематично. Вам, конечно, не нужно, чтобы конечный пользователь отдельно устанавливал lisp, но для работы вашей программы может потребоваться, по существу, установить всю рабочую среду, в зависимости от того, что вы делаете. Гибкость на этом уровне означает, что может быть сложно программно определить, какие биты и не нужны, поэтому решения для свободного программного обеспечения обычно не беспокоят несколько утомительной и сложной работой по написанию дерева шейкера для этого.

Ответ 5

То, что я делаю сейчас, для графического приложения, использующего OpenGL и GLFW, развивается в первую очередь с SBCL и дает мои поставки тестировщиков через cl-launch. Тем не менее, мой план состоит в том, чтобы использовать CCL для создания пакета приложений на OS X и ECL для создания автономного исполняемого файла в Linux и Windows. Пакеты, которые я создаю в настоящий момент с cl-запуском, довольно большие (обычно 30M и выше), в то время как тесты, которые я делал с ECL, были намного меньше (libecl весит около 1,3 миллиона в моей системе). Тем не менее, я ожидал бы, что SBCL будет работать лучше (хотя я бы профайл, чтобы убедиться, во-первых!), Поэтому ваш выбор будет зависеть от вашего приложения.

Однако, если бы я делал это коммерчески, я бы инвестировал в одну из коммерческих реализаций. Райнер Йосвиг упоминает LispWorks и Allegro выше. Для доставки приложений Windows вы также можете рассмотреть Corman Lisp. Мое впечатление, что самый быстрый, но самый дорогой путь к доставке приложений через эти три ОС - это купить Allegro, но альтернативой (больше работы, но дешевле) было бы использование CCL на OS X, Corman на Win32 и ECL или SBCL на Linux. LispWorks, кажется, выбор между ними, хотя многие люди клянутся им, поэтому я бы не стал снижать его, как уступает Allegro только потому, что он более доступен.

Проблема с графической библиотекой - это нечто отдельное; у меня сложилось впечатление, что ситуация постоянно улучшается (обратные вызовы CFFI, похоже, сейчас работают на большинстве платформ, что очень помогает в взаимодействии с большинством наборов инструментов C), но я больше работал с GL, GLFW, GLUT и SDL (хотя еще не с lispbuilder, упомянутый justinhj выше, который выглядит круто). Я немного экспериментировал с wxCL год назад или два назад, и это казалось многообещающим.

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

Ответ 6

Существует ECL, реализация Common Lisp, которая, кажется, делает то, что вы хотите (я еще не использовал ее, хотя).

Ответ 7

Ecl lisp может скомпилировать очень маленький исполняемый файл (несколько килобайт), но на Ubuntu для выполнения этого исполняемого файла должен быть файл libecl.so.11.1 в каталоге /usr/local/lib. Этот файл составляет 5,7 мб.