2011-01-18 8 views
17

Persone have scritto games per l'iPhone in Schema. Poiché (alcuni) compilatori di schemi sono stati compilati in C, è stato facile combinarli con Objective-C e integrarli con XCode.C'è un compilatore Haskell/ML-like in C?

I am aware di patches per i compilatori Haskell e OCaml per abilitare i backend ARM/iOS. Ma quelli appaiono non ufficiali e sperimentali/instabili.

Preferisco un sistema di tipo statico haskell/ML-type sulla digitazione dinamica di Scheme. Esiste un compilatore ML/SML/Haskell stabile che genera codice C in modo che possa essere utilizzato in modo simile a Scheme/Gambit-C?

+4

C'è un backend C in GHC (opzione -fvia-c) –

+3

@ SK-logic yes ma il backend C per ghc non esegue la compilazione incrociata. È anche veramente (ora che abbiamo codice nativo e back-end di llvm) ancora solo per scopi di bootstrap. – sclv

+0

A proposito, il core di Gambit-C ha rilasciato un REPL su iOS: http://itunes.apple.com/us/app/gambit-repl/id434534076?mt=8&ls=1 – LennyStackOverflow

risposta

15

Non posso aiutarti con ML, ma hai guardato allo JHC? JHC è un intero programma di ottimizzazione Haskell compilatore che gli obiettivi portatile C, e supporto per iPhone può essere aggiunto mettendo

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

in ~/.jhc/targets.ini

Maggiori informazioni Haskell è sul Haskell wiki e il manuale JHC.

+1

L'ho preso in considerazione, grazie . Ho l'impressione che jhc non sia completo. Non vorrei iniziare un progetto in una lingua e in un secondo momento trovare il compilatore non supporta quello che sto facendo. Vedere gli errori di compilazione: http://mirror.seize.it/report.html – LennyStackOverflow

+2

JHC è AFAIK un'implementazione quasi completa di Haskell98 (ci sono alcune lacune, ma IIRC molto minori), tuttavia non supporta tutte Le estensioni di GHC, come le MPTC. Il tuo link per compilare errori sembra essere contro la suite di test di GHC; Non mi aspetterei che JHC sia in grado di compilare la maggior parte di quel codice, in quanto molto spesso richiederebbe estensioni specifiche di GHC. –

+4

Ho un bel po 'di esperienza nell'uso di JHC, la completezza delle funzionalità non è il problema (eccetto per le estensioni), il problema con la versione corrente di jhc è la stabilità del generatore di codice che a volte su espressioni complicate genera codice C errato, Ho cercato di aiutare a identificare questi problemi per i quali alcuni sono stati risolti ma ci sono ancora problemi. Assicurati inoltre di abilitare -fjgc che è stato testato di più (e può aiutare a generare un codice C valido) che senza usare un GC e se stai usando le librerie FFI abilita --optc = '- fno-strict-aliasing' . –

6

(io non sono certo che questo toolchain è stata tentata in particolare sul iPhone di sempre.)

MLTon è un intero programma di ottimizzazione standard ML compilatore. È possibile mantenere attorno al codice C passando -keep g a MLTon alla compilazione, per esempio:

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

Si può anche generare il codice ARM natively.

4

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

completa Haskell '98. Naturalmente molte librerie ora si basano su funzionalità più avanzate di ghc. Ma Haskell '98 è in grado di programmare in modo generico.

+1

C'è un motivo per preferire nhc su jhc? Non ho usato nessuno dei due. –

+0

@Michael Snoyman Non lo so per certo, ma suppongo che sia più stabile di jhc ma devi comunque creare nhc dal sorgente per renderlo cross-compile dove jhc è un vero cross-compilatore per il quale tu può definire il file di stile inf target per descrivere la piattaforma e il compilatore C da utilizzare rendendolo banale per indirizzare le nuove piattaforme. –

+1

nhc funziona come compilatore incrociato per quanto ne so - vedere i documenti qui: http://haskell.org/nhc98/install.html. Anche se sì, questo richiede la compilazione di nhc come compilatore incrociato, ma non dovrebbe essere difficile. – sclv