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グラフィックスなどをサポートし、手軽に可視化などを行えます。
次回は、実際にVCSSLでプログラムを書いて実行し、基本的な入出力を行ってみます。