仕様
(1)言語仕様
JavaScript互換言語で、構文や語彙はJavaScript (Ecma5)に準拠しています。
[JavaScriptとの互換表]
(この仕様の目的)本言語系の目的は、JavaScriptの習得を最終ゴールとしています。
(2)言語拡張仕様
JavaScriptをベースに、任意の語彙や構文を言語本体に追加できます。
拡張はランタイムのAPIを通じて行い、拡張された状態では「JavaScriptのスーパーセット言語」になります。
その拡張分の差分を「Toolbox」とよびます。
(拡張例)本サイト上の「Standard Toolbox」は、この拡張仕様を利用して「Scratchライクなビルドインオブジェクト、関数、構文」をJavaScript表現したものです。
- Scratchライクなビルドインオブジェクト (例)Spriteクラス、Backdropクラス
- Scratchライクな関数 (例)wait()関数、broadcast()関数
- Scratchライクな構文 (例)forever文、repeat文
(この仕様の目的1)JavaScriptの学習を最終ゴールとしながらも、JavaScript本体だけではコンテンツの記述言語としては子供には難しすぎるため、
より平易で応用性の高いスーパーセット言語を提供することで、コンテンツの作成能力を高める狙いです。
(この仕様の目的2)子供向けのシュガー構文や、簡易なラッバーをJavaScriptに追加するため。
ただ独自シュガーを作ることは、JavaScript本体の学習を遅くすることにもなるので、現状では入っていません。
(この仕様の目的3)本言語の応用ジャンルを広げるため。たとえばドロー/ペイントに特化した言語拡張や、ロボティクス制御のための言語拡張などが考えられます。それらを新規の「Toolbox」として追加してゆくことで、子供の学習モチベーションが高まります。
(仕様についての補足)「独自オブジェクト」や「独自関数」の追加については、通常一般の場合でも、ライブラリで可能ですが、さらに「独自構文」の追加が可能なことに本スクリプトの特徴があります。
独自構文が役立つ例
この言語拡張機能は、公開APIを検討しています。
(3)言語入力仕様
スクリプトの入力系として下記の機能を備えます
- テキスト文書内の部分テキスト(論理的ブロック単位)での色付け機能
- テキスト文書内の部分テキスト(論理的ブロック単位)でのドラッグ&ドロップ機能
(この仕様の目的)子供のテキスト入力をサポートし、論理的なテキスト構造の手助け/理解を促すため。また誤入力を極力さけるため。
(4)言語色彩仕様
本言語系のGUI(Basicモード)で使われている色彩には、下記の表現意図があります。
- 緑:オブジェクトとそのリソース
- 青:インタラクション、イベント、トリガー
- 黄:コマンド
- 赤:言語系本体、ランタイム
(この仕様の目的1)言語やロジックのなりたちについて、なるべく少ない要素(4要素)の理解からスタートするためです。
(この仕様の目的2)色の割り当ては、濃い色の中に薄い色が入るように意図されています。このパターンを覚えることで、薄い色(手続き)を濃い色(イベント)の外に単独でおかず、イベントドリブンに書く習慣がつくように、という願いです。
(この仕様の目的3)上記にあてはまらないケースとして「ネスト」には水色を割り当てています。(水色は青と黄の中間で、かつ色がブロックとして認識しやすい)
(仕様についての補足)Basicモードには「リロード」ボタンがありますが、処理系をつくるうえで実はこのボタンは必須ではありません(ブロック式編集では誤入力がなく自動リロードできるため)。しかし言語学習において
「ランタイムの存在」という現実を意識するための「4要素目」として意図的においています。