← Архив: Common Lisp

Embedding Python

Author: · 26.08.2010 20:26
· original author: macros
Здравствуйте!
Есть идея вставить интерпретатор языка Python в SBCL.  Насколько это нужно -- вопрос отдельный, но, по-видимому, доступ к библиотекам Python может пригодиться в определённых ситуациях. Например, Python имеет выход на некоторые C++ билиотеки, а как привязать эти билиотеки к SBCL, непонятно. Нужен отдельный binding к C++. Безусловно, логику приятнее писать на Lisp, но бывает, что нужна какая-нибудь утилита (тот же XML-парсер), которую очень удобно использовать в Python, а в Lisp (по крайней мере в стандартной комплектации stable Debian) аналогичная программа либо вообще отсутствует, либо сильно уступает по функциональности.  А так можно использовать "лучшее из двух миров" :)
Вопрос у меня возник по дизайну. Как сделать API универсальным?  Возможно, эти проблемы типичные  и уже кем-то решались:
1) Передача произвольного  (но разумно ограниченного) числа аргументов,
2) Передача аргуметнов разных типов и разной структуры (одиночные значения, массивы, структуры, массивы структур и т.п.,
3) Управление памятью,
4) То же что в пп 1-2 для получения результата выполнения функции Python
Есть мысль сделать некий универсальный "контейнер" (структуру) на C для обмена данными, абстрагировать  API на Lisp-е, но насколько это практично пока неясно.
В общем, буду рад любям замечаниям, предложениям.
· original author: treep
На cl.net что-то есть на эту тему:
http://common-lisp.net/project/python-on-lisp/
http://common-lisp.net/project/clpython/
· original author: macros
Благодарю. Посмотрел быстренько. Впечатления:
 1) не работает (интерфейс, документация оставляют желать лучшего)
 2) собирается с ошибками, работает ограничено, непрактичен.
По-моему, это всё не то  ...  Без кода на C не обойтись, если хотим возвращать что-то посерьёзнее, чем текстовые строки.  Самописный Python,  возможно, интересен в академических целях .... но зачем? Проще сделать *хороший-интерфейс* к уже существующему интерпретатору. Главная проблема -- это реализация эффективного и удобного обмена данными.
· original author: andy128k
Ничего хорошего из этого не выйдет. CL и Python слишком разные: работа с памятью разная, ООП разное... Сомнительна ценность билиотек питона, кроме тех, которые сами обёртки над сишными.
· original author: macros
> Сомнительна ценность билиотек питона,
Почему? Речь идёт лишь об обмене данными.
· original author: andy128k
> Почему? Речь идёт лишь об обмене данными.
Ну так для обмена данными есть сокеты, пайпы, разделяемая память и т. п.