HaskellとC++の両方を使用するアプリケーションを使用する可能性がある場合。 Haskellで管理するレイヤーとC++で管理するレイヤーを教えてください。
誰かがそのような関連付けをしたことがありますか(確かに)?
(Haskellサイトには、HaskellにはgccによってCでコンパイルできるモードがあるため、非常に簡単であると書かれています)
最初は、すべてのI/O操作をC++レイヤーに保持すると思います。 GUI管理だけでなく。
かなり漠然とした質問ですが、Haskellを学ぶことを計画しているときに、Haskellコード(実際にコーディングで学ぶ)に作業を委任することを考えていたので、Haskellの利点が見られる部分を選択したいと思います。
Haskellの利点は、使用できる強力な抽象化です。 1と0、アドレスとレジスタではなく、計算と型のプロパティと継続について考えています。
C++の利点は、必要に応じてどれだけ厳密に最適化できるかです。気の利いたモナド、矢印、部分適用、純粋関数の作成については考えていません。C++を使用すると、ベアメタルにたどり着くことができます。
これら2つのステートメントの間には緊張関係があります。彼の論文では 「構造化プログラミングとgo to
ステートメント、” ドナルドクヌースは書いた
私は長い間、プログラミングの才能は、物事の微視的ビューから巨視的ビューに簡単に切り替える能力ieで構成されていると感じていました。抽象化のレベルを流暢に。
HaskellとC++の使い方だけでなく、いつどのように結合するかを知っていると、あらゆる種類の問題が解決されます。
私が書いた最後の大きなプロジェクトでは、 [〜#〜] ffi [〜#〜] Cで書かれた社内レーダーモデリングライブラリを使用していました。それを再実装するのはばかげていて、高い表現をしていました。アプリケーションの残りの部分のレベルのロジックは苦痛だったでしょう。私はその「頭脳」をHaskellに保存し、必要なときにCライブラリを呼び出しました。
あなたはこれを演習としてやりたいので、同じアプローチをお勧めします:Haskellでsmartsを書いてください。 HaskellをC++のスレーブとしてシャックリングすると、おそらくあなたを苛立たせたり、時間を無駄にしているように感じさせたりするでしょう。その強みがある各言語を使用してください。
これが私が物事を見る方法です:
したがって、私がHaskell、C、C++、Pythonに精通しているとしましょう。アプリケーションの作成方法は、次のとおりです。
この答えは包括的な答えというよりは物語ですが、私は計算言語学の論文にHaskell、PythonとC++、およびいくつかのCとJava私が作成しなかったツール。Pythonを接着コードとして使用してHaskell、C++、およびJavaプログラム。
C++は、機能の発生をカウントする非常に単純でタイトなループでした。基本的には、数学と単純なI/Oだけでした。私は実際にPythonグルーコードに#define
sでいっぱいのヘッダーを書き出させて再コンパイルすることでオプションを制御しました。ちょっとハッキーですが、うまくいきました。
Haskellはすべて中間処理でした。使用したさまざまなCおよびJavaパーサーからの複雑な出力を取得し、無関係なデータをフィルター処理し、C++コードが期待する単純な形式に変換しました。次に、 C++出力を出力し、LaTeXマークアップに変換しました(他の形式の中でも)。
これはあなたがPythonが強いと期待する領域ですが、Haskellは複雑な構造の操作をより簡単にすることがわかりました; Pythonはおそらく単純な行に適しています-行への変換ですが、解析ツリーをスライスおよびダイシングしていたので、Pythonでコードを記述したときに、入力タイプと出力タイプを忘れていました。
私はHaskellをより構造化されたスクリプト言語のように使用していたので、いくつかのファイルI/Oユーティリティを作成することになりましたが、それ以上に、ツリーとリストを操作するための組み込みライブラリで十分でした。
要約すると、私のような問題がある場合は、メモリに制約のある速度が重要な部分にはC++、高レベルの変換にはHaskell、すべてを実行するにはPython)をお勧めします。
私は両方の言語を混ぜたことがありませんが、あなたのアプローチは私には少し逆さまに感じます。 Haskellは高レベルの操作に適していますが、C++は最適化でき、タイトループやその他のパフォーマンスが重要なコードに最も役立ちます。
Haskellの最大の利点の1つは、IOをモナドにカプセル化することです。これがIOがタイムクリティカルでない限り、理由はわかりません。 C++でそれを行う。
GUIの部分については、おそらく正しいでしょう。 Haskell GUIライブラリはたくさんありますが、C++にはQtCreatorなどの強力なツールがあり、面倒なタスクを大幅に簡素化します。