메타 순환 해석기, 가상 머신 및 성능 향상 간의 관계는 무엇입니까?


12

웹에서 메타 순환 해석기 (SICP 포함)에 대해 읽었으며 일부 구현 코드 (예 : PyPy 및 Narcissus)를 조사했습니다.

나는 메타 원형 평가, Lisp 및 Smalltalk를 크게 활용 한 두 가지 언어에 대해 꽤 많이 읽었습니다. 내가 이해하는 한 Lisp는 최초의 자체 호스팅 컴파일러이고 Smalltalk는 최초의 "진정한"JIT 구현을 가졌다.

내가 완전히 이해하지 못한 것 중 하나는 이러한 인터프리터 / 컴파일러가 어떻게 우수한 성능을 달성 할 수 있는가, 즉 PyPy가 CPython보다 빠른 이유는 무엇입니까? 반사 때문입니까?

또한 스몰 토크 연구를 통해 JIT, 가상 머신 및 리플렉션간에 관계가 있다고 믿었습니다. JVM 및 CLR과 같은 가상 시스템은 많은 유형의 내부 검사를 허용하며 JIT (Just-in-Time) 컴파일에서 유용하게 사용한다고 생각합니다. 그러나 내가 아는 한 가상 머신은 기본 명령어 세트가 있다는 점에서 CPU와 비슷합니다. 가상 머신에는 유형과 참조 정보가 포함되어있어 언어에 구애받지 않고 반영 될 수 있습니까?

해석 된 언어와 컴파일 된 언어가 모두 바이트 코드를 대상 (LLVM, Parrot, YARV, CPython)으로 사용하고 있으며 JVM 및 CLR과 같은 기존 VM은 성능이 크게 향상 되었기 때문에이 문제를 묻습니다. 나는 그것이 JIT에 관한 이야기를 들었지만, JIT는 Smalltalk와 Sun 자체가 Java보다 먼저 해왔 ​​기 때문에 새로운 것이 아무것도 없다는 것을 들었습니다. 과거에 특히 성능이 우수한 VM을 기억하지 못하고 JVM 및 .NET 외부에 많은 비 학술적 VM이 없었으며 성능이 현재만큼 좋지 않았습니다 (이 주장을 소싱 할 수 있기를 바랍니다 만 개인적인 경험으로 말하십시오).

그런 다음 갑자기 2000 년대 후반에 무언가가 바뀌었고 많은 언어가 확립 된 언어로도 성능이 뛰어 나기 시작했습니다. 거의 모든 최신 VM이 성능면에서 급등 할 수있는 JIT 구현에 대해 발견 된 것이 있습니까? 종이나 책?


3
돈. 등 C ++ 및 포트란 핫스팟에 부어 지금, CLR, 모노, V8, 니트로, SpiderMonkey를,에 주입하는 데 사용하는 돈
요 르그 W MITTAG

나는 단지 추측 할 수 있지만, 여기에 설명 된 것처럼 시간이 지남에 따라 개선 된 것이라고 생각합니다. joelonsoftware.com/articles/fog0000000017.html
Doc Brown


1
@Gomi 구현 언어와 구현 언어가 얼마나 유사한 지에 대해서는 아닙니다. RPython으로 작성된 JavaScript, Lisp, Prolog, SmallTalk 및 Ruby 인터프리터가 있으며 PyPy가 제공하는 것과 동일한 장점을 얻습니다. RPython이 Python을 기반으로하는 유일한 이유는 Python 애호가들이 만든 것입니다. PyPy를 빠르게 만드는 RPython의 기능은 Python과는 아무런 관련이 없습니다. 자동 JIT 컴파일러 생성, 가비지 수집기 등-원칙적으로 대부분 다른 언어를 사용하여 수행 할 수 있습니다. 그래도 완전히 새로운 컴파일러를 만들어야합니다.

4
-1 여기 에 적어도 3 가지 다른 질문 이있는 것처럼 보이기 때문에 : (a) 메타 순환 구현이 왜 그렇게 좋은가? (b) 유형 정보로 인해 VM이 효율적이며 성능을 검사하는 것이 유리합니까? (c) 2000 년대 후반에 VM 인기는 어떻게 급증했으며, 어떻게 모두 VM의 성능이 갑자기 향상 되었습니까? 그런 질문을 따로하는 것이 좋습니다.
Oak

답변:


1

3 중 2 : "메타-원형"및 "고성능"언어 런타임 간에는 관계가 없습니다. 고성능을 달성하는 메타 순환 런타임은 원시 코드로 JIT 컴파일하고 원시 코드를 실행하여 수행합니다. 당신의 hi-perf 파이썬 런타임이 파이썬으로 작성되거나 Lisp에서 Lisp 등으로 작성되어야하는 이유는 없습니다. 자체 런타임? 또는 자신의 언어가 다른 언어보다 "더 나은"언어라고 생각 하지 않는다면 왜 언어를 전혀 구현하지 못하는가?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.