Haskellでいくつかの単純な自動物理システム(振り子、ロボットアームなど)を視覚化しようとしています。多くの場合、これらのシステムは次のような方程式で記述できます。
df/dt = c*f(t) + u(t)
ここで、u(t)
はある種の「インテリジェント制御」を表します。これらのシステムは、関数型リアクティブプログラミングパラダイムに非常にうまく適合しているように見えます。
そこで、PaulHudakの「TheHaskellSchool of Expression」という本を手に取ってみたところ、そこにあるドメイン固有言語「FAL」(機能アニメーション言語)は、私の単純なおもちゃのシステムで実際に非常にうまく機能することがわかりました(ただし、一部の機能、特にintegrate
、効率的に使用するには少し怠惰すぎるように見えましたが、簡単に修正できます)。
私の質問は、今日のより高度な、あるいは実用的なアプリケーションのための、より成熟した、最新の、よく維持された、パフォーマンスが調整された代替手段は何ですか?
このwikiページにはHaskellのいくつかのオプションがリストされていますが、次の点についてははっきりしていません。
このプログラミングパラダイムの発明者の1人であるConalEliottのプロジェクトである「reactive」のステータスは少し古くなっているように見えます。私は彼のコードが大好きですが、他のより最新の代替案を試す必要があるかもしれません。構文/パフォーマンス/ランタイム安定性の観点から、それらの主な違いは何ですか?
2011年の調査、セクション6から引用すると、「 ... FRPの実装は、遅延の保証が必要なドメインで効果的に使用するには、パフォーマンスが十分に効率的または予測可能ではありません...」。調査はいくつかの興味深い可能な最適化を示唆していますが、FRPが15年以上存在するという事実を考えると、このパフォーマンスの問題は、少なくとも数年以内に解決するのが非常にまたは本質的に難しいものである可能性があるという印象を受けます。これは本当ですか?
調査の同じ著者は彼のブログで「時間の漏れ」について話します。この問題はFRPに固有のものですか、それとも純粋で厳密でない言語でプログラミングするときに一般的に発生する問題ですか?十分な性能がない場合でも、FRPベースのシステムを長期にわたって安定させるのが難しすぎることに気付いたことがありますか?
これはまだ研究レベルのプロジェクトですか?プラントエンジニア、ロボット工学エンジニア、金融エンジニアなどの人々は実際にそれらを使用していますか(彼らのニーズに合った言語で)?
私は個人的にHaskellの実装を好みますが、他の提案も受け付けています。たとえば、Erlangを実装するのは特に楽しいでしょう。そうすれば、インテリジェントで適応性のある自己学習型サーバープロセスを簡単に作成できます。