애플리케이션에 어떤 자바 스크립트 엔진을 삽입 하시겠습니까?
취미 게임 엔진에 자바 스크립트를 삽입하고 싶습니다. 이제 5 세대 Javascript 엔진이 출시되었으므로 (모두 엄청나게 빠르게) C ++ 프레임 워크에 어떤 엔진을 포함 할 것인지 궁금합니다 (실제 쉽게 포함)?
참고 : 명확히하기 위해 DOM 스크립팅이나 브라우저에서 자바 스크립트를 작성하는 데 관심이 없습니다.
다음은 지금까지의 링크와 스레드의 몇 가지 팁입니다.
- 거미 원숭이
- tracemonkey (참고 : spidermonkey와 역 호환) :
- V8
- 다람쥐
기록을 위해서, 나는 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이 빠른 자바 스크립트 엔진을 비명을 지르고 있기 때문에 계속 주시 할 것이며 성숙해질수록 크로스 플랫폼 지원을 개발할 것이라고 확신합니다.
'Programing' 카테고리의 다른 글
과부하 해결 알고리즘에서 모호성은 어떻게 결정됩니까? (0) | 2020.12.02 |
---|---|
C #에서 이중 디스패치? (0) | 2020.12.02 |
long double vs double (0) | 2020.12.02 |
내비게이션 컨트롤러 상단 레이아웃 가이드가 맞춤 전환에 적용되지 않음 (0) | 2020.12.02 |
Redux 상태 및 URL 쿼리 매개 변수를 동기화하는 방법 (0) | 2020.12.02 |