2013-04-12 8 views
7

私の現在の主なプログラミング言語はPythonです。私が好きなことはたくさんありますが、私は機能的な言語も好きです。プログラム全体を実行するには十分ではありませんが、機能的なモールドにうまく収まる特定の機能性については間違いありません。Pythonと関数言語の相互運用

もちろん、.NETはこの点で驚くべきことですが、ironpythonとF#の両方を持っています。しかし、科学的なPythonのエコシステムのためのironpythonのサポートが前回チェックしたときにはまだまだ難しいと考えて、.NETは私の選択肢の大部分ではありません。私はcpythonとHaskellの間の相互運用を容易にするためのツールが明らかに不足していることに少しショックを受けます。彼らは大きなコミュニティーを持つ成熟した言語の両方です。

これらのアーキテクチャには、欠落しているものと互換性がないものがありますか、これはまだ起こりがちなものですか?

明確にする。そこにはいくつかの焼きたてのプロジェクトがありますが、私はウィーブ、ピュークーダ、またはブーストのawesomenessと並行する何かを考えています。いくつかの注釈だけでinteropに内在するすべての配管を自動化するもの。参照

+2

CythonsとHaskellのC FFI – jozefg

+0

の間で相互作用することができます。ハスケルはCと相互作用しています。そして、PythonはCと相互作用しています。理論的には、私のPythonリストを自動的にHaskellリストにキャストしたり、逆もまた可能です。しかし、そのような定型文をきれいに抽象化するためのツールはありません。私の意見では、その利点はすぐに影になります。 –

+0

私はそれが文化の問題だと思います。これはAWKスクリプトをJava Scripting Servicesを介してScalaから使用できるようにしていますか? – Ingo

答えて

0

はイムが不足していることを彼らは 病気互換になり、またはこれは はまだ起こるのを待っていることを素晴らしいものばかりである彼らのアーキテクチャについての何かはありますか?

私はそれがこれらの言語をやって人々についてだと思う:

は同時にハスケルとPythonをしたい多くの人々はありません。

  1. 同時にあなたのいずれかがC-インタフェースを介して行くか、または両方の言語を話すプロトコルを作成することができ、両方の言語(liekハスケルとPython)を利用すること。

    どちらもかなり先進的なので、それを行うことができる人の数が限られています。もちろん、両方の言語のフルパワーを使用することを困難にするトレードオフもあります。

  2. 私はPythonを使用していますが、私はいくつかのHaskellを知っていますが、私はそれをプログラムしません。私はオブジェクト指向にちょっと固執しています。ある日問題が私にとって、それがHaskellでPythonよりも良く解決できると判断したことを伝えています。その問題は、私の最初の考えであるため、まだ起こっていません。私はPythonでそれを行う方法を知っています。他の「専門家」もその問題に直面していると思います。

  3. あなたは言語で考えることを始めます。私はハスケルは、その機能的なスタイルとは全く別の考え方を持っていると思います。副作用はありません。この考え方をするには、私のPythonの知識を忘れるか、使わないようにする必要があります。これらの2つの考え方を切り替えるには、ある程度の力が必要です。

2つの言語があまり接近していないので、離れているので、それらは離れています。両方を行うことは難しく、両方を行うことを練習する方法があまりないか簡単です。

+1

要約すると、あなたは本当にその点を見ません。しかし、私を信頼してください。関数型言語をシームレスに統合すると、関数型言語を使用するほうがはるかに魅力的になります。機能的な狂信者には言わないでください。しかし、いくつかのタスクは、あるスタイルまたは他のスタイルよりもはるかに優れています。関数型言語のフレームバッファにピクセルを置くと、正方形のペグを円形の穴に置くように感じられます(f.i.それが私のために機能的な言語を止めるものです。とにかく私はすでに無数の言語を使っていますので、それは多くの人々の障害ではありません。 5行の関数をラップするための定型的な行の瞬間です。興味深い観察。 –

0

私は、この質問に対する答えは、機能指向言語とオブジェクト指向言語の慣性を考慮せずに解消すると思います。オブジェクト指向言語または命令型言語が第2、大学、または大学院レベルにある頻度で、関数型言語が教えられないという事実から始めて、次のような状況を考えてみましょう。ユーザーが言及しているように、言語の選択に関するプログラマーとしての重要な勢いがあります。例えば、4年制の大学での典型的なCSの学位期間中に、少数の言語を学ぶことができ、そのうち1つが機能的言語ではない可能性があります。この典型的な卒業生は、業界で働くことになります。職場で週40時間以上のプログラミングをした後は、まったく新しい言語を学ぶのではなく、動作する言語を学ぶのに時間がかかりますすでに知っているものとはまったく異なっています。これらのすべての上に、機能的言語は、オブジェクト指向または必須のものほど産業で有用ではないという欠点があります。この現状を考えると、PythonとHaskellの相互運用性は、プログラマが望むものではないことが理解できます。

0

HaskellとPythonのバインディングを使用する場合は、各言語で何をしますか?

たとえば、CやPythonのバインディングを考えた場合、スピードブーストが必要なときやビットをプッシュする必要があるときはCを使い、表現力豊かで簡潔にしたいときはPythonを使います。ほとんどのロジックに対応する言語と、に落として、速度を上げて明快さを犠牲にして、一対の言語を使用するのが一般的です。言語間のギャップが広ければ大きいほど、切り替えからより多くの利益を得ることができます。

私たちがHaskellとPythonをバインドしていたのであれば、それをどうやって出すのかははっきりしません。ハスケルは速くてもCほど高速ではないので、私はPythonからハスケルに落とさないでしょう。しかし、私がHaskellを使っていたら、いつPythonを使うのですか? PythonはCとPythonを比較するのではなく、Haskellよりも表現力がありません。

ほとんどの場合、オブジェクトをいくつかのハスケル表現に変換し、何らかの作業をしてから元に戻す代わりに、importfunctoolsとプログラムがPythonで機能するのが簡単だと思います。

本当にそれを望むなら、CythonはHaskellのFFIが使用できる関数を書くのを容易にします。

+0

。 – Ingo

+1

私は自然に変更可能なコードとして表現されるものにPythonを使用したいと思います。そして、Haskellのmath-y内部ループ用にHaskellの不変性によりPythonよりも速い正しいコードを書くことができます。 Cのもの)。しかし、変更可能/不変の概念的な分割が私の主な魅力になるでしょう。 –

+0

Haskellの関数をPythonでバインドする方法を示すためにFFIを完成させたいですか? (私も少し自分自身を学ぶ必要があるだろう)。 –

2

もう一つの方法は、UNIXパイプを使い、Haskellプログラムを書いて、Pythonプログラムを書いて、それらがテキスト上で通信するようにすることです。 HaskellとPythonはリストの構文も同じです。したがって、データをパイプでパイプするのは簡単です。