103

関数型言語は、状態を排除することでバグを回避できるだけでなく、スレッド数を気にすることなく自動的に簡単に並列化できるため、優れています。

Win32開発者として、アプリケーションの一部のdllにHaskellを使用できますか?そして、私がそうする場合、私のために自動的に取られる本当の利点はありますか?もしそうなら、私にこの利点を与えるものは何ですか、コンパイラ?

F#は、複数のコアとCPUにまたがって作成した関数を自動的に並列化しますか?タスクマネージャーのスレッド数が増えるのを見たことがありますか?

基本的に私の質問は、Haskellを実用的な方法で使い始めるにはどうすればよいのかということです。そうすれば、実際にいくつかのメリットが見られますか?

4

6 に答える 6

41

Real World Haskell という本はまさにあなたが探しているもののようです。オンラインで無料で読むことができます:

http://book.realworldhaskell.org/

于 2008-09-27T04:41:14.787 に答える
25

F#には、さまざまなCPUやマシンに機能を渡す魔法のピクシーダストは含まれていません。F#/ Haskellやその他の関数型プログラミング言語が行うことは、それらが作成されたスレッドやCPUに関係なく処理できる関数を簡単に記述できるようにすることです。

私が参加しているポッドキャストへのリンクをここに投稿するのは正しくないと思いますが、少しずれているようですが、MattPodwysockiと話をしたHerdingCodeのエピソードで、同じ質問をし、彼はいくつかの興味深い答えを出しました。そのエピソードには関数型プログラミングに関連する良いリンクもたくさんあります。「関数型プログラミングが重要な理由」というリンクタイトルが1つ見つかりました。これは、いくつかの答えを提供する可能性があります。

于 2008-09-27T04:16:57.530 に答える
14

これも興味深いかもしれません: " Real World Functional Programming "

例は F# と C# にありますが、理論はかなり一般的です。私が読んだもの (プレリリース) からは、間違いなく興味深いものですが、これまでのところ、Parallel Extensions のようなライブラリを使用して、C# にもっとこだわりたいと思っています。

于 2008-09-29T07:10:28.750 に答える
8

あなたは言及しませんでしたが、私はあなたがC++を使用していると仮定しています。機能を開始するための潜在的に簡単な方法の1つは、C ++ / CLIを使用してF#を実行することです。C ++には、マネージコードの呼び出しと呼び出しを可能にする「マジックピクシーダスト」(IJW:It Just Worksと呼ばれる)が含まれています。これにより、F#コードの呼び出しはC#からの呼び出しとほぼ同じくらい簡単になります。

私はこれを完全にC/C ++で書かれた1つのプログラム(FreeSWITCH)で使用しました。単一のマネージC++/ CLI(/ clrスイッチを使用)を使用すると、魔法のようにマネージコードに移行し、そこからF#プラグインを読み込んで実行できます。展開をさらに簡単にするために、F#はすべての依存関係を静的にリンクできるため、F#ランタイムファイルを展開する必要はありません。CLRコードを魅力的なものにするもう1つの点は、マネージコード(委任)をCコードに渡すことができ、ランタイムが自動的にサンクを作成することです。

Haskellの方法を採用することにした場合、探している機能はFFI:ForeignFunctionInterfaceです。ただし、F#を使用したC ++/CLIと同じレベルの統合は得られないと思います。

于 2008-10-12T10:26:42.010 に答える
6

私は現在Haskellを自分で学んでいます。あなたがそれを学び始めたとき、学習経験はC#のような言語を学ぶようなものではなく、まったく新しい世界なので、それほど興味をそそられないようですが、私は非常に複雑に書くことができることに気づきましたほんの数行のコードで表現しました。コードを振り返ると、はるかに簡潔で、小さくてタイトでした。私は絶対にそれを愛しています!あなたは確かに、他のほとんどの言語が許すよりも小さく、維持しやすく、そしてはるかに複雑な現実世界のプログラムを書くことができます、私はあなたがそれを学ぶことに投票します!!

幸運を。

于 2008-09-27T04:10:04.317 に答える
4

Win32 と DLL について言及されているので、アンマネージ コードを扱っていると思います。その場合、GHCは非常にうまく機能します。昨年末、FFIを使用して Windows で DDE サーバーを作成し、MS DDE ライブラリと通信しましたが、驚くべきことに、これは非常に楽しい経験でした (特に私が Unix を使用していることを考えると)。Haskell の FFI は強力で (たとえば、C や他のライブラリから Haskell 関数へのコールバックもサポートしています)、C レベルのコードを書くときに Haskell の型チェックを使用できるのは夢のようです。

最後の点は、Haskell の主要な利点の 1 つです。型システムは驚くべきものです。とはいえ、これは強力なツールのようなものです。使いこなすには時間と労力が必要です。

そうです、コードの残りの部分にリンクする小さなコードを Haskell で書き始めることは可能です (ただし、他のコードにリンクする小さな Haskell プログラムから始める方が簡単かもしれません)。これについてかなりの時間をかけて学び、できる限りそれを使用します。Haskell で Windows コード (私の場合は洗練された Excel アドイン) と緊密に統合されたかなり大規模なプロジェクトを計画しているあなたは、私のようになるかもしれません。

于 2009-05-18T00:09:47.793 に答える