2012-02-08 3 views
16

GHC (Glorious Glasgow Haskell 컴파일러)는 Haskell을 "Core"로 컴파일 한 다음 해당 Core를 컴퓨터 코드로 컴파일합니다. 하스켈 프로그램을 마치 "바이트 코드"처럼 GHC 코어로 배포하는 것이 실제적일까요? 그러한 배포판에 어떤 이점이 있습니까? 그 이유는 무엇?"바이트 코드"로 GHC 코어?

답변

20

실용적이지 않습니다. GHC 코어는 이식 가능하지 않습니다. 예를 들어, 32 비트 시스템에서 64 비트 산술은 코어의 외부 함수 호출로 컴파일되지만 64 비트 시스템에서는 기본 기계어 산술을 사용합니다.

더 중요한 것은 GHC는 실제로 읽을 수 없습니다 코어; 그것은 몇 가지 형식으로 인쇄 할 수 있지만 그 형식을 다시 읽을 수있는 실제 코드는 없습니다. 그렇게하는 데 큰 장애가 있는지 확실하지 않지만 오랫동안 문서화 된 상황이었습니다 , 그래서 나는 언젠가는 지원을 기대하지 않을 것이다.

코어도 일반적으로 하스켈에 매우 가깝습니다. 당신이 그 형태로 코드를 배포함으로써 무엇을 살 것인지 분명하지 않습니다. 하스켈을 코어로 변환하는 데 걸리는 시간은 일반적으로 최종 프로그램을 링크하는 것과 같은 일을하는 데 걸리는 시간보다 짧을 것이므로 일반적으로 컴파일 시간을 많이 절약하지는 못합니다.

또한 Haskell 소스 코드보다 Core 검사가 적습니다. (-dcore-lint이이를 완화시킬 수 있다고 생각하지만) 효과적으로 샌드 빅셔닝하는 것은 어려울 것입니다. Safe Haskell이 있지만 Safe Core는 없습니다. 물론, 이러한 단점은 바이트 코드의 소스가 신뢰되는 경우에는 적용되지 않습니다.

기본적으로 GHC 코어는 Python 바이트 코드 및 JVM과 같은 목적으로 설계된 이식 가능한 바이트 코드 형식과 달리 컴파일러의 중간 언어입니다.

참고로 GHC 에는에 GHCi에서 사용 된 바이트 코드 인터프리터가 있습니다. 거기에 사용 된 바이트 코드는 또한 이식성이 없기 때문에 GHC가 정상적인 동작에서 생성하는 기계 코드와 비교할 때 내가 생각할 수있는 장점이 없다.

관련 문제