SilverlightでIronPython or BrythonのPython / WebBrowser
(いまさらですが)SilverlightはFlashと同じように、ウェブブラウザにプラグインをインストールして、リッチコンテンツを動作させることができます。アニメーションやゲームなど、JavaScriptでは難しかったことができました。またFlashには、Flashムービ(コンテンツ)だけでなく、ActionScriptを使ったFlexというWebリッチクラアントの開発もできます。Silverlightも同様のことができます。後発なだけに、Flexでは既存HTMLと完全に分断してしまっているところを、HTMLとの親和性が高い設計になっています。どちらも個人的には、ウェブブラウザがリッチになるというよりも、インターネットクライアントアプリとしての自由度の高さがとても好みでした。しかし、最近はこれら(ブラウザプラグインによるリッチアプリ機能)がちょっと脇役にまわりつつある傾向にあります。
(ブラウザにプラグインを導入できないようにする傾向にある)
最初に顕在化したのは、iPhone,iPadによるFlashの排除したのが始まりでした。消費電力やセキュリティの問題が理由のようですが、PCだけでなくスマホ、タブレットを含めた未来を考えたとき、ある意味必然だったのかもしれません。
ブラウザ上で動かすリッチコンテンツには、ただリッチなだけでなく、マルチプラットホームで同じアプリケーションを走らせるという目的もあります。このマルチとは、Windows,Mac,Linuxというカテゴリーでかたられてきましたが、スマホ、タブレットといったものを含んで考えると、またちがったプラットホームを考える必要がでてくるのでしょう。
そこで最近勢いがあるのが、JavaScriptです。実行速度の向上により最近あらゆるものがJavaScriptで記述されるようになり、万能化しているようにさえ感じます。(Flashもコンバートできたり、ゲームエミュレータまでも)
CPUの違い、OSの違いがあっても、マルチプラットホームで動作するアプリケーションは、長年開発者がめざしてきたところです。
最近はJavaScript+HTML5という組み合わせが現実的に、その答えとなってきているようです。
Javaや.NETの中間レイヤーでマルチプラットホームを実現する方法も、中間言語レベルの互換性から記述言語レベルの互換性になったりするかもしれませんね。.NETのDLRはまた違った可能性を感じるのですが・・
と、いままでになく前置きが長くなりましたが、Silverlightのような環境が残って欲しいな、という思い(言語、実行環境に自由度が欲しいという観点)から、SilverlightによるIronPythonを使ったWebページと、JavaScriptの勢いを示す意味から、JavaScriptライブラリによるPythonを使ったWebページを同じプログラムでテストしてみました。
Silverlight
<html>
<head>
<script src="/dlr/dlr.js" type="text/javascript"></script>
</head>
<body>
<script type="text/python">
import System
import datetime
from System import TimeSpan
from System.Windows.Threading import *
def show_time(s,t):
document.clock.innerHTML = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
timer1 = DispatcherTimer()
timer1.Interval = TimeSpan(0, 0, 1.0)
timer1.Tick += show_time
timer1.Start()
</script>
<span id="clock"></span>
</body>
</html>
JavaScript Library
<html>
<head>
<script src="brython.js"></script>
</head>
<body onLoad="brython()">
<script type="text/python">
import sys
import datetime
import time
def show_time():
doc['clock'].text = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
show_time()
time.set_interval(show_time,1000)
</script>
<span id="clock"></span>
</body>
</html>
どちらも日時を表示するだけのプログラムです。インターバルタイマの記述に大きな違いがあります。
SilverlightでIronPythonを実行する環境には、Gestaltを使いました。
http://www.visitmix.com/labs/gestalt/
これは2009年11月から更新がありません。
Pythonが実行できるJavaScriptライブラリは、Brythonを使いました。
http://code.google.com/p/brython/
最新バージョンは、2013年3月ですから、まだピチピチですね。
Silverlightの方が起動に時間がかかります。どちらもFirefox18でテストしました。
比較した感想ですが、将来性はBrython、わくわく度はSilverlightといったところでしょうか。。