ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

「Microsoft Small Basic」解剖

最近、話題になっていたり話題になっていなかったりする

教育向けプログラミング言語「Microsoft Small Basic」

このSmall Basicは.NET Frameworkのシステムの上、設計されており、
なんと、Small BasicのコードをVB.NETのコードに変換することが可能です。


Small Basicの開発環境だけではよく分からないSmall Basicの仕組みも、VB.NETのコードに変換することによって、奥深くまで解ります。

そこで今回は、Small Basicの仕組みで分かったことを、いくつか書いていきます。

正確に言うとSmall Basic Libraryの仕組みですね。


今回の記事はSmall Basicを触ったことがないと伝わりにくい部分があるかも知れません。






一番に特徴的なことは型という概念が存在しないことです。

変数も、メソッドの引数、戻り値も全て型はありません。


しかし、結局は内部の話をすると型はあるわけです。

型がないとVB.NETのコードに変換できません。


Small Basicの関数や型は全て.NET Frameworkの仕組みにそって書かれているみたいですが、

型があるのに、

a = 10
a = 0.1
a = "いち"

というテキトーな書き方が出来るのはなぜか調べてみました。


Small BasicのプログラムをVB.NETのコードに変換してみると、
Microsoft.SmallBasic.Library.Primitiveという型に全てなっていることがわかります。

Primitive型はクラスですが、クラスという概念のないSmall Basicでは存在を隠蔽されています。


そこでまぁ、IntegerやStringやDecimalなどの型の変数をいくつかPrimitiveクラスに持って、
型の存在が分からないようにPrimitiveクラスが処理してくれているのかなと思うわけですが、

これで納得かなと思うわけですが、

一つだけ気がかりなのは、VB.NETでも

Dim a As Primitive = "String"
a = 2

などという謎の書き方ができることです。


実はこれはVB.NETの正しい機能で、演算子のオーバーロードをしています。

ここで言う演算子とは、キャスト演算子です。

キャスト演算子をオーバーロードして、
"String"なら"String"という値を保持するPrimitive型に暗黙的キャストをするようにしているわけです。

2なら2という値を保持するPrimitive型に暗黙的キャストを行います。

kこれは恐らく、VB.NETのコードに変換したとたんに

Dim a As Primitive = New Primitive("String")
a = New Primitive(2)

という頭が痛くなるようなコードになってしまうことを避けたんでしょうね。




それと、VB.NETのコードに変換するときに、どのようなやり方にするか、という件ですが、簡単なことです。


とりあえず、自動でクラスが作られて、自動でMainメソッドが作られているようです。

Small BasicのコードはVB.NETのコードに変換され、Mainメソッド内に書かれていました。

ただし、Small BasicでもSubプロシージャが書けるのですが、そのときはちゃんとVB.NETでもSubプロシージャが作成されます。

そして、Small Basic内でのローカル変数は、グローバル変数
(メンバ変数)として作成されます。

これは、Small Basicでは、ローカル変数というものはなく、
Subプロシージャ内でも、どこでも宣言した変数を使用できるようで、その仕組みを実現するためです。




あとはライブラリ内の関数の仕組みですが、

まぁ、これは外部とのやり取りに使う型を全てPrimitive型にして、SheardなメンバにすればOKなんだと思います。

詳しくはないですが…。

あと、属性クラスを設定する必要もありますね。

関数の処理内部はVB.NETやC#でしょうから、ここで言及するべきものではありません。




以上です。

Small Basicとして書いているぶんにはよく分からないライブラリですが、
VB.NETのコードから真の姿を見ると、色々な工夫がなされています。


Microsoftも、教育分野に力を入れたいところなのでしょうかね。

tag:

コメント

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/269-796a2459
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。