SWIG - SWIG
Эта статья поднимает множество проблем. Пожалуйста помоги Улучши это или обсудите эти вопросы на страница обсуждения. (Узнайте, как и когда удалить эти сообщения-шаблоны) (Узнайте, как и когда удалить этот шаблон сообщения)
|
Оригинальный автор (ы) | Дэвид М. Бизли |
---|---|
Разработчики) | Разработчики SWIG |
изначальный выпуск | Февраль 1996 г.[1] |
Стабильный выпуск | 4.0.1 / 21 августа 2019 г.[2] |
Репозиторий | |
Написано в | C, C ++ |
Лицензия | GPLv3 |
Интернет сайт | глоток |
В Упрощенная оболочка и генератор интерфейсов (SWIG) является программное обеспечение с открытым исходным кодом инструмент, используемый для подключения компьютерные программы или библиотеки написано в C или C ++ с участием языки сценариев такие как Lua, Perl, PHP, Python, р, Рубин, Tcl и другие языки, например C #, Ява, JavaScript, Идти, D, OCaml, Октава, Scilab и Схема. Вывод также может быть в виде XML.
Функция
Цель состоит в том, чтобы разрешить вызов собственных функций (которые были написаны на C или C ++) другими языками программирования, передать этим функциям сложные типы данных, предотвратить ненадлежащее освобождение памяти, наследовать классы объектов между языками и т. Д. Программист пишет файл интерфейса, содержащий список функций C / C ++, которые нужно сделать видимыми для интерпретатора. SWIG скомпилирует файл интерфейса и сгенерирует код на обычном C / C ++ и на целевом языке программирования. SWIG сгенерирует код преобразования для функций с простыми аргументами; код преобразования для сложных типов аргументов должен быть написан программистом. Инструмент SWIG создает исходный код который обеспечивает связь между C / C ++ и целевым языком. В зависимости от языка этот клей бывает двух видов:
- а общая библиотека что существующий интерпретатор может ссылаться на некоторую форму модуля расширения, или
- разделяемая библиотека, которая может быть связана с другими программами, скомпилированными на целевом языке (например, используя Собственный интерфейс Java (JNI) в Java).
SWIG не используется для вызова интерпретируемых функций собственным кодом; это должно быть сделано программистом вручную.
пример
SWIG обертывает простые объявления C, создавая интерфейс, который точно соответствует тому, как объявления будут использоваться в программе C. Например, рассмотрим следующий интерфейсный файл:[3]
% модуль пример%в соответствии %{внешний двойной грех(двойной Икс);внешний int strcmp(const char *, const char *);внешний int Фу;%}#define СТАТУС 50#define ВЕРСИЯ "1.1"
В этом файле есть две функции грех ()
и strcmp ()
, глобальная переменная Фу
, и две константы СТАТУС
и ВЕРСИЯ
. Когда SWIG создает модуль расширения, эти объявления доступны как функции, переменные и константы языка сценариев соответственно. В Python:
>>> пример.грех(3)0.141120008>>> пример.strcmp('Дэйв','Майк')-1>>> Распечатать пример.квар.Фу42>>> Распечатать пример.СТАТУС50>>> Распечатать пример.ВЕРСИЯ1.1
Цель
Есть две основные причины встраивать скриптовый движок в существующей программе C / C ++:
- Тогда программу можно будет настроить гораздо быстрее, через язык сценариев вместо C / C ++. Механизм создания сценариев может быть открыт для конечных пользователей, чтобы они могли автоматизировать общие задачи путем написания сценариев.
- Даже если конечный продукт не должен содержать движок сценариев, он, тем не менее, может быть очень полезен для написания тестовых сценариев.
Есть несколько причин для создания динамических библиотек, которые можно загружать в существующие интерпретаторы, в том числе:
- Предоставляем доступ к C / C ++ библиотека которому нет эквивалента в языке сценариев.
- Сначала напишите всю программу на языке сценариев, а затем профилирование, перепишите критически важный для производительности код на C или C ++.
История
SWIG написан на C и C ++ и находится в открытом доступе с февраля 1996 года. Первоначальным автором и основным разработчиком были Дэвид М. Бизли кто разработал SWIG, работая аспирантом в Лос-Аламосская национальная лаборатория и Университет Юты и пока на факультете в Чикагский университет. В настоящее время разработку поддерживает активная группа добровольцев во главе с Уильямом Фултоном. SWIG был выпущен под Стандартная общественная лицензия GNU.
Google Summer of Code
SWIG был успешным участником Google Summer of Code в 2008, 2009, 2012 годах. В 2008 году SWIG получил четыре слота. Летом Хаою Бай работал над бэкэндом Python 3.0 от SWIG, Ян Джезабек работал над поддержкой для создания COM wrappers, Шерил Фойл работала над «Переводчиком» комментариев для SWIG, а Мачей Дрвал работал над серверной частью C. В 2009 году SWIG снова участвовала в Google Summer of Code. На этот раз участвовали четыре студента. Баозенг Дин работал над Scilab модуль. Матевз Ековец провел время на C ++ 0x Особенности. Ашиш Шарма провел лето на Цель-C модуль, Миклош Вайна уделял время директорам PHP.
В 2012 году SWIG приняла участие в Google Summer of Code. На этот раз четверо из пяти студентов успешно завершили проект. Лейф Миддельшульте работал над модулем целевого языка C. Свати Шарма усовершенствовал модуль Objective-C. Неха Наранг добавила новый модуль на JavaScript. Дмитрий Кабак работал над документацией исходного кода и Doxygen Комментарии.
Альтернативы
Для Python аналогичную функциональность предлагает ГЛОТОК и Библиотека Boost Boost.python.
Проекты с использованием SWIG
- ZXID (Лицензия Apache, версия 2.0)
- Symlabs SFIS (коммерческая)
- LLDB
- GNU Radio
- Xapian
- TensorFlow
- Apache SINGA
- QuantLib
- Babeltrace
Смотрите также
- Привязка к языку
- Интерфейс внешней функции
- Соглашение о вызове
- Изменение имени
- Интерфейс прикладного программирования
- Бинарный интерфейс приложения
- Сравнение виртуальных машин приложений
- Функция обертки
- GIWS для противоположности SWIG: вызов Java из C / C ++
использованная литература
дальнейшее чтение
- Статья "Раскройте внутренний API вашей программы C / C ++ с помощью быстрого SWIG "Виктор Фолькман
- Статья "Расширения Python в C ++ с использованием SWIG "Майкл Фёч"
- Презентация »Обзор приложения для openSUSE "Клаус Кемпф