現実世界で関数型プログラミングを使用するにはどうすればよいですか? [閉まっている]
-
02-07-2019 - |
質問
関数型言語は、状態を排除することでバグを回避するだけでなく、スレッド数を気にせずに自動的に簡単に並列化できるため、優れています。
ただし、Win32開発者として、アプリケーションの一部のdllにHaskellを使用できますか?そして、私がそうする場合、私にとって自動的に取られる本当の利点がありますか?もしそうなら、何がこの利点をコンパイラーに与えますか?
F#は、複数のコアとCPUで作成した関数を自動的に並列化しますか?タスクマネージャーのスレッドカウントが増加するのを見ますか?
基本的に私の質問は、どのようにしてHaskellを実用的な方法で使い始めることができますか?
解決
Real World Haskellという本はまさにあなたが探しているもののようです。オンラインで無料で読むことができます:
他のヒント
F#には、さまざまなCPUまたはマシンに機能を渡す魔法の妖精ダストは含まれていません。 F#/ Haskellおよびその他の関数型プログラミング言語が行うことは、作成されたスレッドまたはCPUに関係なく処理できる関数を簡単に作成できるようにすることです。
私が参加しているポッドキャストへのリンクをここに投稿するのは適切ではないと思いますが、少し落ち込んでいるようですが、Matt Podwysockiと話したHerding Codeのエピソードで同じ質問をし、興味深い回答をしました。そのエピソードには、関数型プログラミングに関連する優れたリンクも多数あります。 1つのリンクタイトル" なぜ機能プログラミングが重要なのか"それはあなたにいくつかの答えを提供するかもしれません。
これも興味深いかもしれません: " 実世界の関数型プログラミング"
例はF#とC#にありますが、理論はかなり一般的です。 私が読んだもの(プレリリース)からは間違いなく面白いですが、これまでのところ、Parallel Extensionsのようなライブラリを使用して、C#にもっと固執したいと思っていると思います。
言及しなかったが、C ++を使用していると思われる。簡単に機能する方法の1つは、C ++ / CLI to F#を使用することです。 C ++には「マジックピクシーダスト」が含まれています。 (IJW:It Just Worksと呼ばれる)を使用して、マネージコードを呼び出したり、呼び出したりできます。これにより、F#コードの呼び出しは、C#からの呼び出しとほぼ同じくらい簡単です。
これを1つのプログラム(FreeSWITCH)で使用しました。これは完全にC / C ++で書かれています。単一のマネージC ++ / CLI(/ clrスイッチを使用)を使用すると、魔法のようにマネージコードに移行し、そこからF#プラグインを読み込んで実行できます。デプロイをさらに簡単にするために、F#はすべての依存関係を静的にリンクできるため、F#ランタイムファイルをデプロイする必要はありません。 CLRコードを魅力的にするもう1つのことは、マネージコード(デリゲート)をCコードに渡すことができ、ランタイムが自動的にサンクを作成することです。
Haskellの方法を選択する場合、探している機能はFFI:Foreign Function Interfaceです。ただし、C#/ CLI with F#と同じレベルの統合を提供するとは思わない。
私は現在Haskellを自分で学習していますが、学習を始めたとき、C#のような言語を学習するような学習経験はまったくないので、あまり興味をそそられないように見えますが、まったく新しい世界ですほんの数行のコードで非常に複雑な式がありました。コードを振り返ると、はるかに簡潔で、小さくてタイトでした。私は絶対にそれを愛しています!実際、他のほとんどの言語が許可するよりも小さく、保守しやすく、はるかに複雑な実世界のプログラムを書くことができます。私はそれを学ぶために投票します!!
がんばって。
Win32とDLLについて言及しているので、アンマネージコードを使用していると思います。その場合、GHCは非常にうまく機能します。昨年末、Windowsで FFI を使用してMS DDEライブラリと通信します。驚くべきことに、これは非常に楽しい経験でした(特にUnixの人間であることを考えると)。 HaskellのFFIは強力であり(たとえば、Cまたは他のライブラリからHaskell関数へのコールバックをサポートします)、Cレベルのコードを記述するときにHaskellの型チェックを行うことは夢のようです。
最後の点はHaskellの大きな利点の1つです。型システムは驚くべきものです。ただし、強力なツールのようなものです。それをうまく利用するには時間と労力が必要です。
はい、Haskellで残りのコードにリンクする小さなコードを書くことから始めることができます(ただし、他のコードにリンクする小さなHaskellプログラムから始める方が簡単かもしれません)これについてかなりの時間を費やして、できる限りそれを使用する価値があります。 HaskellでWindowsコード(私の場合、洗練されたExcelアドイン)と緊密に統合されたかなり大きなプロジェクトを計画して、あなたは私のようになるかもしれません。