質問

Haskellプログラムまたはライブラリを持っているとしましょう。これは、非ハスクラー、潜在的にCプログラマーがアクセスできるようにしたいとします。 GHCを使用してCにコンパイルしてから、これをCソースとして配布できますか?

これが可能であれば、誰かが最小限の例を提供できますか? (例、メイクファイル)

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

基本的に、CとHaskellでプログラムの一部を作成し、それをターボールとして配布できることに興味がありますが、GHCとCABALをインストールするためにターゲットを要求することはありません。

役に立ちましたか?

解決

CとHaskellでプログラムの一部を作成し、それをターボールとして配布できることに興味がありますが、GHCとCABALをインストールするためにターゲットを要求することはありません。

あなたはあなたが見つける可能性は低い非常に多くのインフラストラクチャを求めています。それを覚えておいてください Haskellプログラムは、たとえCにコンパイルされても、大規模で複雑なランタイムシステムに依存することはほぼ確実です その正しい操作のため。最低限、その実行時間システムは、ゴミ収集と怠zyな評価をサポートする必要があります。したがって、単なる翻訳の問題以上のものがあります。

この問題にソフトウェアの配布の問題として取り組むことをお勧めします。 Tarballではなく、お気に入りの配布プラットフォーム(Debian、Red Hat、InstallShieldなど)にパッケージを提供してください。個人的には、他の人の努力を再利用するために、私はCabalをチェックし、必要に応じてCabalを設置するものを目指し、Cabalを使用して、ユーザーが必要とする残りの部分をインストールします。

他のヒント

これを行うことができます JHC. 。これは、Cにコンパイルされるコンパイラを最適化する完全なプログラムです。GHCがサポートするすべての派手な拡張機能はありません。

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

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

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

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

私はこれが古い投稿であることを知っていますが、私もまだ言及したかった AJHC. 。 AJHCは、新しい機能を追加し、後で更新をJHCに戻す計画でJHCをフォークしました。

Haskellプログラムまたはライブラリを持っているとしましょう。これは、非ハスクラー、潜在的にCプログラマーがアクセスできるようにしたいとします。 GHCを使用してCにコンパイルして、これをCソースとして配布できますか

Cにコンパイルすることはできますが、結果のCは人間が読み取られません。ヘッダーファイルを書き、それに加えて優れたC FFIを使用する方が良いでしょう。いずれにせよ、生成されたCを分配すると、愚か者の用事のように思えます。

基本的に、CとHaskellでプログラムの一部を作成し、それをターボールとして配布できることに興味がありますが、GHCとCABALをインストールするためにターゲットを要求することはありません。

GHCを伴わない解決策はわかりません。少なくともHaskell RTSを配布する必要があります。

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

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

もっと例を挙げることができます ここ.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top