Reactive Programmingの波がPerlにもやってきた?

どーも、わいとんです。

遅まきながら、新年おめでとうございます。

さて。近頃、個人的に気になっているCPANモジュールの一つにMoobXというものがあります。

今回は実際にMoobXを使って、PerlでのReactive Programmingを試してみましたので、ご紹介したいと思います。

MoobXについて

MoobXはReactive programming frameworkを標榜しており、JavascriptのMobXにインスパイアされたものであるようです。

本エントリ執筆時点での最新バージョンは0.1.0ですが、作者のYanick Champoux氏によって精力的に開発が継続されており、現在も3つのissueがopenとなっています。

なお、最初のリリースである0.0.1が今年の1/13にリリースされたばかりであり、0.1.0のリリース日も1/14であることから、今後まだまだ仕様が変わる可能性があると思われます。

Reactive Programmingとは

そもそもReactive Programmingとは何なのか、という疑問を持っている方もいらっしゃるかもしれません。

もっともわかりやすいReactive Programmingの例としては、Excelの数式が挙げられます。例えばセルA1に=A2+A3という定義がある場合、A2とA3の値を加算した結果がA1に反映されます。この時、A2の値を修正すると、即座にA1に結果が反映されます。

Excelの場合は、A1に値の関係性を記述することで、A2及びA3の値の変更を伝播させるデータフローが生じます。

このような値の関係性を記述して、値の変更を伝播させる、データの流れに着眼したプログラミングパラダイムのことをReactive Programmingと言うようです。

MoobXを使ってみる

では早速MoobXを使ってReactive Programmingをやってみます。

MoobXはcpanmcpmなどを使ってインストールできます。

1
cpanm MoobX

実際にMoobXを使った簡単なコードを書いてみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
use strict;
use warnings;
use MoobX;

observable my $x;
observable my $y;

my $z = observer {$x + ($y * 2)};

$x = 3; $y = 5;
print "$zn";

$y = 2;
print "$zn";

この結果は以下のようになります。

1
2
3
$ perl ./observer.pl
13
7

$yの変化に応じて$zも変化していますね。

もしこれがReactive Programmingでなければ、おそらく以下のような結果になっていたことでしょう。

1
2
3
$ perl ./observer.pl
13
13

MoobXの基礎

MoobXを利用する上で覚えなくてはならないことは2つだけです。

observer

observerには、値の関係性をコードブロック(無名関数)として記述します。

1
my $z = observer {$x + ($y * 2)};

observable

observableには、observerで言及される対象となる変数定義を記述します。

1
2
observable my $x;
observable my $y;

まとめ

PerlにおけるReactive ProgrammingをMoobXで実現できる、ということを紹介しました。

応用することで、様々な有益モジュールの開発に貢献しそうな予感がしますね。