VCSSLってどんな言語 ? - VCSSLの特徴

はじめに、VCSSL の基本的な特徴などを見てみましょう!

- 目次 -

そもそもVCSSL とは

VCSSL(ブイシーエス・エスエル)は、比較的ライトユース向けの、シンプルなプログラミング言語です。 用途としては、データの3D可視化や計算処理などが多いですが、GUIや描画機能なども備えているため、ちょっとしたツール製作などにも使えます。 VCSSLは、商用・非商用問わず、誰でも無償で利用できます。

なお、初見の方は「名前が覚えにくい」と感じた事かと思いますが、それは開発側も自覚している最大の過ちの一つです。 下で述べる通り、もともとは電卓の一機能だったため、開発コード名が適当にそのまま言語名になってしまい、後戻りできなくなったという経緯があります。 一種のネタとして許してあげてください。

もともとは、アプリ上でちょっとした処理を行うための簡易スクリプト言語(C言語風)

VCSSLはもともと、RINEARN製の電卓ソフト上で、ちょっとした関数や計算処理を記述するための、簡易スクリプト言語として誕生しました。

そのような背景から、既存のプログラミング経験者にとって取っつきやすい、C言語風のオーソドックスな記法を採用しています。以下は実際のコード比較です:

よく似ていますね。 ただ、汎用言語の大御所であるC言語と比べると、削られている言語仕様や、小回り重視で改変されている部分もあります。そこは他のスクリプト言語にもよくあるパターンですね。

つまりVCSSLを一言で表すと、「電卓とかで動く、なんかC言語っぽい見た目のスクリプト言語」と言った印象の言語です。

現在もリニアングラフ3Dなどで標準サポート

現在も、RINEARN製のアプリやソフトウェアでは、VCSSLによって自動処理やカスタマイズを行えるようになっているものが多いです。

その典型例としては、3次元グラフソフト「リニアングラフ3D」が挙げられます。リニアングラフ3Dでは、VCSSLでスクリプトを書く事で、全自動でデータファイルを開いてグラフ化・保存したり、大量のファイルを一括処理したりと、高度な使い方ができます。

リニアングラフ3Dはそれなりに需要が多いソフトであるため、恐らくVCSSLユーザーの大半が、この目的でVCSSLに出会って使用しているのではと思われます。今このページを読んで下さっているあなたも、まさにそうかもしれませんね!

もちろん単体のプログラミング言語としての利用も!

このような特定のアプリ向けの用途だけでなく、単体でVCSSLを活用する事ももちろんできます。つまり、普通のプログラミング言語としての使い方ですね。

ちょっとした処理をざっと書けるように」という、言語の基本的な性格を活かせるように、単体利用においてもライトユースが重視されています。 標準ライブラリも、GUIやグラフィックスなどを色々とサポートしていますが、細かさや高度さよりも、ライトユースでの簡便さを一番重視した設計になっています。

例えば、

などが典型的な想定用途です。すぐ後に、実際の例をたくさん紹介します。

逆に、「完了までに何時間もかかるようなヘビーな数値計算」や、「最近のゲームのようなリアルな3DCGを動かす」等の用途には、VCSSLは明らかに向いていません。 むしろ、「そういった処理は別の言語で書くもの」と割り切ってしまう事で、簡便さ重視の性格があまりブレないようにしています。

しかし意外と計算速度は速い
ライトユース重視とは言っても、電卓やグラフソフト上ではそれなりの量の数値計算をこなす必要があるため、VCSSLの計算速度自体は意外となかなか速いです。 「数値計算に使えないくらい遅い」というわけではないので、そこはご安心ください。スクリプト言語の中では結構速い部類だと思います。

VCSSLを使ったプログラムの例

それでは、実際にVCSSL製のプログラムをいくつか見ていきましょう!

各プログラムは、リンク先のページからダウンロード・実行可能で、詳しい解説記事も読めるため、ぜひ気軽に実行や改造してみてくださいね。きっと、用途の参考や、何かのアイデアの種になるはずです。

ファイルを3Dグラフにプロットする(曲面/メッシュグラフ)

リニアングラフ3Dを制御して、データファイルを読み込み、内容を曲面グラフとしてプロットするだけの、簡単なサンプルコードです。データファイル自体もプログラム内で出力しています。

応用で、連番画像を次々と読み込んでアニメーション表示する版もこちらにあります。

ファイルを2Dグラフにプロットする

上記の2Dグラフ版です。リニアングラフ2Dを制御し、データファイルを開いて、内容を折れ線グラフとしてプロットしています。

こちらも応用として、連番画像を次々と読み込んでアニメーション表示する版がこちらにあります。

円形波のアニメーション表示

少し高度な3Dグラフ制御の活用例です。円形波の形状と動きを計算し、配列に格納して、それをリニアングラフ3Dにリアルタイムで転送し続けてアニメーション表示させています。

また、波のパラメータを操作するGUI画面も備えています。

波の干渉(面上の円形波)のアニメーション表示

上記の、さらに発展的なプログラムです。2つの円形波が干渉する様子をアニメーションで描いています。その際、リニアングラフ3Dを制御するのではなく、VCSSLの3D描画機能を用いて、独自実装で3D映像を描いています。

また、表示画面上に、波のパラメータ操作用のGUI部品を埋め込んでいます。教材用などに、ちょっとスタイリッシュに作りたい場合を意識したプログラム例です。

[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する

公式ガイドのサンプルコードの一つで、単純な3D図形を、空間内に配置するプログラムです。こういった図形や、板ポリゴン、点、線などを簡単に描けます(ポリゴンの描画はこちら)。もちろん色も付けられます。

すぐ上で紹介した「波の干渉のアニメーション」は、これらの3D描画機能を実際に活用したものです。

シンプソン法による数値積分

シンプソン法というアルゴリズムを用いて、数値的に積分値を計算するプログラムです。積分結果の関数のグラフも表示します。 矩形法台形法 ⇒ シンプソン法と続く3回の連載で、アルゴリズムの意味も解説しています。

角度の「度」とラジアンとを相互変換し、図示もするツール

角度を表す2通りの方式、「度」と「ラジアン」ってややこしいですよね。両者を変換し、図でも表示してくれるGUIツールです。図は、VCSSLの2D描画機能を使って、プログラム内でゼロから描いています。

条件を満たす色を透明にする簡易ツール

画像処理を行う簡易ツールの実装例です。画像ファイルを開き、特定の条件(例えば「緑成分が一定以下、かつ青成分が一定以上」など)を満たす領域を透明化して、別名の画像ファイルとして保存できます。

画像内容の加工処理は、VCSSLの2D描画機能を使って実装しています。各ピクセルの色成分を取得・変更できる機能があるので、こういった画像処理ツールも結構簡単に作れます(メモリは結構食いがちですが)。

小数(浮動小数点数)から分数へ近似的に変換するツール

こちらも簡易的なツールの例です。例えば、昔の計算メモなどに「21.33333…」みたいな値が突然登場した時に、「これは何を何で割った値だったっけ?」と困った経験はありませんか? ちなみに正解は 64/3 です。このような分数表現を推測してくれるツールです。

このツールは実際に、作者がそういう場面において即席で作ったものなので、プログラムの記述内容は投げやりなのですが(警告表示用の alert 機能で計算結果を表示していたり)、逆に「VCSSLの即席用途の実例」にはなるかもしれません。 画面も何もかも一切こだわっていない、ざっと書かれた内容そのままです。

円周率1万桁の計算(ガウス=ルジャンドル法)

最後に、円周率の値を1万桁計算するプログラムです。VCSSLには、長い桁数の数値を扱えるデータ型が標準で使えます(電卓用として誕生した名残りです)。それを使ったデモンストレーション用のプログラムです。

なお、世の中には、円周率を高速に計算する事に特化したプログラムがたくさんありますが、そういったものと比較すると、さすがに計算速度はだいぶ遅めです。だいたい1万桁でコンマ数秒かかります。

アプリ内への組み込み用途にも対応: Vnano

以上が、普通の用途の例です。最後にもう一つだけ、特殊な用途をご紹介しましょう。それは自作アプリ内への組み込みです。

VCSSLには、普通の実行環境の他にも、Java製のアプリ内に組み込める「 Vnano (VCSSL nano、ブイナノ) 」という小型スクリプトエンジンが存在します:

Vnanoは、組み込み用途に特化しているため、フル版のVCSSLからはだいぶ機能が削られていますが、その代わり起動速度も処理速度もかなり軽快・高速になっています。

Vnanoはオープンソースのスクリプトエンジンで、誰でも無償で使用・配布できます。 「VCSSLでリニアングラフ3Dを制御するように、自作のJavaアプリにも、スクリプトによる制御機能を付けたい!」と思った際は、ぜひVnanoをお試しくださいね!