2010-03-28

GUI в Common Lisp — еще один миф

Написано для: habrahabr.ru

Бытует расхожее мнение, что в Common Lisp нет или же плохая поддержка графики. Это еще один миф из серии, что Lisp — это язык только для подсчета факториалов. На самом деле, как и в большинстве других прикладных сфер общего назначения (например, веб, форматы передачи данных, взаимодействие с БД и т.д.) в Lisp-среде есть полный спектр библиотек и тулкитов для всех основных платформ с разными уровнями абстракции.

Linux/Unix


Базовой библиотекой для графики из Common Lisp под Unix является CLX. Это аналог xlib, т.е. низкоуровневый клиент, напрямую общающийся по X-протоколу.

Кроме того, есть обертки для основных графических фреймворков разной степени зрелости: LTK, CL-GTK2, CommonQt, CL-CAIRO2. Лично мне доводилось иметь дело с LTK, и работа с ним тривиальна. Хороший пример приложения, его использующего — простой и удобный Lisp-редактор/REPL ABLE.
ABLE screenshot

Windows


Кроме возможности использовать кросс-платформенные фреймворки из прошлого раздела, есть еще LispWorks CAPI, о котором только положительные отзывы. Единственная особенность заключается в том, что, как и большинство профессиональных сред разработки на любых языках под Windows, LispWorks стоит довольно дорого (ок. 1200 $), а CAPI доступна только в профессиональной версии. (Впрочем, попробовать его можно и в trial версии).

Также есть CL-OPENGL, которая, разумеется, кросс-платформенная.

MacOS X


Дополнительно к Unix-библиотекам для MacOS X есть хорошие Cocoa-биндинги в Clozure CL.

Специфические Lisp-решения


Библиотека McCLIM реализует Lisp Interface Manager спецификацию, определяющую весьма развитый протокол по оперированию с графическими примитивами. Хотя спецификация является платформо-независимой, сама библиотека на данный момент основанна на CLX с вытекающими отсюда последствиями пригодности только для Unix-среды. Если это не есть ограничением, то именно она нужна вам, если вы собираетесь писать что-то, сильно завязанное на графику: игру, графический или CAD-редактор, или же новый EmacsClimacs.
Climacs

Оригинальным подходом к GUI, зародившимся в Lisp-среде является проект Cells, который переносит spreadsheet-парадигму взаимозависимых "ячеек" на графический интерфейс. У него несколько Lisp-реализаций c тем или иным бэкендом: CELLS-GTK, CELLTK, CELLO,— а также есть и порты на другие языки.

Выводы


В общем, варианты есть на любой вкус и запросы. С чего начать? Для простого GUI я бы выбрал LTK или CL-GTK2. Оба они кросс-платформенные. Первый по причине максимальной простоты, даже примитивности. Соответственно, и подходит он для примитивных приложений. Второй — потому что это хорошая обертка для современной объектно-ориентированной графической библиотеки, активно развивающаяся, да еще и с русским автором :)

PS. Еще несколько более специфических графических библиотек, конечно, можно найти на Cliki.

3 comments:

Alex Ott said...

статья хорошая, но больно уж аудитория на хабре невменяемая

Vsevolod said...

@Alex, спасибо. :)

Им полезно. На самом деле, я думаю, те, кто задумываются, в большинстве своем не пишут комментарии...

html said...

@vsevolod разве что чтобы ошибку в тексте поправить :)