예, 동적 언어 용 컴파일러를 만드는 것은 가능합니다. 다음은 동적 언어 용 컴파일러의 예입니다.
- CPython은 Python 컴파일러가있는 Python 프로그래밍 언어의 구현입니다.
- PyPy는 Python 컴파일러가있는 Python 프로그래밍 언어의 구현입니다.
- 자이 썬은 Python 컴파일러가있는 Python 프로그래밍 언어를 구현 한 것입니다.
- IronPython은 Python 컴파일러가있는 Python 프로그래밍 언어의 구현입니다.
- Pynie는 Python 컴파일러가있는 Python 프로그래밍 언어의 구현입니다.
- YARV는 Ruby 컴파일러가있는 Ruby 프로그래밍 언어의 구현입니다.
- Rubinius는 Ruby 컴파일러가있는 Ruby 프로그래밍 언어의 구현입니다.
- MacRuby는 Ruby 컴파일러가있는 Ruby 프로그래밍 언어의 구현입니다.
- JRuby는 Ruby 컴파일러가있는 Ruby 프로그래밍 언어의 구현입니다.
- IronRuby는 Ruby 컴파일러가있는 Ruby 프로그래밍 언어의 구현입니다.
- MagLev는 Ruby 컴파일러가있는 Ruby 프로그래밍 언어의 구현입니다.
- Quercus는 PHP 컴파일러가있는 PHP 프로그래밍 언어의 구현체입니다.
- P8은 PHP 컴파일러가있는 PHP 프로그래밍 언어의 구현입니다.
- V8은 ECMAScript를 컴파일러가 ECMA 스크립트 프로그래밍 언어의 구현입니다.
모든 언어 컴파일러에 의해 구현 될 수있다 일반적으로
, 및 모든 언어 통역사에 의해 구현 될 수있다. 도 자동으로에서 인터프리터에서 컴파일러를 파생시킬 수 있으며 그 반대의 경우도 가능합니다.
대부분의 현대적인 언어 구현은 모두 해석과 편집, 때로는 여러 컴파일러를 사용합니다. Rubinius를 예로 들어 보겠습니다. 첫 번째 Ruby 코드는 Rubinius 바이트 코드로 컴파일됩니다. Rubinius 바이트 코드는 Rubinius VM에 의해 해석됩니다. 여러 번 해석 된 코드는 Rubinius 컴파일러 IR로 컴파일 된 다음 LLVM IR로 컴파일 된 다음 "네이티브 코드"(그게 무엇이든)로 컴파일됩니다. Rubinius에는 통역사와 컴파일러가 각각 하나씩 있습니다.
V8 다른 예이다. 그것은 실제로 인터프리터가 있지만, 두 개의 다른 컴파일러가 있습니다. 하나의 매우 빠르며, 매우 메모리 효율적인 컴파일러는 최적화되지 않았고 다소 느린 코드를 생성합니다. 여러 번 실행 된 코드는 버려지고 두 번째 컴파일러에서 다시 컴파일됩니다.이 코드는 적극적으로 최적화 된 코드를 생성하지만 컴파일하는 데 더 많은 시간과 메모리를 사용합니다.
그러나 결국 은 인터프리터없이 코드를 실행할 수 없습니다. 컴파일러는 코드를 실행할 수 없습니다. 컴파일러는 한 언어의 프로그램을 다른 언어로 번역합니다. 그게 전부 야. 결국 당신이 원하는 모든 것을 번역 할 수 있습니다. 뭔가은 코드를 실행해야하며, 그 것은 해석기입니다. 소프트웨어 또는 실리콘으로 구현 될 수도 있지만 여전히 통역사입니다.
Python * is * compiled. 파이썬 바이트 코드로. –
나에게있어서 파이썬은 해석된다. 바이트 코드를 컴파일하는 것은 원래의 코드를 단지 빠른 방식으로 해석하는 것일 뿐이다. 그러나 마지막으로 바이트 코드가 해석됩니다. – jfcalvo
* 언어는 컴파일되지 않고 해석되지 않습니다. 언어의 ** 구현 **은 해석되거나 컴파일되며, 그 다음에도 명확한 구별이 없습니다. [타무라의 돌기]을 사용하여 실제로 (http://en.wikipedia.org/wiki/Partial_evaluation#Futamura_projections)는 그러므로 그것이 ** 것이 상당히 명백 통역자 지정해, * 자동 방식 컴파일러를 얻을 수있어 ** 파이썬/루비 컴파일러를 만들 수 있습니다. 진짜 질문은 : 더 빠를 것인가, 아니면 전혀 이점을 줄까요? – Bakuriu