根性なしなのでなかなか開発が進んでないけど、とりあえず“やることメモ”を書いておきます。
– 基本データ型のラッパーオブジェクト(独自仕様)
– 不定長引数(独自仕様)
– デストラクタ(独自仕様)
– エンディアン対策
– パッケージシステム(独自仕様)
– 拡張ライブラリの強化
(SOCKET, DBI, SYSTEM…etc)
– 日本語対応
– テストパターン
– ドキュメント
– サンプルスクリプト
– View システムの研究
—
分かり難いところだけ解説すると
– 基本データ型のラッパーオブジェクト(独自仕様)
NewtonScript ではフレーム以外のオブジェクトはメソッドを持つことができません。この辺はすべてが均質でないための弱点なわけですが、これをカバーするためにフレーム以外のオブジェクトに特別なラッパーオブジェクトというものを導入します。同じような考え方は JavaScript が採用しています(*1)
具体的にはオブジェクトのクラス(クラス指向のクラスとは別物)に対応する名前付マジックポインタにメソッドをデリゲート(委譲)するような形になると思います。
– 不定長引数(独自仕様)
Apple の仕様としては引数の数は固定なのですが、それだと print 関数などで非常に使いづらいものがあります。使いやすさ重視ということで不定長引数を使えるようにしたいと考えています。
– デストラクタ(独自仕様)
拡張ライブラリが確保したリソースが GC のときにリークしてしまう問題を解決するため。
– エンディアン対策
Mac と PC(x86) では CPU のエンディアンが違うため生成されるバイトコードやオブジェクトに互換性がありません(エンディアンが違う)。普通にスクリプトのソースコードを実行する場合はそれでもいいのですが、バイトコードやオブジェクトをファイルに保存して別のエンディアンの環境で実行しようとしたときに問題が発生してしまいます。
対策としてはエンディアンの統一、もしくは識別フラグをもうけてどちらのエンディアンにも対応するという方法が考えられますが、まだ方針は決まっていません。
– パッケージシステム(独自仕様)
Apple の PDA “Newton” ではパッケージと呼ばれる単位でプログラムが管理されていました。コンパイルされたバイトコードとオブジェクトがいっしょになったようなものとイメージするといいでしょう。いまのところ Newton と互換性のあるものは考えていません。パソコンの OS で動作するときに最適化された仕様になると思います。
パッケージを使うと構文解析の時間が短縮できますし、構文解析のルーチンそのものが必要でなくなります。通常のスクリプト実行ではあまり意味がありませんが、REALbasic のように単体アプリを作成したときにランタイムを小さくし起動速度を速くできるというメリットがあります。それと Web のサーバプログラムにも活かせるかなと考えています。すぐにそういうものができるというわけではありませんが、そういったものも視野に入れているということです。
実際にはエンディアン問題やパッケージ内のシンボルやオブジェクト参照(マッピング)、パッケージを削除したときのメモリ解放など課題や山積みなのでかなり先の長い話になります(^^;
*1) アイデア自体はずいぶん前から考えていたのですが、JavaScript の本を読んだら偶然同じような考え方が載っていました。名称としては JavaScript にならって「基本データ型のラッパーオブジェクト」とします
Tags: NEWT/0, NewtonScript