2011-01-18 11 views
17

havegames iPhoneのSchemeで書かれています。 SchemeコンパイラはC言語にコンパイルされているため、Objective-Cと混在してXCodeと統合するのは簡単でした。CのHaskell/MLのようなコンパイラはありますか?

ARM/iOSバックエンドを有効にするHaskellおよびOCamlコンパイラ用のawarepatchesです。しかし、それらは非公式で実験的/不安定に見えます。

私はSchemeの動的型付けより静的なhaskell/ML型の型システムを好んでいます。 Scheme/Gambit-Cと同様の方法でCコードを生成できる安定したML/SML/Haskellコンパイラはありますか?

+4

GHC(-fvia-cオプション)にCバックエンドがあります。 –

+3

@ SK-logicはいですが、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を対象プログラム全体の最適化Haskellのコンパイラで、iPhoneのサポートは、〜/ .jhc/targets.ini

詳しいHaskellの情報に

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

を置くことによって追加することができHaskell wiki上にあり、 JHCマニュアル。

+1

私はそれを感謝しました。ありがとう。私は、jhcは機能が完了していないという印象を持っています。私は1つの言語でプロジェクトを開始したいと思いますし、後でコンパイラが私のやっていることをサポートしていないと思っています。 コンパイルエラーを参照してください:http://mirror.seize.it/report.html – LennyStackOverflow

+2

JHCはAFAIKです.Haskell98のほぼ完全な実装です(いくつかのギャップがありますが、非常にマイナーなIIRCです)。しかし、 MPCのようなGHCの拡張。コンパイルエラーへのあなたのリンクは、GHCのテストスイートに対するものと思われます。私はJHCがGHC特有の拡張を必然的に必要とするため、ほとんどのコードをコンパイルできるとは思っていません。 –

+4

私はJHCの使用経験がかなりありますが、機能の完全性は問題ありません(拡張機能を除く)。現在のバージョンのjhcの問題は、複雑な式で誤ったCコードを生成するコードジェネレータの安定性です。私はいくつか修正されているがまだ問題があるように見えるこれらの問題を特定するのを手伝ってきました。また、GCを使用しない場合よりも多くテストされた(有効なCコードを生成するのに役立つ)-fjgcを有効にし、FFIライブラリを使用している場合は--optc = '-fno-strict-aliasing' 。 –

6

(私はこのツールチェーンはまだIPhone上で、具体的試みがなされていることは確かではないよ。)

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。もちろん、多くのlibは現在、より高度なghc-only機能に依存しています。しかし、Haskell '98は汎用プログラミングに十分対応しています。

+1

jhcよりもnhcを好む理由はありますか?私は広範囲にどちらかを使用していません。 –

+0

@Michael Snoyman私は事実は分かりませんが、jhcよりも安定していると思うでしょうが、ソースからnhcをビルドして、クロスコンパイルする必要があります.jhcはクロスコンパイラです。プラットフォームとCコンパイラを使用して新しいプラットフォームをターゲットとすることを自明にする目的のinfファイルを定義できます。 –

+1

nhcは私が知る限りクロスコンパイラとして動作します - http://haskell.org/nhc98/install.htmlのドキュメントを参照してください。はい、これはクロスコンパイラとしてnhcをコンパイルする必要がありますが、それは難しくありません。 – sclv

関連する問題