SWIG
SWIG | |
---|---|
Тип | Инструмент для разработки |
Автор | Дэвид М. Бизли[вд] |
Разработчик | Сообщество |
Написана на | C, C++ |
Интерфейс | Командная строка |
Операционные системы | POSIX, MS Windows |
Первый выпуск | 1996 год |
Последняя версия |
|
Репозиторий | github.com/swig/swig |
Лицензия | Лицензия в стиле BSD |
Сайт | swig.org |
SWIG (англ. simplified wrapper and interface generator) — свободный инструмент для связывания программ и библиотек, написанных на языках C и C++, с интерпретируемыми (Tcl, Perl, Python, Ruby, PHP) или компилируемыми (Java, C#, Scheme, OCaml) языками. Основная цель: обеспечение возможности вызова функций, написанных на одних языках, из кода на других языках. Программист создаёт файл .i с описанием экспортируемых функций; SWIG генерирует исходный код для склеивания C/C++ и нужного языка, создаёт исполняемый файл.
Вид исполняемого файла зависит от выбранного языка:
- исполняемый файл со встроенным интерпретатором скриптового языка;
- библиотека, функции C/C++ из которой автоматически становятся доступны из другого языка;
- библиотека функций C/C++ и библиотека функций — обёрток над функциями C/C++ (например, JNI для Java).
Движки скриптовых языков встраивают в программы на C/C++ по следующим причинам:
- скорость разработки с использованием скриптового языка выше, чем скорость разработки на C/C++;
- пользователи получают возможность автоматизации своих действий с помощью сценариев. Например, в играх сценарии используются для написания сюжета и уровней;
- разработчики получают возможность автоматизации для тестирования ПО на этапе разработки. Готовое ПО может не включать скриптовый движок.
Причины создания библиотек функций C/C++, доступных интерпретаторам других языков:
- предоставление функциональности, отсутствующей в скриптовом языке;
- оптимизация наиболее часто выполняемых участков кода для повышения производительности (см. анализ производительности).
SWIG написан на языках С и C++, распространяется по лицензии, похожей на BSD, с февраля 1996 года. Лицензия SWIG позволяет использовать, распространять и модифицировать код SWIG для коммерческих и некоммерческих целей практически без ограничений.
Пример: вызов функции C из Python
[править | править код]Пусть имеется код на языке C, реализующий некоторую функцию, например, печать текста.
/* File : try.c */ #include <stdio.h> void echo(void) { printf("\"Hello World\"\n"); }
Чтобы вызвать функцию echo() из Python, необходимо написать интерфейсный файл (расширение .i) следующего содержания:
/* File : try.i */ %module mytry extern void echo(void);
и выполнить в терминале ОС Unix следующие команды:
swig -python try.i gcc -c -fpic try_wrap.c try.c -DHAVE_CONFIG_H -I"/usr/local/include/python2.5" -I"/usr/local/lib/python2.5/config" gcc -shared try.o try_wrap.o -o _mytry.so
Для ОС Windows (при использовании Cygwin или MinGW) команды будут отличаться:
swig -python try.i gcc -c try_wrap.c try.c -DHAVE_CONFIG_H gcc -shared try_wrap.o try.o -o _try.pyd -lpython25
SWIG автоматически создаст несколько файлов: «mytry.py», «try_wrap.c» и исполняемый файл.
Для вызова функции echo() из Python запустите интерпретатор и выполните следующий код:
>>> import mytry >>> mytry.echo() "Hello World" >>>
Примечания
[править | править код]Ссылки
[править | править код]Литература
[править | править код]- Hans Petter Langtangen. Python scripting for computational science. — Springer, 2008. — 750 с. — ISBN 9783540739159.
Для улучшения этой статьи желательно:
|