------------------------------------------------------------------ 第 352 回 PTT のお知らせ --- Programming Tools and Techniques --- ------------------------------------------------------------------ ■日時: 2009年2月26日 (木) 18:30 から ■話者: 石橋 崇 (電気通信大学) ■題目: 計算移送機能を持つ言語JavaScript/MC2の設計と実装 ■概要: Webアプリケーションにおいて計算移送を可能にする言語 JavaScript/MC2を設計・実装した.移送とは実行中の計算が他の計 算機に移動し,移動先で実行を再開することである.これは継続 (continuation)を他の計算機に転送し実行することで実現できる. この移送機能を利用することによりサーバとブラウザ間の動的な負 荷分散などの従来では難しかった処理を簡潔に記述できる.Webア プリケーションではポータビリティが重要となるためブラウザの処 理系に手を入れることなく,JavaScript/MC2からJavaScriptへのソ ースコード変換とWebサーバの拡張のみで移送機能を実現した.本 発表ではJava Script/MC2の機能および実装を説明し,移送を用い た簡単なコード例を紹介する. ■場所: 電気通信大学 IS棟2階中会議室(215号室) 新宿駅より京王線,調布駅(特急・準特急で2つ目,15分) 北口下車, 北西方向徒歩12分程度,電気通信大学西地区キャンパスの東南端に ある8階建ての建物です. ◇交通ガイド http://www.uec.ac.jp/map/comm.html ◇キャンパス内マップ(図中の31番の建物) http://www.uec.ac.jp/map/campus.html ------------------------------------------------------------------
第 352 回 PTT レポート Q&A: Q: プロセスに付加されるIDはどのレベルでユニークか? A: グローバルユニーク. Q: 想定している分散環境の規模は? A: 数台〜数十台程度. Q: 移送にはフルの継続ではなく部分継続を使う方がよいという意見については? A: 実装することを優先したためフルの継続を導入した.必要があれば後に部分 継続を導入するかもしれない. Q: 実行時間に比例してオーバーヘッドが増加するという意味がわからなかった. call/ccをスタックが深くなるから? A: 実行時間に比例してcall/ccが呼ばれる回数が増えるということ. Q: 何を負荷分散したいのか? A: 重い処理はクライアントよりサーバでやったほうがよいという主張. Q: 想定するアプリケーションは? JavaScriptで数値計算みたいなものをやる ことを目的としてのか? A: 数値計算もできると思うがそれをメインテーマには していない.例えばサーバ,クライアントのどちらでも実行できる計算を計算 機の負荷やネットワークの状況に応じて動的に実行場所を切り変えるなどを想 定している.つまり移送機能をうまく利用することによりWebアプリケーション の利用シーンをもっと広げたいと考えている. Q: コード変換でCPS変換を取らなかった理由は? A: 速度の問題.JavaScriptをCPS変換すると非常に遅くなるため. Q: ポーリングの間隔はMarc Feeleyのバランスドポーリングとかのよいものが あるが今の実装にした理由は? A: 確かにポーリングの頻度はまだ最適化の余地がある.(ポーリング間隔の最適化 は研究の主眼ではないので現在の実装は暫定的なもの) Q: ポーリングのオーバーヘッドはどのくらいか? A: フィボナッチで1.2倍,クイックソートで2倍程度の速度低下. Q: LTC(Lazy Task Creation)のフラグはどこに立てておくのか? スタックのど こかに特殊なワードを入れておくのか? A: はい. Q: 実装テクニックとか学術的にみた場合何が面白いのか? JavaScriptならで はのポイントは? A: 学術的に特に目新しい点はない.JavaScriptならではの問題も特に思いつかない. コード変換に関しては知られている手法を使っている. Q: 各ブラウザへの対応状況は? A: コード変換(callcc)はどのブラウザでも動く.他のプリミティブ関数については 動かないブラウザもある. Q: JavaScriptの機能は全て使えるのか? 例外処理と衝突しないか? A: 問題ない.(EcmaScriptの仕様の範囲なら問題ない.ブラウザ独自の拡張は それほど深く検討していない) Q: 現時点でセキュリティはどこまで考慮しているのか? A: まだほとんど考慮していない.spawnについては多少検討している.(アクセス コントロールリストのようなものが必要だと考えている) Q: 他のブラウザから送られたプロセス同士が衝突することはないのか? A: ない. Q:(前の質問の続きで)通信するプリミティブがないから干渉しないのか? ファイルに関しては? A: 通信はプロセスIDで通信相手を指定する.またプロセスIDはグローバル ユニークなので衝突することはない.(従って意図しないプロセス同士の 干渉は起こらない) ファイルに関しては競合がおきてしまう.実用上はファイルの代わりに データベースを使うことで問題を回避できると考えている. Q: 分散環境を考慮しているということは対故障性は考えている? A: まだ考えていない. Q: 他のノード発生した例外を捕まえられるか? A: そのような機能をもつプリミティブはないが,高レベルAPIで実現できると考えている. (つまりいくつかのプリミティブを組み合わせることで実現できると考えている) Q: キラーアプリはあるのか? A: まだない. Q: 2年後(博士課程修了時)には何ができるのか? プランが知りたい. A: まず,Webアプリケーションにおいて有用な移送の使い方を見つけることが必要. そして,それを容易に記述できるような高レベルAPIおよびフレームワークを整備したい.