swig를 이용한 c++ 랩핑

29
swig 를 이용한 성능개선용 C++ 모듈 랩핑

Upload: naver-d2

Post on 14-Feb-2017

98 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: swig를 이용한 C++ 랩핑

swig 를이용한성능개선용C++ 모듈랩핑

Page 2: swig를 이용한 C++ 랩핑

Is python slow?

Page 3: swig를 이용한 C++ 랩핑

C/C++ == Speed

출처: https://attractivechaos.github.io/plb/

Page 4: swig를 이용한 C++ 랩핑

Java Native Interface, JNI

Page 5: swig를 이용한 C++ 랩핑

먼저랩퍼클래스를만든다

Page 6: swig를 이용한 C++ 랩핑

그걸컴파일하면헤더파일이나온다

Page 7: swig를 이용한 C++ 랩핑

헤더파일의시그네처를복붙한다

Page 8: swig를 이용한 C++ 랩핑

python API#include <Python.h>

Page 9: swig를 이용한 C++ 랩핑

그냥쓰면된다

Page 10: swig를 이용한 C++ 랩핑

하지만데이터를 Python API 로직접파싱및생성해야한다

Page 11: swig를 이용한 C++ 랩핑

Platform InvokeP/Invoke

Page 12: swig를 이용한 C++ 랩핑

DLL 을만든다음 Pinvoke로랩핑한다

Page 13: swig를 이용한 C++ 랩핑

각언어를위해특별히코드를작성해야하기도한다.

랩핑을해줘야하는경우도있다

타입간에마샬링을직접해줘야하는경우도있다

Page 14: swig를 이용한 C++ 랩핑
Page 15: swig를 이용한 C++ 랩핑
Page 16: swig를 이용한 C++ 랩핑

Interface File C/C++ Source File C/C++ Header File

SWIG C/C++ Compiler

C++ WrapperSource File

Target LanguageWrapper Source File

Shared Library

Page 17: swig를 이용한 C++ 랩핑

Header.h

Page 18: swig를 이용한 C++ 랩핑

Test.i

Page 19: swig를 이용한 C++ 랩핑

C:\Users\User> swig –csharp Test.i

Page 20: swig를 이용한 C++ 랩핑

Why Should I Use This????

Page 21: swig를 이용한 C++ 랩핑

TestClass.cs

Page 22: swig를 이용한 C++ 랩핑

ConsoleAppPInvoke.cs

Page 23: swig를 이용한 C++ 랩핑

예외처리가매우확실하다

100프로터진다

Page 24: swig를 이용한 C++ 랩핑

개발사이클이엄청짧아진다

Page 25: swig를 이용한 C++ 랩핑

하지만물론단점도있다

툴이지원하는 C/C++ 기능들에함정이엄청많다

툴이지원하는 C/C++ 기능들이한정적이다

레퍼런스겁나길다… 진짜로..

언어별로툴이처리하는방식이다르다

Page 26: swig를 이용한 C++ 랩핑

사용하기위해서는 Swig 가지원하는범위와, 처리하는방법을잘파악해야한다

std::auto_ptrstd::dequestd::liststd::mapstd::setstd::stringstd::vectorstd::arraystd::shared_ptr

Page 27: swig를 이용한 C++ 랩핑

출처: http://www.techmikael.com/2010/01/net-serialization-performance.html

Page 28: swig를 이용한 C++ 랩핑

swig.org

Page 29: swig를 이용한 C++ 랩핑