2010-06-02 7 views

답변

24

V8 스냅 샷 기능을 사용하여 코드를 사전 처리 컴파일 할 수 있습니다. 이것은 여전히 ​​스냅 샷을로드하기 위해 V8의 전체 버전을 실행해야한다는 것을 의미합니다 (즉, 독립 실행 형 네이티브 코드를 얻지 못하고 V8 VM 내에서 실행해야합니다). 따라서 저장하는 모든 것은 컴파일 시간입니다 . 또한 스냅 샷 코드의 품질은 반드시 JIT 코드와 다를 수 있습니다. 예를 들어 JIT 코드는 사용 가능한 경우 SSE2/SSE3을 사용할 수 있으므로 어떤 스냅 샷을 사용할 수 없기 때문입니다.

4

내가 아는 한, V8은 순전히 just-in-time 컴파일러이며 ahead-of-time 옵션이 없습니다.

내가 링크 된 기사에서 설명한대로 JIT는 더 나은 유연성을 갖춘 최적화를 허용합니다.

+0

하지만 JIT는 적시에 작업을 완료해야합니다. 따라서 그들은 비용이 많이 드는 (메모리와 같은 시간과 자원) 작업을 피해야합니다. – Christian

3

대신 .NET JavaScript/JScript 컴파일러를 사용하여 .NET exe를 만든 다음 Mono ahead-of-time compiler을 사용하여 .NET exe를 기본 .exe로 변환 할 수 있습니다.

+0

Mono AOT를 시도하지 않은 사람에게 메모를하고 내가했던 것처럼 super hyped되었습니다. Windows를 지원하지 않습니다. 그것은 어떤 리눅스에서도 동작하지만, 누가 알겠는가? 아마도 이것은 바뀔 것이다. –

0

V8을 사용하는 대신 Js2Py을 사용하여 JavaScript를 Python으로 컴파일 한 다음 ShedSkin compiler을 사용하여 Python 소스를 C++로 변환 할 수 있습니다. 아직이 방법을 테스트하지는 못했지만 흥미로운 가능성이 있습니다.

+0

ShedSkin은 암시 적으로 정적으로 형식화 된 Python ** 만 지원한다고 설명합니다. JS에서 동적 유형 지정을 사용하거나 Js2Py에서 동적 유형 지정을 생성 한 경우이 접근 방식은 작동하지 않습니다. 그럼에도 불구하고 흥미로운 접근법. – Textfield

+0

@Textfield 물론 동적 인 타이핑을 허용 할 수있는 몇몇 다른 Python-to-C++ 변환기 (http://stackoverflow.com/questions/4650243/convert-python-program-to-c-code)가 있습니다. –

+0

@AndersonGreen이 작업에 의문이 생깁니다. Js2Py는 런타임 동안 함수 바이트 코드 수정과 같은 꽤 비표준적인 파이썬 기술을 사용합니다. 컴파일러는이를 지원할 수 없습니다. Js2Py가 Python 자체보다 약 10 배 더 느리기 때문에 매우 느릴 것입니다. 그러나 여전히 흥미로운 접근법 –