現実世界で関数型プログラミングを使用するにはどうすればよいですか?[閉まっている]


103

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

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

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

基本的に私の質問は、どのようにHaskellを実用的な方法で使い始めることができるか、そして私が実際に使用するといくつかの利点が得られるかどうかです。


2
個人的にはアーランを調べますが、それは私です。
Jason Bunting

2
少し明確にするために、私はすでにいくつかの異なる関数型プログラミング言語での経験があり、それらがどのように機能し、それらの違いが何であるかを知っています。しかし、この質問は具体的には、どうすれば実際の使用法にそれを取り入れることができますか。
ブライアンR.ボンディ

回答:


41

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

http://book.realworldhaskell.org/


印刷されるのを待っています。それは周りのより良い本の一つになると思われます。私はそれが実用的なオカムルがオカムルに対してするよりもハスケルに興味のある人々に良いサーバーを提供するでしょう
フリードリヒ

25

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

私が参加しているポッドキャストへのリンクをここに投稿するのは適切ではないようですが、少しずれているようですが、Matt Podwysockiと話し合ったHerding Codeのエピソードで同じ質問をしたところ、彼はいくつかの興味深い答えを出しました。そのエピソードには、関数型プログラミングに関連する優れたリンクもたくさんあります。「なぜ関数型プログラミングが重要なのかというタイトルのリンクが1つ見つかりました。


21
それから私はあなたのために投稿します:herdingcode.com/?p=45 :)
ブライアンR.ボンディ


14

これも興味深いかもしれません:「実際の関数型プログラミング

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


「C#をどんどん使いたい」とまだ感じていますか?F#にはいくつかの興味深い機能があります。私が得た最大の後押しは、タイピングが少ないことです(これは、コードでソリューションを表現するプロセスの摩擦が少ないことを意味します)。
ダニエル

1
@Danielはいくつかの点でさらにそうです; pしかし、私が取り組んでいるツールは非定型かもしれません。
Marc Gravell

8

あなたは言及しなかったが、私はあなたがC ++を使っていると仮定している。機能に入る可能性のある簡単な方法の1つは、C ++ / CLIから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です。ただし、F#を使用したC ++ / CLIと同じレベルの統合は実現できないと思います。


6

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

幸運を。


4

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

その最後の点は、Haskellの主要な利点の1つです。型システムは素晴らしいです。とはいえ、これは強力なツールのようなものです。それをうまく利用するには時間と労力が必要です。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.