2010-05-25 3 views
4

스크립팅 기능으로 C++ 응용 프로그램을 확장하는 방법을 연구 중이며 Python 또는 JavaScript를보고 있습니다. 사용자 정의 스크립트는 응용 프로그램의 데이터 모델에 액세스 할 수 있어야합니다.C에서 스크립트 엔진 포함

이러한 스크립팅 엔진을 내장 한 경험이 있습니까? 잠재적 인 함정은 무엇입니까?

+2

당신은 정말로 루아도 고려해야한다. 그것은 훌륭하게 C++와 통합된다. –

+0

안녕하세요 토니 조랑말, 다른 프로그래밍 언어가 나옵니다. ZetScript라고 불립니다. 아직 스크립트 엔진을 찾고 있는지는 모르겠지만 필요에 맞게 살펴보십시오! http://zetscript.org –

답변

6

Boost::Python 라이브러리 (ok, ok, sarcasm.)를 사용하여 Python을 쉽게 포함 할 수 있습니다. 언어 간 기능에있어 "쉬운"것은 없습니다. Boost는 이러한 개발을 돕기 위해 많은 노력을 기울였습니다. Boost-> Python 인터페이스에서 맹세 한 개발자 중 한 명. 그의 코드는 Python에서 사용자가 프로그래밍 할 수 있으며 REPL은 UI에 내장되어 있습니다. 놀랄 만한.

그러나 SWIG 및 Java와 같은 다른 언어를 사용하여 내 경험이 더 잘 관찰되었습니다. 저는 현재 C++을 파이썬으로 포장하기 위해 SWIG와 협력 중입니다. 예외, 스레딩, 언어 간 다형성 등 모든 종류의 문제가 있습니다.

나는이 두 위치를 먼저 보았습니다. 내가 말했듯이 "쉬운"것은 없지만이 두 가지 모두 삶을 더 살기 좋게 만듭니다.

1

부스터 :: 파이썬은 wheaties 대답처럼 매우 성숙한 솔루션입니다.

루아는 임베드하기 쉽다는 평판을 얻었지만 나 자신을 시도하지는 않았습니다.

사용자가 R이므로 RInside 패키지를 사용하여 R을 삽입하는 데 더 관심이 있습니다. 간단한 예제는

#include <RInside.h>    // for the embedded R via RInside 

int main(int argc, char *argv[]) { 

    RInside R(argc, argv);   // create an embedded R instance 

    R["txt"] = "Hello, world!\n"; // assign a char* (string) to 'txt' 

    R.parseEvalQ("cat(txt)");  // eval the init string, ignoring any returns 

    exit(0); 
} 

이며 패키지에 몇 가지 예가 더 있습니다. RInsideRcpp 인터페이스 패키지 중 일부를 사용하여 R 엔진 주위에 멋진 래퍼를 제공합니다.

7

루아는 또한 프로그램에 포함시키기에 훌륭한 후보입니다. 그 자체가 매우 자체 포함되어 있으며 심지어 네이티브 크로스 언어 호출 시스템은 나쁘지 않습니다.

JavaScript의 경우 가장 좋은 방법은 지금 작업하기에 쉬운 V8 (Google에서 제공)을 보는 것입니다.

+2

루아와 함께 C++에서 루아를 쉽게 사용할 수 있습니다. 잘 작동합니다. – Nikko

4

파이썬이나 자바 스크립트에 실제로 설정되어 있지 않다면, Lua을 사용할 때 고려해야 할 사항이 있습니다. 임베디드 스크립팅 엔진으로 설계 되었기 때문에 C 및 C++이 이미 잘 수행 한 기능과 거의 겹치지 않습니다. C callable 함수의 관점에서 코드와 루아 엔진 사이의 인터페이스 만 있으면 꽤 쉽게 임베드 할 수 있습니다.

C++ 수준의 인터페이스를 사용하려는 경우 LuaBind을 살펴 보는 것이 좋습니다.이 인터페이스를 사용하면 작성한 C++ 클래스 (생성하는 프록시)에서 파생되는 Lua 클래스를 사용할 수 있습니다.

1

angelscript 을 간단하고 쉽게 포함 할 수 있습니다. c/C++ 구문과 유사합니다. 무료 및 corss- 플랫폼. 몇 시간 후에 시작할 수 있습니다.