GREE勉強会「ニコスクリプト言語の実装と進化〜ActionScript上での言語処理系実装〜」
ドワンゴで去年2ch採用された藤田 俊 君の発表。
こういったプレゼン自体初めてだったそうです。
なのにいきなり大勢の社外の人間の前でやらせるドワンゴの社風が素敵。
とても緊張していたものの、話の内容はちゃんとわかった。
勉強会後の懇親会やハシゴして行ったnipotan nite二次会で言語についての話をしたり、
テレ朝でCGを作っている方とTDDの話をしていたら、
だいぶ刺激を受けたようでえらい元気になっていました。
以下、勉強会まとめ
ニコスクリプトとNiwaScript
- ニコスクリプト…動画へのコメントで色々できるもの
- NiwaScript…ニコスクリプトの中間形式
- 直接NiwaScriptを書くこともできる
- JavaScriptベースのシンタックス
- 全部関数(ifも文ではなく関数の呼び出し)
3つのモジュール
(上位レイヤ)ScriptPlayer Iroha NSPlayer(下位レイヤ)
- NSPlayer…NiwaScriptの処理系
- Iroha…聴き損ねた。ニコスクリプトからNiwaScriptへの変換だっけ?
- ScriptPlayer…描画を行う
NSPlayer
- 動画上での時系列順に計算が行われる
- それをもとに各時刻での変数の状態が決定される
- 動画再生、シークバーでの移動によって到達した時刻での状態に基づきScriptPlayerが描画する
バージョンアップと改良
NSPlayer2
特徴
- 動画の時間に対応したスナップショットを持っている。
デメリット
- 新しいスナップショットを作るときに前回のをすべてコピーするので重い
- 時系列全部のスナップショットを持っているのでメモリを食う
- スナップショット作り直しのコストが大きい(変更があったらそこ以降全部変更するから)
rev1
特徴
- メモリ全体はコピーせず、変化があった変数とその内容だけ記録
- 変数の差分を足していくことで、その時刻での状態を構成
デメリット
- やっぱりスナップショットの作り直しコストは大きい
質疑応答
Q1:自前でパーサを作ったのかActionScriptのeval等で実行しているのか?
A1:evalは使っていない
Q2:各時刻における状態は決定されていなければならないので、ランダム要素は導入不能だと思うがどうか?
A2:ランダム要素は今後も導入しない