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

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

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

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

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

Спасибо!


person alvatar    schedule 05.04.2009    source источник
comment
Под компиляцией кода вы имеете в виду создание машинного кода или байт-код VM в порядке?   -  person Steven Huwig    schedule 05.04.2009
comment
Кроме того, что, если байт-код JIT-компилируется в машинный код виртуальной машиной?   -  person Steven Huwig    schedule 05.04.2009
comment
Да все нормально! Меня больше всего интересуют особенности языка.   -  person alvatar    schedule 05.04.2009
comment
В ПОРЯДКЕ. Я обновил свой ответ. Я по-прежнему считаю, что схема PLT будет лучшей системой для того, что вы хотите сделать, как вы описали ее здесь.   -  person Steven Huwig    schedule 05.04.2009


Ответы (7)


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

замещающий текст 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))))

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

person justinhj    schedule 06.04.2009
comment
Вау очень приятно. Это вполне может быть тем, что заставляет меня попробовать LISP еще раз. - person jfclavette; 24.04.2009

Большинство реализаций Common Lisp могут создавать дамп исполняемых образов. Иногда это два файла (ядро + образ), но часто это может быть и один исполняемый файл. Но исполняемый файл обычно запускается только на той платформе, для которой он был скомпилирован. Коммерческие реализации, такие как 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.

person Rainer Joswig    schedule 05.04.2009

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

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

Редактировать: вы просили любой диалект Лиспа. Будет ли Clojure также подходящим вариантом?

Редактировать 2:

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

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

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

person Steven Huwig    schedule 05.04.2009
comment
Хорошо, проголосовали против, потому что я думаю, что это не Common Lisp. Вопрос задается на любом диалекте. - person Steven Huwig; 05.04.2009
comment
упс, мое ошибочное прочтение. PLT - хорошая система. Однако некоторые распространенные лиспы намного превосходят его с точки зрения доставки коммерческого программного обеспечения и т. д. В конце концов, CL — это хорошо продуманная среда промышленного программирования. Так что я думаю, это зависит от того, что нужно OP. - person simon; 05.04.2009
comment
Да, Clojure и PLT Scheme тоже являются вариантами. Я не очень разбираюсь в различиях, но одна важная особенность для меня заключается в том, что код относится к первому классу, как в Лиспе. - person alvatar; 05.04.2009
comment
За него проголосовали, потому что вы написали, что «Схема PLT, вероятно, является Лиспом, в котором больше всего проделана работа по упрощению написания и распространения небольшой игры или графического приложения». Так ли это? - person Rainer Joswig; 05.04.2009
comment
У меня есть опыт программирования на Java, поэтому clojure может быть хорошим вариантом. Подходит ли он для приложений среднего размера? Например, если демо-версия увеличится в размере, будет ли она по-прежнему подходящей? - person alvatar; 05.04.2009
comment
@Rainer: я думаю, что наличие пакета игр в дистрибутиве, включенные DSL для анимации и создание пакета одним щелчком мыши отражают приверженность группы PLT этому конкретному варианту использования. - person Steven Huwig; 05.04.2009
comment
@ Альваро: вероятно, самым большим недостатком Clojure в этом отношении является то, что это новый язык, и поэтому определение все еще меняется. Если вы хотите воспользоваться функциями, добавленными позже, вам может потребоваться обновить старый код. - person Steven Huwig; 05.04.2009
comment
Steven, LispWorks и Allegro CL также упрощают разработку графических приложений и их поставку. Много работы было вложено в эти функции и чтобы сделать их простыми в использовании. Например, в дизайнер графического интерфейса Allegro CL. MCL был самым простым из всех. - person Rainer Joswig; 05.04.2009
comment
Конечно, но их документация и примеры предназначены для другого варианта использования. - person Steven Huwig; 05.04.2009
comment
Хм, у меня тут LispWorks. Есть пример каталога capi/applications/examples/. Как вы думаете, о чем могут быть такие файлы, как chat-client.lisp, hangman.lisp, maze.lisp, othello.lisp, pong.lisp? - person Rainer Joswig; 05.04.2009
comment
Справедливо. Может быть, мое реальное предубеждение состоит в том, что это будет стоить первоначальному спрашивающему довольно много денег. - person Steven Huwig; 05.04.2009
comment
Хотя я не указывал это в вопросе, я бы предпочел, чтобы это было решение с открытым исходным кодом. - person alvatar; 05.04.2009

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

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

person simon    schedule 05.04.2009
comment
Предоставление среды с моим приложением в порядке, я просто не хотел бы заставлять пользователя выполнять полную установку самостоятельно. - person alvatar; 05.04.2009

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

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

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

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

person Julian Squires    schedule 24.04.2009

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

person Svante    schedule 05.04.2009

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

person lev    schedule 23.03.2011