NewtonScript講座 online

第1回: Newtonの開発環境



Newtonとは?

 Newtonに関してはあまりご存じない方も多いでしょうから簡単に説明から始めましょう。

 NewtonはApple Computer社が1993年に発表したPDAです。最初に発売されたMessagePad、そしてRAMが増えたりシステムに多少の修正が加わったMP100、110、120と発売され、そして95年の12月に待望のOS 2.0を搭載したMP120が発売されています。右図がNewtonの画面です。

 CPUにはARM610というRISCチップを使っています。これはだいたいMacintosh II fxと同程度の性能を持つ石です。Macをご存じない方は32bit CPUを積んでいると思って下さい。

 OSにはApple独自のものが使われています。もちろんMac OSではありません(笑)。Newton OSです。これはマルチタスク、メモリ管理などの基本的な性能はもちろんのこと、とてもOSと呼ぶには高級すぎる機能を持ったなかなか素晴らしいOSです。

 PDAらしいOSの特徴として、ファイルという概念がない、通信機能のサポートの充実などがあげられます。ファイルがなくてどうすんだーという方、おいおい説明していきますのでお待ち下さい。



Newton Scriptのお話

 Newtonは、もちろんOSのコアや低レベルなドライバーなどはC++で書かれたネーティブのコードですが、その他のほとんど全てのコードはNewton Script環境で動いています。この場合Newton Scriptとは言語のことではなく実行環境を指します。言語としてのNewton Scriptで書かれたソースコードは、コンパイルすると中間言語に変換されます。そしてこの中間言語がNewton Script環境によって実行されるわけです。こうしたことから、Newton Script環境というのはNewton OSそのものであるとも言えます。

 言語としてのNewton Scriptの詳細をここで説明し出すととても終わらなくなるので簡単に説明します。文法的にはpascalに近いとらしいです。これは行の終わりのセミコロンとかそういうレベルの話です。らしいというのは自分はちゃんとpascalを知らないので(笑)、人の話としてお伝えします。大文字小文字の区別もありません。次のコードは簡単なfor文の例です。

    // for文
    for i:=1 to 10 by 2 do
        print(x);

 扱える型は単純なものとして30bit長の整数型、文字型、ブール型、より高度なものではシンボル(symbol)、文字列、実数、配列(array)、フレーム(frame)などなど。これらの詳しい説明はちゃんとした解説書を見て調べて下さい(無責任)。この中で重要なのがシンボル、配列、フレームです。

 シンボルは非常に説明するのが難しいのですが、識別子です。わかる人はこれだけで、あぁ、あれね、で済むんですが、わからない方はそのままでかまいません。サンプルの中でいずれでてきますので、そこで覚えて下さい。

 配列は普通の配列です。前にpascalと似ているといったくせになぜか0ベースです(笑)。配列の型というものはありません。つまり整数型の配列などがあるわけではなく、ただの配列なのです。配列の要素としてはなんでも入れられます。一つの配列の中に別の種類の型の値を混在させてもかまいません。配列の要素としてさらに配列を入れることも可能です。そのかわり多次元配列は用意されていませんが、必要ないことはお分かりでしょう。次のコードは配列の例です。

    // 配列の例
    [10, "Hello", [44, 31, 16], nil, "World"]

 フレームはレコード型のようなものです。フィールドに相当するものはスロット(slot)と呼ばれています。このフレームがNewton Scriptの中では最も重要な働きをします。スロットも配列の要素と同様になんの値でも受け付けます。別のフレームが来てもかまいません。次のコードはフレームとスロットの参照の例です。

    // 配列の例
    x := {slot1: "Hanshin", slot2: "Tigers", slot3: 60};
    x.slot3;   // この値は60です

 簡単に変数についても触れておきましょう。変数には型はありません。なんの型でも入れることが出来ます。ある型の値の入った変数に別の型の値を代入してもかまいません。値の代入は簡単な型(整数型、文字型、ブール型)の場合は変数に直接その値が入ります。それ以外の型は参照値が入れられます。変数にはローカル宣言しない限りグローバルに作成されてしまいます。PDAはコンピュータと違いリスタートの間隔が長いので、その間はずっとその変数が生き残ってしまうことになります。変数を作るときは注意して下さい。

 さて突然ですがNewton Scriptはオプジェクト指向環境です。別の言い方をすればNewton Scriptはオブジェクト指向言語であるとも言えるかもしれません。でもC++などをご存じの型にとってはかなり毛色の違ったオブジェクト指向環境です。この違いはいずれ説明しましょう。とにかくオブジェクト指向であること、すなわち属性の継承とメッセージ送信です。

 Newton Scriptではオブジェクトの単位はフレームになります。そしてあるフレームに_protoという名前のスロットがあり、その値が別のフレームであった場合、最初のフレームは_protoのフレームのスロットを参照できます。例で説明しましょう。

    x:={a:1, b:2};
    y:={_proto: x, c:3};

    x:={a:1, b:2};
    y:={_proto: x, a:4, c:3};

 上の例ではyはxを継承していますのでy.aの値は1になります。また、下の例ではxを継承したyでさらにスロットaが定義されています。この場合はyで定義した方が優先されますので、y.aの値は4になります。

 メッセージ送信は、あるフレームにメッセージを送ると、そのメッセージに相当するスロットに定義してある関数が実行されるというものです。

    x:={say: func() print("Hi!")};
    x:say();  // "Hi!"が表示される

 この場合にももちろん継承が有効なので、直接そのフレームがメッセージに反応しなくても_proto階層上のどれかが反応できればいいことになります。

 これらのオブジェクト指向の機能は次回予定しているビューシステム(View Sysem)で大いに使われます。


Newtonの開発環境

 Newtonで開発を行おうと思った場合には、二つの方法が考えられます。一つはMacやWindowsなどの走っているホストマシンで開発を行いNewtonに完成したソフトをダウンロードする方法、もう一つは文字どおりNewton上で開発してしまう方法です。

 まず前者の方は今のところAppleから販売されているNewton Toolkit(NTK)だけしかありません。これが標準です。この連載でもNTKを使っていきます。この原稿を書いている時点ではまだMac版しか発売されていませんが、すでにWindows用のベータ版の配布も始まっています。Mac版の最新バージョンは1.6です。下図がNTKの画面です。


Macintosh上でNewton Toolkitを使ってプログラムの作成。左のウィンドウが
レイアウト用のもの。ここでパーツを配置していく。右上にはそのパーツパレット。
右下に見えているのがブラウザー。ほとんど全ての設定やコーディングはここで
行う。左下にあるのは全体のプロジェクト管理のためのウィンドウ。

 後者の例としてシェアウェアとして流通しているNewtという開発環境があげられます(左図)。初めはタートルグラフィックを書くための環境として始まったプロダクトですが、いつのまにかNewton Scriptを入力できるようになり、最近ではパッケージまで作成できるようになっています。

 別の環境としてはNS Basicというものがあります。名前からわかるとおりBasic環境です。これを使えばNewton Scriptの文法は覚えなくてもかまいません。(ただし最終的にはNewton Scriptのバイトコードに落ちるわけですから、そのときの実行環境のためにもある程度Newton Scriptに関する知識はあるに越したことはありませんが。)

 実際に商品レベルのソフトを作ろうとした場合、Newton上で開発する方法はとても実用ではありませんが、日曜プログラマーにとっては非常に手軽で面白い環境だと思います。リクエストがあるようならこの連載でも取り上げてみたいと思います。しばらくはNTKで行きたいと思います。



今月のプログラム「Hello World」

 紙面も残り少ないので今月のプログラムに行きたいと思います。毎月簡単なプログラムを作っていきます。今月のお題はご存じ「Hello World」です。

 NTKではドローソフトのような環境で画面を作りながら、ブラウザーと呼ばれるエディターで細かい設定を行います。ちょっとみには最近はやりのクラスライブラリー用の画面エディターに見えますが、根本的に違うのはレイアウトだけでなく実際のコーディングもこのブラウザー上で出来るということです。ボタンを配置したら、その場でその動作も書けるわけです。Visual Basicなどに似ているんでしょうか。知らないことは書かないことにしましょう(笑)。

  1. まずプロジェクトを作ります。プロジェクトとはプログラム全体を管理するファイルで、レイアウトやリソースなどを登録します。ProjectメニューからNew Projectを選び、適当なところに保存します。

  2. 次にプロジェクトの設定を行います。ProjectメニューのProject Settingsを選び、ダイアログでアプリケーションの名前、シンボル、パッケージの名前を全て「Hello」に設定して下さい。

  3. FileメニューからNew Layoutを選び新しいレイアウトを作ります。レイアウトウィンドウが表示されると同時にビューパレットも現れますので、このパレットのポップアップメニューからprotoAppという項目を選びレイアウトウィンドウに四角を描く要領で配置して下さい。これが基本的なビュー(view)になります。ビューというのはNewtonの画面に表示されているものの構成要素です。ビューについては次回から詳しく解説します

  4. またポップアップメニューから今度はprotoStaticTextを選び、先ほどのprotoAppの四角の内側に同じように配置して下さい。適当な名前でレイアウトを保存したら、ProjectメニューのAdd This Windowコマンドでプロジェクトに追加します。レイアウトは右図のようになっているはずです。

  5. 最後に値の設定を行います。レイアウトウィンドウが全面にある状態でWindowメニューからNew Browserを選びブラウザーを表示させます(下図)。protoAppの中のtitleスロットの値を"Hello World"に、protoStaticTextの中のtextスロットの値を"Hello World!"に設定します。


これでおしまいです。もう一度保存しておきましょう。ProjectメニューからBuild Packageでコンパイルを行い、Download PackageでプログラムをNewtonに送ります。下図はHelloアプリケーションを実行した結果です。ちょっと寂しいですが、見事にメッセージが表示されていますね。


来月の予告

 今回は取り急ぎ説明したせいで何が何だかわからなかったと思いますが、初めですので今回は雰囲気をつかんでいただければけっこうだと思います。来月からは各機能ごとに詳しく掘り下げていきたいと思います。来月はNewtonの最も重要なビューシステムを題材に、計算機でも作ろうかと思っています。では。


サンプルのダウンロード


目次に戻る 次に進む