2011-01-18 8 views
17

Personas havegames escrito para el iPhone en Scheme. Debido a que (algunos) compiladores de esquemas se compilan hasta C, fue fácil mezclarlos con Objective-C e integrarlos con XCode.¿Hay un compilador Haskell/ML-like a C?

Soy aware de patches para los compiladores Haskell y OCaml para habilitar ARM/iOS-backends. Pero esos parecen extraoficiales y experimentales/inestables.

Prefiero un sistema de tipo haskell/ML estático sobre la escritura dinámica de Scheme. ¿Existe un compilador ML/SML/Haskell estable que genere código C para que pueda usarse de forma similar a Scheme/Gambit-C?

+4

Hay un backend de C en GHC (opción -fvia-c) –

+3

@ SK-logic yes pero el backend de C para ghc no se compila de forma cruzada. También es realmente (ahora que tenemos código nativo y backends llvm) solo todavía para fines de arranque. – sclv

+0

Por cierto, el chico clave Gambit-C lanzó un REPL en iOS: http://itunes.apple.com/us/app/gambit-repl/id434534076?mt=8&ls=1 – LennyStackOverflow

Respuesta

15

No puedo ayudar con ML, pero ¿has mirado JHC? JHC es un todo-programa de optimización de compilador de Haskell que se dirige a C portátil y soporte para iPhone se puede añadir al poner

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

en ~/.jhc/targets.ini

Más información Haskell está en la Haskell wiki y el manual de JHC.

+1

Lo he considerado, gracias . Tengo la impresión de que jhc no es una función completa. No me gustaría iniciar un proyecto en un idioma y en algún momento posterior encontraré que el compilador no admite lo que estoy haciendo. Ver los errores de compilación: http://mirror.seize.it/report.html – LennyStackOverflow

+2

JHC es AFAIK una implementación casi completa de Haskell98 (hay algunas lagunas, pero muy poco importante IIRC), sin embargo, no es compatible con todos Extensiones de GHC, como los MPTC. Su enlace para compilar errores parece estar en contra del conjunto de pruebas de GHC; No esperaba que JHC pudiera compilar la mayor parte de ese código ya que gran parte de él requeriría necesariamente extensiones específicas de GHC. –

+4

Tengo bastante experiencia en el uso de JHC, la completitud de las funciones no es el problema (excepto las extensiones), el problema con la versión actual de jhc es la estabilidad del generador de códigos que a veces genera expresiones erróneas. He intentado ayudar a identificar estos problemas para los cuales algunos se han solucionado, pero todavía parece haber problemas. También debe asegurarse de habilitar -fjgc que ha sido probado más (y puede ayudar a generar código C válido) que sin usar un GC y si está utilizando las librerías FFI habilite --optc = '- fno-strict-aliasing' . –

6

(no estoy seguro de que esta cadena de herramientas se ha intentado específicamente en el iPhone todavía.)

MLTon es un todo-programa de optimización del compilador ml estándar. Usted puede mantener alrededor de su código C pasando a -keep g MLton durante la compilación, por ejemplo:

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

También puede generar código ARM natively.

4

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

completa Haskell '98. Por supuesto, muchas bibliotecas ahora se basan en funciones más avanzadas solo para ghc. Pero Haskell '98 es bastante capaz de programación de propósito general.

+1

¿Hay alguna razón para preferir nhc a jhc? No he usado ninguno extensamente. –

+0

@Michael Snoyman No lo sé con certeza, pero supongo que es más estable que jhc, pero aún necesita construir nhc desde el código fuente para hacerlo de compilación cruzada, ya que jhc es un verdadero compilador cruzado para el que puede definir el archivo de estilo de Inf de destino para describir la plataforma y qué compilador de C usar, por lo que es trivial para apuntar a nuevas plataformas. –

+1

nhc funciona como un compilador cruzado hasta donde yo sé - vea los documentos aquí: http://haskell.org/nhc98/install.html. Aunque sí, esto requiere compilar nhc como compilador cruzado, pero eso no debería ser difícil. – sclv