SWIG - Википедия - SWIG

SWIG
Оригинальный автор (ы)Дэвид М. Бизли
Разработчики)Разработчики SWIG
изначальный выпускФевраль 1996 г.; 24 года назад (1996-02)[1]
Стабильный выпуск
4.0.1 / 21 августа 2019 г.; 16 месяцев назад (2019-08-21)[2]
Репозиторий Отредактируйте это в Викиданных
Написано вC, C ++
ЛицензияGPLv3
Интернет сайтглоток.org

В Упрощенная оболочка и генератор интерфейсов (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

Смотрите также

использованная литература

дальнейшее чтение

внешние ссылки