[ 前へ | 目次 | 次へ ]
Japanese English

VCSSLの概要

即席ガイドにつき、丁寧な導入は割愛して、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 ):


// 入力(戻り値は文字列だが、代入時に数値に変換される)
int n = input("上限値(整数)");

// for文
for(int i=1; i<=n; i++) {

    // if文やelse文
    if(i%3 == 0 && i%5 == 0) {
        println("FizzBuzz,");  // 出力
    } else if(i%3 == 0) {
        println("Fizz,");
    } else if(i%5 == 0) {
        println("Buzz,");
    } else {
        println(i + ",");  // 文字列と数値の結合
    }
}
FizzBazz.vcssl

上の通り、VCSSLはC系スクリプト言語の中でも保守的で、相応しい形容はまさに「電卓とかで動くCっぽいやつ」という感じです。 C言語そのものを採用しない事で、ユーザーがCの知識をそのまま適用できなくなる不利も生じるわけですが、 短いガイドに軽く目を通せば扱えるくらいシンプルにできれば(実際にこのガイドはそのために書いたものです)、 プログラミング未経験の方の存在も考慮すると、利点が上回るケースもあると判断しました。

標準ライブラリの諸機能

一転して、標準ライブラリの機能については、ある程度の汎用性を確保しています。 具体的には、簡易用途向けであまり高度な事はできませんが、GUIや2D/3Dグラフィックスなどをサポートし、 手軽にそうした処理を扱えます。計算/可視化用以外でも、それらの機能を用いて、簡易GUIアプリを作ったりする用途にもある程度は使えます。

これは初期コンセプトから外れるように思えますが、あくまでも言語の文法や必要な記述量などはシンプルに保ちながら、 極力それを壊さないように、必要に応じて読み込んで使える形で諸機能を提供しています。 (とは言いつつも、処理系の実装規模が肥大化してコンパクトさは失われてしまうため、それを補うために、後で触れるVnanoに繋がっています。)

グラフィックス系の機能を色々とサポートした理由は、筆者自身が数値計算をやっていて、 「計算結果やデータの可視化などをもっと手軽にできたらいいのに」と思っていた事に由来しています。 つまり、仮に計算メインの用途でも描画処理やアニメーション処理などを行いたい場面は結構あるわけで、 C/C++は速い代わりに、そのあたりを面倒に感じていました。

そしてVCSSLはせっかくC系の文法で手軽さを意識したので、 そのあたりを程々にシンプルな形でサポートできれば、(重い処理はやはりC/C++ですが)比較的ライトな可視化処理・シミュレーション用途や、 計算処理にGUIの設定画面を付けたりする用途などでも使えて、「 それはそれでありかもしれない 」と思いました。 従って、VCSSLが当初の電卓用の言語(1.0)から、独立した単体のスクリプト言語(2.0)としてもリリースするようになった時点で、そのような機能の拡充を行いました。

VCSSLの公式サイト内の「コードアーカイブ」では、 実際にVCSSLの標準機能を使って作成した、各種プログラムを配信しています。以下はその例です:

3Dグラフ
連番のデータファイルから、3Dグラフのアニメーションを行う可視化ツールです。連番画像の出力機能も備えています。

波の様子
2つの円形波が干渉する様子を、3DCGのアニメーションで再現するシミュレーターです。

ローレンツ方程式の解曲線
ローレンツ方程式の解曲線を求める数値計算プログラムです。GUIのパラメータ操作画面も備えています。

カラーディスプレイの画面の様子
RGB値や16進カラーコードを相互変換したり、色を実際に表示して見る事ができるGUIアプリです。

ソフト内組み込み用のサブセット「Vnano」

続いて、VCSSLのサブセットである、Vnano(VCSSL nano の略)の概要についてまとめてみましょう。

Vnanoのロゴ

といっても、Vnanoの開発コンセプトは、実はVCSSLの初期コンセプトとほぼ同じで、既にこの節の最初にまとめた通り「 電卓などに組み込まれて動く、コンパクトでC系の記法の簡易言語 」そのものです。

先にも述べた通り、VCSSLでは上のコンセプトから出発した後、ある程度の汎用用途での使用も視野に入れるようになり、機能の拡充を行いました。 電卓組み込みの言語から、単体でも使える言語として脱皮するには、あまりにも用途の幅が狭すぎたためです。 一方でその副作用として実装規模は大きくなり、初期のように「 処理系を開発しやすい、搭載しやすい、移植しやすい 」を目指す方向性からは少し離れてしまいました。

そこで、一度初期コンセプトに立ち戻り、 ソフトウェア内への組み込み用途に焦点を絞って、機能の幅を削って再びコンパクト化したのがVnano (VCSSL nano)です。 Vnanoの処理系はオープンソースで、一般の方々が、実際に自作ソフト内などに組み込んで使う事が可能です。 そのためのガイドなども下記公式サイトで公開しています:

機能が削られているだけで、文法の中心部分では、VnanoもVCSSLも基本的には同じ言語です。 そのため、このガイドの解説内容は、特に断らない限り、VCSSLとVnanoの両方で成り立ちます。

※一応は文法面でも機能が少し削られている事情で、コードによっては解釈が変わるケースもゼロではありません。

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



スポンサーリンク



Japanese English
この階層の目次
RINEARN からのお知らせ
※ VCSSL は RINEARN が開発しています。

VCSSLの最新版をリリース: 外部プログラムとの連携機能を少し強化、他
2025-05-25 - VCSSL 3.4.52をリリースしました。外部プログラム(C言語製の実行ファイル等)との連携機能を少し強化し、文字化け対策やOS判別などを可能にしました。他にも細かい機能追加があります。詳細をお知らせします。

VCSSLの最新版をリリース、Java 24上での非互換な挙動を対処
2025-04-22 - VCSSL 3.4.50をリリースしました。Java 24環境上でのネットワークドライブ関連のファイルパス解決で、従来環境とは異なる挙動が生じていたのを解消しました。詳細をお知らせします。

リニアングラフやVCSSLの最新版をリリース、目盛りの位置や内容を自由に指定可能に!
2024-11-24 - リニアングラフ3D/2Dを更新し、自由な位置に、自由な表記内容の目盛りを描けるようになりました! 併せて、Java言語やVCSSLでの、プログラム制御用APIも拡張しています。詳細をお知らせします。

Exevalator 2.2 をリリース、TypeScript 対応によりWebブラウザ上で動作可能に
2024-10-22 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。新たに TypeScript に対応し、Webブラウザ上での式計算にも使えるようになりました。詳細を解説します。

アシスタントAI作成の舞台裏(その2、作成編)
2024-10-12 - アシスタントAIの作成方法解説の後編です。実際にChatGPTの「GPTs」機能を用いて、アシスタントAIを作成する手順や、独自の知識をもたせたり、精度を出すためのノウハウなどを解説しています。

アシスタントAI作成の舞台裏(その1、基礎知識編)
2024-10-07 - アシスタントAI作成方法解説の前編です。今回はまず、アシスタントAIを作る前に抑えておきたい、基礎知識を延々と解説しています。そもそもLLM型AIとはどんな存在か? RAGとは何か? 等々です。

ソフトの利用をサポートしてくれるアシスタントAIを提供開始!
2024-09-20 - RINEARN製ソフトの使い方の質問応答や、一部作業のお手伝いをしてくれる、アシスタントAIを提供開始しました。ChatGPTアカウントさえあれば、誰でも無料で使用できます。使い方を解説します。

Exevalator 2.1 をリリース、新たに Visual Basic に対応
2024-07-28 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。今回から、新たに Visual Basic(VB.NET)でも使用できるようになりました。詳細を解説します。

関数電卓 RINPn(りんぷん)、Esc キーで計算式の一発クリアが可能に
2024-07-20 - 関数電 RINPn の Ver.1.0.2 をリリースしました。今回から、キーボードの「 Esc 」キーを押すと、入力中の計算式を一発でクリアできるようになりました。詳細を解説します。

Exevalator 2.0 をリリース、互換性に注意が必要なバグ修正が 1 件
2024-07-14 - オープンソースの式計算ライブラリ「Exevalator (エグゼバレータ)」の2.0をリリースしました。今回の更新では、互換性に注意を要する 1 件のバグ修正があります。詳細を解説します。