Могу ли я использовать оболочки C++, сделанные в Allegro Common Lisp в SBCL или CLISP

В настоящее время я учусь оборачивать код C++ в Lisp, чтобы я мог вызывать функции C++ из Lisp. Я изучаю SWIG, и я хотел бы узнать больше о части SWIG Allegro Common Lisp. Сейчас я использую Express(бесплатное) дополнение Allegro, и оно имеет ограничение кучи около 50 МБ, поэтому оно не позволяет мне загружать научную библиотеку GNU для Lisp, GSLL.

Я хотел бы создать огромное приложение, которое будет использовать код из GSLL, обертки Lisp для OpenCV, которые я создаю с помощью SWIG, и другие обертки Lisp для кода C++, которые я создаю с помощью SWIG, и я хотел бы иметь возможность использовать все OpenCV. Функции интерфейса C++ от Lisp и SWIG Allegro Common Lisp Поддержка C++ кажется наиболее полной (и поправьте меня, если я ошибаюсь) и лучшим способом обернуть большинство функций C++. (Я говорю это потому, что раздел Allegro Common Lisp руководства SWIG намного больше, чем раздел Common Lisp.

Я создаю привязки OpenCV C++ для Lisp в выпуске Allegro Common Lisp Express и каким-то образом перемещаю их в SBCL или CLISP, чтобы я мог использовать весь свой код GSLL с моими обертками OpenCV в реализациях Lisp, которые не имеют ограничения кучи, или использует Allegro / Партнерство SWIG предполагает, что я использую только оболочки SWIG C++, сделанные в Allegro, с учебным пособием SWIG Allegro в Allegro Common Lisp.

Пожалуйста, исправьте меня, если я ошибаюсь, полагая, что поддержка Allegro Common Lisp является более полной, чем другие реализации ", или если есть лучший способ обернуть все функции C++ OpenCV или если интерфейс C OpenCV такой же полный, как C++ интерфейс, и я могу просто обернуть это.

Пожалуйста, цитируйте онлайн-ресурсы, когда это уместно.

1 ответ

SWIG, предназначенный для AllegroCL, будет генерировать оболочки, специфичные для проприетарной FFI Allegro, и не будет использоваться в других реализациях lisp. В противном случае SWIG для common-lisp может генерировать оболочки, предназначенные для CFFI, который служит уровнем совместимости для всех внешних интерфейсов lisps, которые он поддерживает. Как таковой, однако, CFFI имеет тенденцию быть чем-то вроде "наименьшего общего знаменателя" среди поддерживаемых списков, и, вероятно, поколение SWIG не будет таким всеобъемлющим.

Насколько я понимаю, мало что можно сделать, чтобы полностью взаимодействовать между C++ и Common-Lisp. Я знаю о некоторых экспериментальных ветвях ECL, которые стремились сделать это, которые требовали определенной степени успеха, но я не верю, что они достигли уровня публичного выпуска. По крайней мере, если бы вы пошли по этому пути, вы бы работали на платформе LISP с очень и очень ограниченной поддержкой.

Есть еще один вариант, который вы, возможно, захотите изучить для создания оболочек C, которые могут дать более полные результаты, но нацелены на среду компилятора CLANG и LLVM. Если это приемлемо, вы можете посмотреть на github следующие два проекта:

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

Другие вопросы по тегам