VPGLのご紹介

Try a Visual Programming Graphical Language (VPGL)

VPGLは、電子ブロックから着想を得た、オブジェクト指向の図示的なプログラミング「言語」です。

まずは簡単な例(1+2+…+Nの計算)から:

これは、単なる画像ではなく実行限定(編集禁止)モードになっているVPGLのIDEアプリが張り付けてあるもので、左上のRUNボタンを押すと、プログラム図の実行が始まります。(このサイトでVPGLを実行するためにはjavascriptを有効にする必要があるのでご了承ください。)

RUNボタンを押すとダイアログが一つ表示されますので、(おおむね1000ぐらいまでの)整数を一つ入力してOKボタンを押します。すると、表示されているSUMメソッドのプログラム図が実際に実行されて、その結果を表示するダイアログがポップアップします。そのダイアログを閉じると実行が終了します。例えば100を入力すると、計算実行後5050が表示されるダイアログがホップアップするという感じです。

図の解釈方法とIDEでの作図方法については別途説明しますが、この図をみていただければ、この手続きが(NumberクラスのSUMメソッドが:

1.上から落ちてきた入力Nが、0以下ならば0を下に出力
(マスB2で、入力が0より大きいかどうか判定し、小さければ、マスD2からC5への経路で出力が下から出る)

2.上から落ちてきた入力Nが、0以上ならば、N+SUM(N-1)を下に出力(マス目B4でSUM自身を呼び出して、C4でNを足してC5から下に出力)

という再帰的定義になっていることが読み取れると思います。(もしスマートフォンなどでご覧の場合には、IDEの部分をピンチイン/アウトしていただければ見やすくなります)

このVPGLのIDEは、プログラム図の作図、編集、デバッグなどが、仮想キーボードからの単語入力と、図上のシングル/ダブルのクリック/タップのみで可能となっています。このため、物理キーボードが不要となっており、タブレット/スマートフォン上でのプログラミングが可能となっています。

また、VPGLはオブジェクト指向言語です。SUMも数値であるNumberクラスの一つのメソッドとして定義されています。VPGLでは、親クラスを指定することによる「継承」も可能で、現在版では、多重継承も試験実装されています。

VPGLは汎用のプログラミング言語として設計されていますが、総和や素数の計算などのような、テキストペースのアプリを動かしてもあまりアトラクティブでなかったので、以下のように3D世界のアプリが動くような拡張機能を試しに導入してみました。

VPGL の 3D機能の試作

現在VPGLは上記のようなプログラム図をたくさん作成することで3Dアプリが作れるようにライブラリ機能が拡張されています。簡単にまとめると、VPGLのインタプリタの中に、その試作拡張機能としてUnityのような3Dプラットフォームが含まれ(自作で、Unityとは関係/連携はありません)ていて、3D世界のイベント(タイマーやオブジェクトの衝突など)のハンドラと、オブジェクトの操作処理がVPGLで記述できるようなものを試作してみました。

3Dブロック崩しの例

例えば3Dブロック崩しはこんな感じです。RUNボタンを押してみてください。打ち返しバーはマウスカーソルを当てて左クリックでドラックするか又は指でタッチしてドラッグすると移動できます。球が台から落ちるか、上部にあるBreakボタンを押すと停止します。

このブロック崩しは、クラスBlkListとクラスBreakOutの17枚のプログラムチャートでプログラムされています。各チャートは、Class:メニューでこれらのクラスを選択して、Method:メニューのメソッド一覧の各項目を選択するとみることができます。(内容の解説は計画中)

プラレールのような3D鉄道おもちゃアプリの例

(これは、今のところVPGLで一番複雑なアプリで)3Dの汽車のおもちゃアプリです。アプリ内「Viewpoint」メニューを切り替えると真上からの視点から、真横からの視点や、運転席からの視点に切り替わります。また「BranchNext」チェックボックスをチェックすると次の分岐ポイントで曲がります。上にあるBreakボタンを押すと終了します。

複雑とは言いましたが、クラスRRCar/RRLayout/RRRail合わせて32枚のプログラム図による実装です。

ご感想等いただけますと幸いです :

ここまでVPGLの概要と、各種VPGLで記述されたアプリケーション例をご紹介しました。もし、ご興味などひかれるものがありましたら、追加で説明を加えさせていただきます。何分にも、言語仕様、作図/編集操作の方法、チュートリアルを含むプログラミングテクニックなどの説明がいまだまったく不十分ですので、ご質問などいただけますと幸いです。

わたくし千田(kste9947@gmail.com)といたしましては、なにはともあれ、このプログラミング「言語」を面白がっていただけるように改良してくことを第一に考えております。というわけですので、もし「こうなっていたら…」「こんなアプリは…」というようなアイディアをいただけましたら、実現可能性の検討をさせていただき、可能な限り、試作結果をこのページを通じてお伝えできればと思っております。

留意事項につきまして:

このVPGLの言語実行処理系とIDEは、現在すべて完全クライアントサイドのJvaScript+HTMLのシングルページアプリケーションでできてあります。ブラウザを装備しているデバイスなら、CPU/OSを問わずに動作するようにするためで、全体がコンパイルされた機械語で書かれているわけではなく、ブラウザのJavascriptエンジン上での実行である関係上、メモリを多量に使用します。おおむねRAMが2GB以下のデバイス(最廉価のAmazon Fireタブレット等)ではメモリ不足の警告が出ることがあります。(特に汽車のアプリ)

ご了承ください。

知財関係について

このプログラミング言語に関しまして、私は、特許取得(特許第7338096号)を通じて、類似技術についての権利保有関係者がいないかどうかを確認しました。特許審査官からの指摘を見る限り、類似関連技術に関して、独占的知財権を持っている他の方は国内にはいないようです。

ちなみに、審査官指摘の類似の技術として(1)オブジェクト指向でないタイル/ブロック形式の言語に関する、特開平11-85489(審査未請求のまま時効)、同様の(2)特開2006-344076(審査未請求で時効)、さらにパネルタッチ/クリックで図形アイコンに操作指示を指定する(3)特許4840111(年金未納により権利消滅)がありますが、いずれも権利は消滅しており、また、これら公報の公開により、現在公知の技術となっていますので、関連技術に関しましては今後権利化されることも無さそうという結論です。

3D機能に関しては、あまりはっきりしたことは言えません。Unityが何か出願しているかどうかを検索してみましたが、対象としてヒットするものを見つけてはいません。正直なところこの辺りは調査しきれているとはいえません。