Jump to content

СВИГ

СВИГ
Оригинальный автор(ы) Дэвид М. Бизли
Разработчик(и) SWIG-разработчики
Первоначальный выпуск февраль 1996 г .; 28 лет назад ( 1996-02 ) [1]
Стабильная версия
4.2.1 [2]  Отредактируйте это в Викиданных / 24 февраля 2024 г .; 3 месяца назад ( 24 февраля 2024 г. )
Репозиторий
Написано в С , С++
Лицензия лицензия GPLv3
Веб-сайт глоток .org

Упрощенный генератор оболочек и интерфейсов ( SWIG ) — это программный инструмент с открытым исходным кодом, используемый для соединения компьютерных программ или библиотек, написанных на C или C ++, с языками сценариев, такими как Lua , Perl , PHP , Python , R , Ruby , Tcl и другими языками. такие реализации, как C# , Java , JavaScript , Go , D , OCaml , Octave , Scilab и Scheme . Вывод также может быть в форме XML .

Функция [ править ]

Цель состоит в том, чтобы позволить вызывать собственные функции (написанные на C или C++) из других языков программирования, передавать этим функциям сложные типы данных, предотвращать ненадлежащее освобождение памяти, наследовать классы объектов между языками и т. д. Программист пишет файл интерфейса, содержащий список функций C/C++, которые должны быть видны интерпретатору. SWIG скомпилирует файл интерфейса и сгенерирует код на обычном C/C++ и целевом языке программирования. SWIG сгенерирует код преобразования для функций с простыми аргументами; код преобразования для сложных типов аргументов должен быть написан программистом. Инструмент SWIG создает исходный код , который обеспечивает связь между C/C++ и целевым языком. В зависимости от языка этот клей бывает двух видов:

  • общая библиотека , к которой существующий интерпретатор может подключиться как к некоторой форме модуля расширения, или
  • общая библиотека, которую можно связать с другими программами, скомпилированными на целевом языке (например, с использованием собственного интерфейса Java (JNI) в Java).
  • исходный код общей динамической библиотеки , который должен быть скомпилирован и динамически загружен (например, собственные расширения Node.js)

SWIG не используется для вызова интерпретируемых функций из собственного кода; это должно быть сделано программистом вручную.

Пример [ править ]

SWIG оборачивает простые объявления C, создавая интерфейс, который точно соответствует тому, как объявления будут использоваться в программе C. Например, рассмотрим следующий файл интерфейса: [3]

%module example

%inline %{
extern double sin(double x);
extern int strcmp(const char *, const char *);
extern int Foo;
%}
#define STATUS 50
#define VERSION "1.1"

В этом файле есть две функции sin() и strcmp(), глобальная переменная Fooи две константы STATUS и VERSION. Когда SWIG создает модуль расширения, эти объявления доступны как функции языка сценариев, переменные и константы соответственно. В Питоне:

>>> example.sin(3)
0.141120008
>>> example.strcmp('Dave','Mike')
-1
>>> print(example.cvar.Foo)
42
>>> print(example.STATUS)
50
>>> print(example.VERSION)
1.1

Цель [ править ]

Есть две основные причины встроить механизм сценариев в существующую программу на C/C++:

  • Тогда программу можно будет настроить гораздо быстрее, используя язык сценариев вместо C/C++ . Механизм сценариев может даже быть доступен конечному пользователю, чтобы он мог автоматизировать общие задачи путем написания сценариев.
  • Даже если конечный продукт не будет содержать скриптовый движок, он, тем не менее, может быть очень полезен для написания тестовых сценариев.

Существует несколько причин для создания динамических библиотек, которые можно загружать в существующие интерпретаторы, в том числе:

  • Обеспечьте доступ к библиотеке C/C++ , не имеющей эквивалента на языке сценариев.
  • Сначала напишите всю программу на языке сценариев, а после профилирования перепишите критичный к производительности код на C или C++.

История [ править ]

SWIG написан на C и C++ и доступен для общественности с февраля 1996 года. Первоначальным автором и основным разработчиком был Дэвид М. Бизли, который разработал SWIG, работая аспирантом в Национальной лаборатории Лос-Аламоса и Университете Юты , а также во время работы над SWIG. факультет Чикагского университета . В настоящее время разработку поддерживает активная группа волонтеров во главе с Уильямом Фултоном. SWIG выпущен под лицензией GNU General Public License .

Google Summer of Code [ править ]

SWIG успешно участвовал в Google Summer of Code в 2008, 2009, 2012 годах. В 2008 году SWIG получила четыре слота. Хаоюй Бай проводил лето над бэкэндом SWIG Python 3.0, Ян Джезабек работал над поддержкой создания оболочек COM , Шерил Фойл работала над «Переводчиком комментариев» для SWIG, а Мацей Дрвал работал над бэкэндом C. В 2009 году SWIG снова приняла участие в Google Summer of Code. На этот раз в нем приняли участие четыре студента. Баозэн Дин работал над модулем Scilab . Матевз Ековец уделил время функциям C++0x . Ашиш Шарма провел лето за модулем Objective-C , Миклош Вайна — за PHP-директорами.

В 2012 году SWIG приняла участие в Google Summer of Code. На этот раз четверо из пяти студентов успешно справились с проектом. Лейф Миддельшульте работал над модулем целевого языка C. Свати Шарма усовершенствовал модуль Objective-C. Неха Наранг добавила новый модуль по JavaScript. Дмитрий Кабак работал над документацией исходного кода и Doxygen комментариями .

Альтернативы [ править ]

Для Python аналогичную функциональность предлагают SIP , Pybind11 и библиотека Boost.python компании Boost .

Проекты с использованием SWIG [ править ]

См. также [ править ]

Ссылки [ править ]

  1. ^ «История СВИГа» .
  2. ^ «Релиз v4.2.1» .
  3. ^ «Основы СВИГ» .
  4. ^ Мюллер, Маркус. «Журнал изменений для GNU Radio 3.9.0.0» . Гитхаб .

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: d6b8eb14242e247fd1a2220149fd0557__1712230740
URL1:https://arc.ask3.ru/arc/aa/d6/57/d6b8eb14242e247fd1a2220149fd0557.html
Заголовок, (Title) документа по адресу, URL1:
SWIG - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)