2011-01-18 4 views
17

사람 havegames의 iPhone 용 Scheme입니다. (일부) Scheme 컴파일러가 C로 컴파일되기 때문에 Objective-C와 혼합하여 XCode와 통합하기가 쉽습니다.C에 하스켈/ML 같은 컴파일러가 있습니까?

Haskell 및 OCaml 컴파일러가 ARM/iOS 백엔드를 사용하기 위해 awarepatches입니다. 그러나 그것들은 비공식적이고 실험적/불안정한 것처럼 보인다.

저는 Scheme의 동적 타이핑에 비해 정적 haskell/ML 유형 시스템을 선호합니다. Scheme/Gambit-C와 비슷한 방식으로 C 코드를 생성하는 안정적인 ML/SML/Haskell 컴파일러가 있습니까?

+4

GHC (-fvia-c 옵션)에 C 백엔드가 있습니다. –

+3

@ SK-logic yes이지만 ghc의 C 백엔드는 교차 컴파일하지 않습니다. 또한 부트 스트래핑 목적으로 만 사용할 수 있습니다 (이제 원시 코드와 llvm 백엔드가 있음). – sclv

+0

그런데 Gambit-C 핵심 사용자가 iOS에서 REPL을 출시했습니다. http://itunes.apple.com/us/app/gambit-repl/id434534076?mt=8&ls=1 – LennyStackOverflow

답변

15

나는 ML을 도울 수 없지만 JHC을 보았습니까? JHC 휴대용 C를 대상으로 하스켈 컴파일러를 최적화 전체 프로그램이며, 아이폰 지원은 ~/.jhc/targets.ini

더 하스켈 정보가 Haskell wiki에 있고에

[iphone] 
cc=arm-apple-darwin-gcc 
merge=le32 

을 넣어 추가 할 수 있습니다 JHC 매뉴얼

+1

감사합니다. 감사합니다. . 나는 jhc가 완전한 기능이 아니라는 인상을 가지고있다. 한 언어로 프로젝트를 시작하고 나중에 컴파일러가 내가하는 일을 지원하지 않는다는 것을 알게됩니다. 컴파일 오류보기 : http://mirror.seize.it/report.html – LennyStackOverflow

+2

JHC는 Haskell98을 거의 완벽하게 구현 한 AFAIK입니다 (몇 가지 차이점이 있지만 아주 적은 IIRC). 그러나 MPC와 같은 GHC의 확장. 컴파일 오류에 대한 링크는 GHC의 테스트 슈트에 대한 것 같습니다. JHC가 GHC 관련 확장을 필요로하는만큼 대부분의 코드를 컴파일 할 수있을 것으로 기대하지는 않습니다. –

+4

나는 JHC를 사용하는 데 꽤 많은 경험이있다. 기능의 완성도는 확장을 제외하고는 문제가 아니다. jhc의 현재 버전의 문제는 때로는 복잡한 식의 오류 C 코드를 생성하는 코드 생성기의 안정성이다. 나는 어떤 문제가 수정되었지만 여전히 문제가있는 것으로 보이는 이러한 문제를 확인하는 것을 도왔습니다. 또한 GC를 사용하지 않고보다 많은 테스트를 거친 (유효한 C 코드를 생성하는 데 도움이 될 수있는) -fjgc를 활성화하고 FFI 라이브러리를 사용하는 경우 --optc = '- fno-strict-aliasing' . –

6

(I이 툴체인은 아직 아이폰에 구체적으로 시도 된 것이 확실하지 않다.)

MLTon 표준 ML 컴파일러를 최적화하는 전체 프로그램입니다. 당신은 예컨대, 컴파일에 MLTon에 -keep g를 통과하여 C 코드 주위를 유지할 수 있습니다 :

c:/Program Files (x86)/MLton/bin/mlton.bat" -verbose 1 -keep g test.sml

또한 ARM 코드 natively를 생성 할 수 있습니다.

4

nhc98 : http://www.haskell.org/nhc98/

전체 하스켈 '98. 물론 많은 라이브러리가 이제는 고급 ghc 전용 기능에 의존합니다. 그러나 Haskell '98은 범용 프로그래밍을 할 수 있습니다.

+1

jhc보다 nhc를 선호하는 이유가 있습니까? 나는 둘 중 하나를 광범위하게 사용하지 않았다. –

+0

@Michael Snoyman 사실에 대해서는 잘 모르겠지만 jhc보다 안정적이라고 가정 할 수 있습니다.하지만 jhc가 크로스 컴파일러가되도록 소스에서 nhc를 빌드해야합니다. 플랫폼 및 C 컴파일러를 사용하여 새 플랫폼을 대상으로 하는 일을 쉽게 수행 할 수 있도록 대상 inf 스타일 파일을 정의 할 수 있습니다. –

+1

nhc는 내가 아는 한 크로스 컴파일러로 작동합니다. http://haskell.org/nhc98/install.html의 문서를 참조하십시오. 그렇지만 크로스 컴파일러로 nhc를 컴파일해야합니다.하지만 어렵지는 않습니다. – sclv