ぴらふのイベント駆動フレームワークについて説明します。 ぴらふでは、引数をターミナル、処理をルールとみなして、ターミナルの更新やルールターミナルの参照に応じてプログラムを駆動します。 例えば、加算の処理は関数形式で次のように表せますが、

  1. def add(a,b): return a + b

ぴらふでは次のように記述します。

  1. class LogicA(object):
  2. a = Terminal(0)
  3. b = Terminal(0)
  4. @rule('a','b')
  5. def add(self):
  6. print 'added!'
  7. return self.a + self.b

図示するとこんな感じです。

tutorial1.png

動作はこんな感じです。

  1. >>> o = LogicA() # LogicA のインスタンスを生成
  2. >>> o.add # add ルールターミナルを参照
  3. added! # add ルールが実行されます。
  4. 0 # 実行結果 self.a + self.b が返されてバッファの内容を更新します。
  5. >>> o.a = 1
  6. >>> o.b = 2
  7. added! # add ルールが実行されます。
  8. >>> o.add
  9. 2 # 必要がないときにはルールは実行されません。バッファの内容を返します。

ルール add は、ターミナル a、b が共に更新されるか add ルールターミナルが参照されるかすると実行されます。

カスケード接続してみます。

  1. >>> o = LogicA()
  2. >>> m = LogicA()
  3. >>> connect((o,'add'),(m,'a')) # インスタンス o, m をカスケード接続する。
  4. >>> m.add
  5. added! # m の add ルールの評価が開始される
  6. added! # o の add ルールの評価が開始される
  7. 0
  8. >>>

カスケード接続の状態を図示するとこんな感じ。ノードを介して関連付けられたターミナルはすべて同じ値になります。 m.add を参照すると、ルール内で m.a + m.b が実行されますが、その際、m.a の内容を取得するに先立って関連付けられたルール o.add が参照されます。 必要であれば o.add が実行された後、m.add 内でその値が活用されます。 tutorial2.png