SWIG
원저자 | 데이브 비즐리(Dave Beazley) |
---|---|
개발자 | SWIG 개발자 |
발표일 | 1996년 2월[1] |
안정화 버전 | 4.3.0[2] ![]() |
저장소 | |
프로그래밍 언어 | C, C++ |
운영 체제 | 크로스 플랫폼 |
라이선스 | GPL |
웹사이트 | swig |
SWIG(Simplified Wrapper and Interface Generator)는 C나 C++로 작성된 컴퓨터 프로그램이나 라이브러리들을 루아, 펄, PHP, 파이썬, R, 루비, Tcl과 같은 스크립트 언어 및 C 샤프, 자바, 자바스크립트, Go, 모듈라-3, OCaml, 옥타브, Scilab, 스킴 등의 다른 언어들과 연결하는데 사용하는 오픈 소스 소프트웨어 도구이다.
역사
[편집]SWIG는 C와 C++로 작성되어 있으며, 1996년 2월 이후로 일반에 공개되었다. 초기 개발자이자 주요 개발자는 데이브 비즐리이며, 로스 앨러모스 국립 연구소 및 유타 대학교에서 학부생으로 일하는 동안, 또 시카고 대학교에서 교수로 활동하는 동안 SWIG를 개발하였다. 개발은 현재 윌리엄 펄튼(William Fulton) 주도의 활발한 자발자들의 그룹에 의해 지원을 받고 있다. SWIG는 GNU GPL에 의거하여 출시되고 있다.
기능
[편집]다른 프로그래밍 언어가 C나 C++로 작성된 네이티브 함수의 호출을 허용하고, 복잡한 자료형을 해당 함수에 전달하고, 메모리를 부적절하게 해제하지 못하게 하며, 언어 간에 오브젝트 클래스를 상속할 수 있게 하는 것이 목적이다. 프로그래머는 C/C++ 함수의 목록이 포함된 인터페이스 파일을 작성하여 인터프리터에 보이게 한다. SWIG는 인터페이스를 컴파일한 다음 일반 C/C++ 및 대상 프로그래밍 언어를 발생시킨다. SWIG는 단순한 인수가 포함된 함수들을 위한 변환 코드를 만든다. 즉, 복잡한 인수형의 변환 코드는 프로그래머에 의해 작성되어야 한다. SWIG 도구는 C/C++과 대상 언어 간의 접착제(glue)를 제공하는 소스 코드를 만든다. 이 언어에 의존하여 이 접착제는 2가지 형태로 나타난다:
- 현존하는 인터프리터가 특정한 형태의 확장 모듈로 링크할 수 있는 공유 라이브러리
- 대상 언어로 컴파일된 다른 프로그램으로 링크할 수 있는 공유 라이브러리 (예를 들어 자바의 JNI, 자바 네이티브 인터페이스를 사용)
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++ 프로그램에서 스크립트 엔진을 임베드하는 주된 이유는 2가지가 있다:
- C/C++ 대신 스크립트 언어를 통해 프로그램을 훨씬 더 빠르게 개인화(customize)시킬 수 있다. 스크립트를 작성함으로써 공통 작업을 자동화될 수 있으므로 스크립트 엔진은 최종 사용자에게 노출될 수도 있다.
- 최종 제품이 스크립트 엔진을 포함하지 않는다고 하더라도 테스트 스크립트 작성에 매우 유용할 수 있다.
현존하는 인터프리터에 로드할 수 있는 동적 라이브러리를 만드는 이유가 몇 가지 있는데 다음을 포함한다:
- 스크립트 언어와 동등하지 않은 C/C++ 라이브러리로의 접근을 제공한다.
- 우선 스크립트 언어의 전반적인 프로그램을 작성하고 프로파일링을 거친 다음 성능에 많은 영향을 미치는 코드를 C나 C++로 재작성한다.
SWIG를 이용한 프로젝트
[편집]- ZXID
- Symlabs SFIS (상용)
- LLDB (디버거)
- GNU 라디오
- Xapian
- Armory
같이 보기
[편집]참고 문헌
[편집]- Article "Expose Your C/C++ Program's Internal API with a Quick SWIG 보관됨 2006-09-01 - 웨이백 머신" by Victor Volkman
- Article "Python Extensions In C++ Using SWIG" by Michael Fötsch
- Presentation "Application overview for openSUSE" by Klaus Kämpf
각주
[편집]- ↑ “SWIG History”.
- ↑ “Release 4.3.0”. 2024년 12월 10일에 확인함.
- ↑ http://www.swig.org/Doc3.0/SWIG.html#SWIG_nn9
외부 링크
[편집]- SWIG
- 공식 웹사이트