MikoScript 言語仕様
はじめに
MikoScript は、手軽にプログラミングできるインタプリタ方式の汎用スクリプト言語
です。本言語は、現存のスクリプト言語の主要な機能の全てではありませんが、その多く
を装備し、さらに高度で便利な独自の機能も搭載しています。
本言語のシンタックスは、基本的にC言語系に属します。しかし、独自の仕様になって
いるところも少なくありません。世の中には、いろいろなスクリプト言語がありますが、
残念なことに、高度な機能を装備した言語は、往々にして、独特なシンタックスになって
います。それに慣れるには、かなりの時間と労力を要し、また、それを克服したとしても、
本来の感覚が損なわれかねません。その点、本言語では、多くのC言語系のプログラマー
にとって、比較的自然に違和感なく使い初められるようになっています。但し、本言語の
細部まで理解して使いこなすのは、容易ではないかもしれません。しかし、通常、本言語
の全機能に精通する必要はありません。実用上必要な機能だけをマスターしておくだけで
充分です。
オブジェクト指向プログラミングは、本言語でも勿論可能ですが、本言語は、必ずしも
その流儀を強制するものではありません。小規模なプログラムでは、むしろオブジェクト
指向を意識しないほうが簡単にできる場合も多いからです。
オブジェクト指向プログラミングを本格的に行なう場合、本言語は、それに必要な基本
機能だけでなく、多重継承や仮想メンバー等の機能も提供します。さらに、本言語では、
動的に可変なオブジェクトを扱えます。このオブジェクトは、メンバー構成や継承関係が、
コンパイル時に確定されてしまうのではなく、プログラムの実行時に任意に変化できます。
これを応用すると、従来の言語では考えられないようなオブジェクト指向プログラミング
が可能になります。このように、本言語のオブジェクトは、他の言語と比較して、高度で
柔軟な扱いができます。これらの詳細は「クラスとインスタンス」の章で述べます。
本言語の最大の特徴は、「箱」にあります。これは、本言語が導入した新しい概念です。
この箱は、いろいろな情報や機能を自由に出し入れできる仮想の入れ物で、様々な用途に
寄与します。本言語固有の変数、配列、関数、オブジェクト等も全て、内部的には「箱」
として存在します。そういう意味で、本言語はいわば「箱」を操作する言語でもあります。
この箱の基本特性や共通事項は、「箱」の章で述べています。各個別の機能(配列、関数、
オブジェクト等)の詳細は、関係各章で説明しています。これらの各章を読んで頂ければ、
「箱」は単なる入れ物ではなくて、その言葉から連想されるよりももっと深い意味があり、
また、おもしろい使い方ができることが分っていただけると思います。
文字列処理、ファイル操作、バッファ操作、コンソール入出力、数学関数、モジュール
管理などの機能は、本言語にあらかじめ組み込まれています。
テキスト処理においては、正規表現が扱えます。本言語の正規表現は、いわゆる Perl
相当のエンジンの借用ではありません。それよりも、さらに機能を向上させ、表記をもう
少しエレガントにするために独自に開発したものです。本言語の正規表現では、基本的な
日本語の曖昧検索は勿論、一致文字列パターンの識別番号による区別や、一致文字列部を
連想配列のインデックスとして想起される文字列に一気に置換する機能などがあります。
また、パターン全体として真に最小または最大となる一致部の検索も可能です。さらに、
従来不可能とされていた入れ子のパターンの検索も可能です。
GUI、インターネット、マルチメディア、データベースなどのプログラムを作成する
には、あらかじめ組み込まれている機能だけでは不十分です。そのため、本言語では、
DLL(ダイナミック・リンク・ライブラリー)の呼び出しが容易にできるようになって
います。また、DLLのコールバック関数も本言語で記述でき、構造体データも扱えます。
そのため、わざわざ仲介役のDLLをC言語等で別途作成しておかなくても、OSで提供
されているほとんどのDLLを直接利用できます。サンプルプログラムの HelloWin.mc
は、この辺の実装を知るのにも、GUIの入門としても好適です。但し、DLLの中には、
本言語の現状の機能では直接呼び出せないものもあります。
本言語のインタプリタは、ソースプログラムを中間コードに変換して実行します。この
中間コードは、ファイルに保存しておくこともできます。それによって、単に翻訳時間の
節約になるだけでなく、中間コードのライブラリーとしての管理も可能です。
中間コードによる実行方式は、そうでない方式のインタプリタよりも、かなり高速です
が、ネイティブのマシン語を直接実行する場合と比較すると、遥かに低速です。そのため、
一般に、インタプリタ方式の言語は、実行速度が致命的な用途には不向きですが、そうで
ない用途では、その簡便さを十分に享受できます。特に本言語の場合、インタプリタ方式
の利点をフルに活かして、コンパイラ方式の言語では通常不可能な言語仕様も実現してい
ます。
このほかにも、本言語には、いろいろな特徴があります。その詳細は、関係各章で説明
しています。