0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

リアクティブ プログラミング:ほん"ニャァ"くコンニャク

Last updated at Posted at 2016-01-04

Reactive programming

原文: (英訳はむずい... いや、英語ができないのがヤバイ ...)

リアクティブプログラミング(以下 "RP")は、データフローと変化の伝播を志向とするプログラミングのパラダイムです。

これは、プログラムで、『静的または動的なデータフローを楽に実装できなければいけない事』と
『実行モデルが自動でデータフローに合わせて変化の伝播をできなければいけない』ものです。

例)

  • a := b + c の式があった場合, aは b+c の結果を、式の評価があった時に格納をします。評価後で、b,cは a には影響を与えずに変更できます。そして、a の値は、関数型プログラミングとは反対で、新しいb,cの値で自動的に更新(破壊的代入)します

  • 最近のスプレッドシートは"RP"の一つの例です。"=B1+C1"の式は自動的に更新をします
    もう一つは、ハードウェア記述言語のVerilogは回路の伝播のモデルを記述できます

  • "RP"は、ユーザーインターフェイスやリアルタムアニメーションで使われているが、一般的なプログラミングのパラダイムとなります

  • MVCでは、"PR"によってModelの変更をViewに通知(その逆も)しているとも挙げられます。

コンセプト

明示の程度

"PR"は、矢印でデータフローを明示化できます。
データフローは、命令型や関数型言語の構造に暗黙的に似た形に成ります。

アーキテクチャレベルでは、データフローグラフの独立したノードの相互通信プログラムを表す時もあります。

Static or Dynamic

"PR"は純粋な静的なデータフロー形成と実行中のデータフローの動的な変更が可能です

Higher-order "PR"

別のデータフローからデータフローを構築可能な時、上位"Hight-order"と言えます。
結果は、最初のデータフローと同じ評価モデルで、もう一つのデータフローの結果を出力します。

データフローの識別/差別

理想では、データの変更は即座に全て伝播したいが、現実的には難しい。
その代替えで、データフローの識別/差別をし、評価の優先度を決める必要があるかもしれません。
データフローの識別/差別は複雑な設計を招きます

例)

  • ワードプロセッサのスペルチェックが挙げられます

"PR"のモデルの評価

"PR"の評価は、必ずしもスタックベースのプログラムの評価と同じになりません。
それよりも、いくつかのデータ変更があった時に、すべてのデータに部分的または完全に伝播されます。
変換の伝播は、多分、一番自然な方法では無効化/遅延有効化計画で行われます。

それは、もし不確定なデータ形式だと指数関数的な複雑な更新のため、スタックを使った自然な伝播では問題となります。
一つのそのようなデータ形式"repeat diamond shape" (An → Bn → An+1、An → Cn → An+1 n=1,2...)があります。
この問題は、データが無効でないものへの伝播を無効化し、後で必要なものを遅延評価で有効化することで、解決できます。

この"PR"固有の問題は、主要な計算です。通常のプログラミング言語は評価し、問題を考えません。
また、データがメモリを使用し"PR"では多くのメモリを占有します。研究によってこの問題は解決しました。

一方で、"PR"は"明示的な並列"の記述と並列にハードウェアのパワーを利用するものとして使用できます。

オブザーブパターンとの類似について

"PR"はOOPでのオブザーブパターンと類似しています。
けれども、プログラム言語の中でのデータフローの統合は、表現を容易にして、データフローの粒度として扱えるようにしています。
例えば、オブザーブパターンでは、オブジェクト/クラスの間のデータフローを記述すしますが
”OOPR”では オブジェクト/クラスのメンバーをターゲットにできます。

スタックベースの一般的なオブジェクト志向のデータフローの伝播は不完全です。
"tree feedback edges" のデータ構造は指数関数的な問題に直面します。
しかし、比較的限られた使用と小さな粒度のため、オブザーブパターンで大きな問題とし扱われません。

アプローチ

命令型

リアクティブデータ構造で動作するように記述します。それは、制約命令プログラミングと似ています。
注意事項として、制約命令プログラミングは双方向の制約ですが、"PR"は一方向の制約になります。

オブジェクト志向

オブジェクトにリアクションを設定して、リアクションによって再評価が行われて自動的に更新する

関数型

Functional reactive programming (FRP) というパラダイムになります。


ここまで

<反省> 英語を勉強せねば・・・ (;o;)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?