33

Haskell プログラムまたはライブラリがあり、Haskeller 以外の人、場合によっては C プログラマーがアクセスできるようにしたいとします。GHC を使用して C にコンパイルし、これを C ソースとして配布できますか?

これが可能であれば、誰かが最小限の例を提供できますか? (例: Makefile)

GHC を使用して、必要なコンパイラ フラグとヘッダーを自動的に判断し、これを単一のフォルダーにバンドルすることは可能ですか?

基本的に、私はプログラムの一部を C と Haskell で書き、それを tarball として配布できるようにすることに興味がありますが、ターゲットに GHC と Cabal をインストールする必要はありません。

4

7 に答える 7

18

これはjhcで実行できます。これは、C にコンパイルされる完全なプログラム最適化コンパイラです。しかし、GHC がサポートするすべての派手な拡張機能を備えているわけではありません。

于 2010-01-09T00:19:42.270 に答える
10

できたとしても「Cソース」とは呼びません。GHC はコンパイル システムの一部として C を使用できますが、生成された C コードはわずかでも判読できません。読んで理解できたとしても、それを変更しても意味がありません。なぜなら、(変更を Haskell にバックポートする以外に) C ハッカーによる変更をプログラムの将来のバージョンに組み込む方法がないからです。

「ソース」という用語は、人間が作成し、プログラムを生成するために使用されるコードを意味します。この場合、それは Haskell です。コンパイラによって生成された C は「ソース コード」ではなく、中間表現です。

于 2010-01-03T10:01:22.837 に答える
6

GHCではそこに到達できません。C 経由でコンパイルされた場合でも、GHC は結果のアセンブリを操作してセグメントをシャッフルし、巨大なランタイム システムと大量の荷物に依存しています。

一方、必要な機能が John Meacham の JHC コンパイラのやや制限された機能セットでサポートされている場合は、運が良いかもしれませんが、かなりコンパクトな C 出力を生成します。

于 2010-01-05T21:21:21.097 に答える
1

これが古い投稿であることは知っていますが、ajhcについても言及したいと思います。Ajhc は、新しい機能を追加し、後で更新を jhc にプッシュする計画で jhc をフォークしました。

于 2014-01-21T19:41:06.100 に答える
0

Haskell プログラムまたはライブラリがあり、Haskeller 以外の人、場合によっては C プログラマーがアクセスできるようにしたいとします。GHC を使用して C にコンパイルし、これを C ソースとして配布できますか?

C にコンパイルできますが、結果の C は人間が読めるものではありません。ヘッダー ファイルを作成し、優れた C FFI を一緒に使用することをお勧めします。いずれにせよ、生成された C を配布することはばかげたことのように思えます。

基本的に、私はプログラムの一部を C と Haskell で書き、それを tarball として配布できるようにすることに興味がありますが、ターゲットに GHC と Cabal をインストールする必要はありません。

私は、GHC を含まない解決策を知りません。少なくとも Haskell RTS を配布する必要があります。

于 2018-04-12T02:42:22.277 に答える
-1

GHC を使用して C にコンパイルし、これを C ソースとして配布できますか?

いいえ、それはできませんが、Haskell の外部関数インターフェイス (FFI) を使用して、haskell と c の間のインターフェイスを簡単に作成できます。

ここでより多くの例を見ることができます。

于 2010-01-03T07:48:44.937 に答える