[ 前へ | 目次 | 次へ ]

VCSSLの概要

最初に、開発者視点で率直に目指したものなども交えて、C系言語ユーザーの方向けに、VCSSLの概要を短くまとめてみます。


電卓ソフトや現実の電卓(ポケコン含む)には、関数定義や自動処理の機能として、 何らかのプログラミング言語をサポートしているものが結構あります。

あくまで筆者個人の勝手な考察ですが、 電卓で動作するプログラミング言語には、以下のような点が要求されると考えています:

少ない学習コスト
→ 電卓のために多くの学習コストを費やす人は恐らく少ない
短い計算コードを手軽に書ける
→ 大規模よりも小規模重視、計算重視
コンパクトな実装と仕様
→ 処理系を開発しやすい、搭載しやすい、移植しやすい
数値計算の処理速度
→ 少なくともある程度の幅の数値計算には耐えないといけない

実はVCSSLも、もともと電卓ソフト用に開発したものです。 つまり、何らかの斬新な言語仕様やパラダイムから作ったというよりは、 最初に具体的な用途がまずあって、上のような要求点があり、そこから仕様が決まったという傾向の言語です。

実際のVCSSLの開発コンセプトは以下の通りです:

少ない学習コスト
・ 数値計算分野のC系言語ユーザーを主眼に置いた、C系の標準的な文法
・ 独特の文法は可能な限り避ける
短い計算コードを手軽に書ける
・ 汎用性を削り、C系の中でも簡素な文法に
・ 静的型付けでありつつ、やや緩めに
・ 簡易用途の補助を重視した標準ライブラリ
コンパクトな実装と仕様
・ 制御構造の構文は if (if-else) / for / whileの3種
・ 基本的なプリミティブ型は int / float (=double) / complex / string / bool の5種
・ 非オブジェクト指向、大規模向けのパラダイムは特に追わない
・ 参照型やポインタを排除してGCを省略、配列を含む全ての型を値型に
数値計算の処理速度
・ 倍精度浮動小数点数演算で数十MFLOPS 〜 100MFLOPS
・ 高速な動的評価(eval)

最初に 「 少ない学習コスト 」 を挙げていますが、やはり開発当初はあくまで電卓用だったので、この点は最も重要でした。 実際、既存の電卓ではシンプルなBASIC系を採用しているものをよく見かけます。 しかしVCSSLでは、数値計算分野のC/C++ユーザーを特に重視したかったので、C系の文法を採用しました。 その代わりに、C系の中でも標準的な、なるべく独特でない見た目になるようにしました。

とは言っても、とっつきやすいBASICと比べて、Cは汎用重視の色が濃いので、「 短い計算コードを手短に書ける 」ために、 どれだけ(他のC系スクリプト言語のように)小回りを確保するかという配慮も必要です。

結局は妥協点ですが、以下のような感じになりました( FizzBuzz ):

上の通り、VCSSLはC系スクリプト言語の中でも保守的で、相応しい形容はまさに 「 電卓とかで動くCっぽいやつ 」 という感じです。実装をコンパクトに抑えるためのサブセット的な面も強いです。

一転して、標準ライブラリについてはある程度の汎用性を確保しています。 これは筆者自身が数値計算をやっていて、「 シミュレーションの可視化などをもっと手軽にできたらいいのに 」 と思っていた事に由来しています。 つまり計算メインでもアニメーション描画などを行いたい場面は結構あるわけで、C/C++は速い代わりに、そのあたりを面倒に感じていました。 そしてVCSSLはせっかくC系の文法で手軽さを意識したので、そのあたりをカバーできれば、(重い計算はやはりC/C++ですが)ライトなシミュレーションなどで活きる言語になるかもしれないと思いました。

実際、VCSSL 2.0以降は単体のスクリプト言語としても公開しており、標準ライブラリも(簡易用途向けであまり高度な事はできませんが)GUIや2D/3Dグラフィックスなどをサポートし、手軽に可視化などを行えます。

ローレンツアトラクタの図
ローレンツ方程式を4次ルンゲ=クッタ(RK4)法で数値積分し、その解曲線を描くVCSSLプログラムです。 描かれる解曲線は、「 ローレンツアトラクタ 」として非常に有名です。

波の図
凸レンズ形状をした高密度媒質を、波が通過する様子をシミュレーションするVCSSLプログラムです。 レンズ通過時に波が屈折し、焦点に集まる様子を、アニメーションで見る事ができます。

次回は、実際にVCSSLでプログラムを書いて実行し、基本的な入出力を行ってみます。


この階層の目次
お知らせ

Vnanoの公式サイトがオープン、チュートリアルやAPI仕様書等も掲載
2019年08月07日 - オープンソースのアプリケーション組み込み用スクリプトエンジン「 Vnano 」の公式サイトを開設しました。チュートリアルや、スクリプトエンジンのAPI仕様書などが参照できます。その概要をお知らせします。

リニアングラフ3D/2Dが連番ファイルのアニメーションに標準で対応
2019年07月17日 - リニアングラフ3D/2Dでは、7月17日公開の最新版より、連番ファイルを連続的に読み込みながらアニメーション描画するプログラムを同梱し、メニューから標準で使用可能になりました。その概要をお知らせします。

Vnanoのスクリプトエンジンアーキテクチャ解説2: コンパイラ
2019年07月03日 - オープンソースで開発中のスクリプトエンジン「 Vnano 」のアーキテクチャを解説する連載の第2回です。今回は、スクリプトを中間コードへと変換する、コンパイラ部分の内部をクローズアップして解説します。

新着
[公式ガイドサンプル] ユーザーのGUI操作に対して処理を行う

「VCSSL GUI開発ガイド」内のサンプルコードです。ユーザーがGUIを操作した際に行う処理を実装します。
2019年07月28日
[公式ガイドサンプル] 各種GUIコンポーネントを画面上に配置する

「VCSSL GUI開発ガイド」内のサンプルコードです。色々な種類のGUI部品を画面上に配置します。
2019年07月28日
連番ファイルから3Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、3Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年06月03日
連番ファイルから2Dグラフをアニメーション描画するツール

フォルダ内の連番データファイルを読み込み、2Dグラフを高速で連続描画して、アニメーションさせるツールです。グラフを連番の画像ファイルに保存する事もできます。
2019年05月24日
[公式ガイドサンプル] 立体モデルを生成して3D空間に配置する

「VCSSL 3DCG開発ガイド」内のサンプルコードです。立体モデルを生成し、3D空間に配置します。
2019年05月21日
開発元Twitterアカウント