C와 C ++는 언어 이고 JVM은 가상 머신 이고 .Net은 플랫폼 이기 때문에 문제는 혼동 됩니다 . 스칼라는 C 또는 C ++로 구현 될 수 있으며 가상 머신의 바이트 코드 대신 머신 코드를 생성 할 수 있습니다.
질문에 대한 답변 :
Scala는 실제로 구현 된 언어 인 Scala가 훨씬 더 나은 언어이기 때문에 C 또는 C ++로 구현되지 않았습니다.
왜 더 낫습니까? 스칼라 언어 에 대한 Odersky의 목표에 대해 읽어보십시오 .
의도 한 질문에 대한 답변 :
Scala는 주로 JVM 바이트 코드를 생성합니다. 그 이유는 안정적이고 효율적인 가비지 수집기, 런타임 최적화 및 JVM에 의한 JIT (Just-In-Time) 컴파일과 같은 기능뿐만 아니라 뛰어난 이식성을 제공하기 때문입니다 .
마지막으로 반복하겠습니다 : JVM 은 실행중인 코드에서 기계 코드 핫스팟을 컴파일 합니다. C 및 C ++ 컴파일러와 마찬가지로 컴파일됩니다.
사용 가능한 다른 가상 머신이 있지만 Scala의 작성자 인 Odersky는 이미 JVM에 매우 익숙했습니다. 그는 CLR을 대안으로 사용하려고했지만 그 목표를 달성하려는 노력은 아직 성공하지 못했습니다.
물어볼 수있는 질문에 대답하기 :
머신 코드로 컴파일해도 JVM 바이트 코드로 컴파일하는 것보다 충분한 이점이 없습니다.
JVM과 동등한 기능을 능가하는 C 또는 C ++에서 마이크로 벤치 마크를 생성 할 수 있습니다. C 또는 C ++에서 매우 최적화 된 코드가 Java 또는 Scala에서 매우 최적화 된 코드를 능가 할 것입니다. 그러나 장기 실행 프로그램의 차이점은 그다지 크지 않습니다.
Scala는 짧은 실행 프로그램의 오버 헤드가 너무 크기 때문에 특히 좋은 스크립팅 언어가 아닙니다.
그러나 대부분의 경우 개발 속도 와 유지 관리 용이성이 실행 속도보다 중요합니다 . 사람들이 쉽게 이해하고 변경할 수있는 매우 높은 수준의 코드 작성에 더 관심이있는 경우 JVM에서 제공하는 런타임 최적화가 C 또는 C ++ 컴파일러에서 수행 한 컴파일 타임 최적화를 쉽게 이길 수있어 JVM (및 CLR)을 만들 수 있습니다. ) 실제로 더 빠르게 실행되는 대상입니다.
따라서 스칼라 컴파일러 가 머신 코드 실행 파일인지 아니면 스칼라 프로그램 이 머신 코드 인지에 대한 질문이 있더라도 잠재적 속도 게인이 반드시 실제 속도 게인 으로 변환되는 것은 아닙니다 .
그리고 그건 그렇고
반례를 드리겠습니다 : Haskell. 하스켈은 기계 코드를 생성하지만 하스켈 프로그램은 스칼라보다 데비안의 총격전에서 더 나쁘다. 그렇다면 머신 코드로 직접 컴파일하면 스칼라 프로그램이 더 빠를 것이라고 확신 할 수 있습니까?