SWIG

위키백과, 우리 모두의 백과사전.

SWIG
원저자데이브 비즐리(Dave Beazley)
개발자SWIG 개발자
발표일1996년 2월(28년 전)(1996-02)[1]
안정화 버전
4.0.2 / 2020년 6월 8일(3년 전)(2020-06-08)[2]
저장소
프로그래밍 언어C, C++
운영 체제크로스 플랫폼
라이선스GPL
웹사이트swig.org

SWIG(Simplified Wrapper and Interface Generator)는 CC++로 작성된 컴퓨터 프로그램이나 라이브러리들을 루아, , 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, 그리고 STATUSVERSION이라는 두 개의 상수가 있다. 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를 이용한 프로젝트[편집]

같이 보기[편집]

참고 문헌[편집]

각주[편집]

외부 링크[편집]

  • SWIG 위키데이터에서 편집하기 - 공식 웹사이트