Programing

애플리케이션에 어떤 자바 스크립트 엔진을 삽입 하시겠습니까?

crosscheck 2020. 12. 2. 08:02
반응형

애플리케이션에 어떤 자바 스크립트 엔진을 삽입 하시겠습니까?


취미 게임 엔진에 자바 스크립트를 삽입하고 싶습니다. 이제 5 세대 Javascript 엔진이 출시되었으므로 (모두 엄청나게 빠르게) C ++ 프레임 워크에 어떤 엔진을 포함 할 것인지 궁금합니다 (실제 쉽게 포함)?

참고 : 명확히하기 위해 DOM 스크립팅이나 브라우저에서 자바 스크립트를 작성하는 데 관심이 없습니다.

다음은 지금까지의 링크와 스레드의 몇 가지 팁입니다.

기록을 위해서, 나는 Lua를 좋아하고 이미 직장에서 약 5 번 정도 게임 엔진에 삽입했습니다.

그러나 이제 이것은 취미 프로젝트이며 Javascript는 대부분의 웹 개발자가 알고 있으며 ECMA, Flash 및 Flex 개발자, 스크립팅에 Javascript 및 XML을 사용하는 게임 엔진이 더 사용자 친화적이고 더 큰 사용자 기반 (그리고 지금까지 게임에 자신의 기술을 사용할 기회가 없었던 사용자)은 Lua를 사용하는 사용자 기반 (그리고 주변에 많은 사람들이 있습니다!).

또한 기록을 위해 V8을 사용하겠습니다. 대부분 C ++ 스타일을 좋아하기 때문입니다.


Mozilla의 SpiderMonkey 는 매우 쉽고 잘 문서화되어 있습니다. C API이지만 C ++로 래핑하는 것은 간단합니다. 스레드로부터 안전하도록 컴파일 할 수 있습니다. 이는 메인 로직을 한 스레드에, 사용자 인터페이스 로직을 두 번째 스레드에두고 싶기 때문에 게임에 유용합니다.

Google의 V8 은 C ++를 사용하고 있기 때문에 좋은 선택 일 수 있지만 아직 사용해 본 적이 없습니다. 문서 에 따르면 ( Daniel James 덕분에 ) V8은 스레드로부터 안전하지 않지만 향후 변경 될 수 있습니다.

이 또한의 웹킷의 SquirrelFish는 하지만 이전에보고되었을 때 그의 독립 실행 형 버전을 찾을 수 없습니다.


SpiderMonkey와 V8을 모두 사용해 보았습니다. SpiderMonkey를 사용하면 아무것도 작동하지 못했습니다. mozilla.org에서 컴파일 할 예제도 얻지 못했습니다.

V8은 기본적으로 작동했으며 기본적인 C ++ <-> Javascript 상호 작용이 매우 빠르게 진행되었습니다. V8을 사용하는 사람들을위한 몇 가지 Google 목록이 있으며 대부분의 질문에 이미 답변이 있습니다.


v8은 현재 x86, x64 및 arm 프로세서에서만 작동한다고 생각합니다. 단점이 될 수 있습니다.

스레드 안전성과 관련하여 include / v8.h에서 :

 * Multiple threads in V8 are allowed, but only one thread at a time
 * is allowed to use V8.  The definition of 'using V8' includes
 * accessing handles or holding onto object pointers obtained from V8
 * handles.  It is up to the user of V8 to ensure (perhaps with
 * locking) that this constraint is not violated.

소스 파일에서 더 많은 것을 읽을 수 있습니다 (doxygen 문서처럼 보이지만 어디에도 올려 놓지 않은 것 같습니다).

업데이트 : 해당 댓글은 아마도 얼마 전에 삭제되었습니다. 이제 v8 Isolate에 엔진의 인스턴스를 나타내는 객체 가있는 것 같습니다 . 단일 Isolate인스턴스는 한 번에 단일 스레드에서만 사용할 수 있지만 다른 Isolate인스턴스는 다른 스레드에서 동시에 사용할 수 있습니다.


Java Script가 실제로 게임에 적합한 언어입니까? 많은 게임이 스크립팅을 위해 Lua 프로그래밍 언어를 사용하고 있습니다. 통합하기 쉽고 매우 작으며 거의 ​​모든 플랫폼에서 컴파일되며 배우기 쉽습니다.

이 주제는 다소 벗어 났지만 틀 밖에서 생각하는 것은 일을 올바르게하는 데 중요 할 수 있습니다.


벤치 마크 V8 처음 V8은 1,000% (또는 무엇이든) 빨리 많이 재귀에서 좋은 엔진을 선호하는쪽으로 가중 된 다른 엔진에 비해 것을 보여 주었다 장면을 쳤을 때 나왔다. 코드에서 많은 재귀를 사용하는 경우 V8은 속도 측면에서 상당한 이점을 제공 할 수 있습니다. "실제 세계"(현재 적어도) 웹 자료의 경우 SquirrelFish Extreme이 현재 승자 인 것 같습니다 ( 내 자신의 비공식 테스트 결과 에 대한 주제에 대한 내 블로그 게시물 참조 ).

다른 사람들이 지적했듯이 통합의 용이성과 문서의 품질이 순수한 속도보다 우세 할 수 있습니다. 배송하지 않으면 잭을 의미하지 않습니다!


스크립팅 엔진과 C ++에 대해 말할 때 chaiscript 를 고려할 수도 있습니다 . ecma 스크립트 (~ Javascript)에 가깝고 C ++에 포함하기가 매우 쉽습니다.

웹 페이지의 판매자 :

... 반면에 ChaiScript는 처음부터 C ++와의 통합을 염두에두고 설계되었습니다. ... ChaiScript에는 메타 컴파일러, 라이브러리 종속성, 빌드 시스템 요구 사항 및 어떤 종류의 레거시 수하물도 없습니다. At는 노출하는 모든 C ++ 함수와 원활하게 작동 할 수 있습니다. 어떤 유형에 대해서도 명시 적으로 말할 필요는 없으며 기능 중심입니다.

ChaiScript를 사용하면 프로그램에 세 줄의 코드를 추가하고 빌드 단계를 전혀 수정하지 않음으로써 말 그대로 애플리케이션 스크립팅을 시작할 수 있습니다.


SpiderMonkey의 차세대 진화 인 TraceMonkey가 나올 때까지 기다렸습니다. 더 빠르고 더 나은 디자인. (Adobe Flash에서 기증 한 코드 사용).

Tracemonkey는 실제 사용을 기반으로 런타임시 구조를 적극적으로 최적화하여 반복적 인 작업을 훨씬 빠르게 수행하는 데 자부심을 가지고 있으며, 이는 게임 확장에 유용합니다.


Javascript .NET을 사용해보십시오.

http://javascriptdotnet.codeplex.com/

Google V8을 구현합니다. .NET 코드에서 직접 자바 스크립트를 컴파일하고 실행할 수 있으며 자바 스크립트 코드에서 사용할 CLI 객체도 제공 할 수 있습니다. 그리고 V8은 아마도 성능면에서 최고의 엔진 일 것입니다. 그것은 자바 스크립트에서 네이티브 코드를 생성합니다.


Google의 V8 을 살펴볼 수도 있습니다 . 그래도 꽤 새롭습니다.


나는 v8이 빠른 자바 스크립트 엔진을 비명을 지르고 있기 때문에 계속 주시 할 것이며 성숙해질수록 크로스 플랫폼 지원을 개발할 것이라고 확신합니다.

참고 URL : https://stackoverflow.com/questions/93692/which-javascript-engine-would-you-embed-in-your-application

반응형