| ニュートンスクリプト | |
|---|---|
| パラダイム | プロトタイプオブジェクト指向 |
| デザイン: | ウォルター・スミス |
| 開発者 | アップルコンピュータ |
| 初登場 | 1993 (1993年) |
| タイピングの規律 | 動的 |
| 影響を受けた | |
| セルフ、ディラン | |
| 影響を受けた | |
| イオ | |
NewtonScriptは、 Newtonプラットフォーム用のプログラムを書くために作られたプロトタイプベースのプログラミング言語です。[ 1 ] Selfプログラミング言語の影響を強く受けていますが、モバイルや組み込みデバイスのニーズにより適したものに改良されています。[ 2 ]
歴史
1993年8月3日、AppleはApple Newton MessagePadを発表しました。このデバイスは、640KBのRAM、4MBのROM、そして20MHzのARM 610マイクロプロセッサを搭載していました。
Newtonプロジェクトの主目的は、持ち運びが可能でありながらコンピューターの代わりとなるデバイスを開発することでした。バッテリーとメモリが限られているため、開発者たちはこれらの課題に対応できるプログラミング言語を探していました。
開発者たちはC++プログラミング言語を検討しましたが、柔軟性に欠けることに気づきました。彼らはプロトタイプベースの言語に着目し、SmalltalkとSelfに感銘を受けました。[ 3 ]当時、AppleはDylanという別の動的プログラミング言語を開発しており、これはNewtonプラットフォームの有力な候補でした。[ 4 ]
しかし、セルフとディランは両者とも、適切な統合の初期段階にあったため、検討対象から外されました。
代わりに、Walter R. Smith率いるチームはNewtonScriptと呼ばれる新しい言語を開発しました。これは、Smalltalkのような動的言語とSelfのようなプロトタイプモデルベースの言語の影響を受けています。[ 3 ]
特徴
NewtonScript は Self の影響を強く受けていますが、両言語にはいくつかの違いがあります。
相違は、自分自身に関する 3 つの認識された問題によって生じました。
- 一つは、典型的なSelfスナップショットの実行には32MBのRAMが必要ですが、Newtonプラットフォームはオペレーティングシステム用に128KBしか使用しないように設計されていることです。そのため、エンジンを最適化し、アプリケーション用のメモリを確保するには、大幅なメモリ削減が必要でした。
- もう一つの問題はパフォーマンスでした。この言語は既存のオペレーティングシステム上で実行されるだけでなく、システム全体で使用されるため、可能な限り高速に動作する必要がありました。
- 最後に、通常のSelfエンジンの継承システムには1つの親オブジェクトがありましたが[ 5 ]、GUIには通常2つの親オブジェクトがあります。1つはオブジェクト用、もう1つはGUIレイアウト用で、通常は何らかのGUI階層オブジェクト(Viewなど)にスロットを追加することで処理されます。
また、Selfが広く使用していたGUI環境とは対照的に、よりテキストベースのプログラミングスタイルを可能にするために構文も変更されました。これにより、NewtonプログラムはToolkitを実行しているコンピュータ上で開発され、そこでコンパイルされた後、Newtonデバイスにダウンロードして実行できるようになりました。
NewtonScriptのプロトタイプベース継承の利点の一つは、メモリ使用量の削減です。これは128KBのNewtonでは重要な考慮事項でした。GUIオブジェクトのプロトタイプはROMに保存できるため、デフォルトのデータや関数を作業メモリにコピーする必要はありませんでした。
クラスベース言語ではオブジェクトの作成時に全ての属性にメモリが割り当てられますが、NewtonScriptsではプロトタイプ継承を採用しているため、新しいオブジェクトを作成する代わりに、_protoや_parentといった少数のフィールドにメモリを割り当てるだけで済みます。ここで、_protoと_parentは、オブジェクトがプロトタイプ継承を使用しているか、親継承を使用しているかを表します。[ 6 ]
上記の概念を説明する例として、開発者が新しいボタンインスタンスを作成するとします。ボタンがデフォルトのフォントを使用する場合、そのフォント「スロット」(つまり、プロパティまたはメンバー変数)にアクセスすると、実際には ROM に格納されている値が返されます。RAM 内のボタンインスタンスは独自のフォントスロットに値を持っていないため、値が見つかるまでプロトタイプ継承チェーンがたどります。その後、開発者がボタンのフォントを変更すると、フォントスロットに新しい値を設定するとプロトタイプがオーバーライドされ、このオーバーライド値が RAM に格納されます。したがって、NewtonScript の「差分継承」は、デフォルトデータとコードの大部分を PDA のより安価で大容量のROMに格納することで、Newton の高価なフラッシュ RAMを効率的に使用しました。
重要な用語
- ビュー
- これらは、Newton View System によって作成されたオブジェクトであり、実行時にビューをレンダリングするために作成されます。
- テンプレート
- ビューが作成される青写真です。
- プロトス
- これらはテンプレートまたはビューの青写真となることができ、NewtonScript コード ライブラリの要素です。
- フレームとスロット
- フレームはスロットの動的なコレクションであり、フレームの要素の一つはスロットと呼ばれます。スロットは名前と値で構成されます。値は任意の型を取ることができます。NewtonScriptのすべてのオブジェクトはフレームであることに留意してください。[ 7 ]
- スープとエントリー
- 関連するフレーム/データのコレクションです。エントリはスープ内の個々のフレームです。
- フレームヒープ
- NewtonScript によって動的に割り当てられる RAM。
- ベースビュー
- これはアプリケーションのメイン ビューであり、アプリケーションで使用されるすべての変数とメソッドで構成されます。
メリットとデメリット
- 利点
- NewtonScriptは、差分継承を採用した動的プロトタイプベースのプログラミング言語です。これは、メモリ空間を非常に効率的に利用することを意味し、動的であるため、実行時にオブジェクトの変更や型チェックなどを容易に行うことができ、開発者に大きな柔軟性をもたらします。
- 作成されたオブジェクトは、フラッシュカードや内部メモリなどの永続メモリに保存できます。RAMは、実行時に値が変化する属性の保存にのみ使用されます。これにより、メモリ消費量を削減できます。
- クラスを作成してインスタンス化するのではなく、GUI コントロールのオブジェクトを直接記述できるため、プロトタイプ モデルを使用すると、GUI アプリケーションのインターフェイスの記述を効率的に実装できます。
- ガベージコレクションはシステムによって自動的に実行されます。これにより、開発者はメモリ管理を気にすることなくアプリケーション開発に集中できるようになりました。また、ガベージコレクションは、ポインタが誤って解放されたメモリ位置を指してしまうダングリングポインタの問題を軽減するのにも役立ちました。 [ 6 ]
- デメリット
- NewtonScriptのコードはあるプラットフォームで記述され、別のプラットフォームで実行されるため、デバッグは事実上不可能でした。[ 2 ] Newtonエンジンのデバッグコードを改良すれば、この問題はある程度軽減できたはずですが、メモリの制約により困難でした。開発者はエラーコードとともに漠然とした情報しか得られず、元のコードの行と照合することができませんでした。
- もう 1 つの欠点は、C++ や Java のような静的に型付けされた変数の場合のように単純なポインタ逆参照が使用できないため、動的変数では操作速度が低下することです。
影響
1998年にAppleがNewtonプロジェクトを中止したことで、[ 8 ] NewtonScriptのその後の主流の開発はすべて停止されました。しかし、NewtonScriptで使用されていた機能は、他のプログラミングモデルや言語にインスピレーションを与え続けました。
Self と NewtonScript のプロトタイプベースのオブジェクト モデルは、これまでこの概念を採用した最も人気があり、よく知られている言語 であるJavaScriptで使用されました。
NewtonScriptは、Smalltalk、Self、Act1、 Lisp、Luaとともに、Io [ 9 ]と呼ばれる汎用プログラミング言語の概念的な先祖の1つでもあります。Ioは、NewtonScriptでメモリを節約するために使用されていたのと同じ差分継承モデルを実装しています。
参照
参考文献
- ^ Smith, WR (1994-02-01). 「Newtonアプリケーションアーキテクチャ」. COMPCON '94 論文集. pp. 156– 161. doi : 10.1109/CMPCON.1994.282931 . ISBN 978-0-8186-5380-3. S2CID 8780685 .
- ^ a b Schödl, Arno (2004-10-10). 「NewtonScriptプログラミング言語」 . 2004-10-10時点のオリジナルよりアーカイブ。 2016年9月15日閲覧。
{{cite web}}: CS1 maint: bot: 元のURLステータス不明(リンク) - ^ a b Smith, Walter R. (1995-01-01). 「ユーザーインターフェースのためのプロトタイプベース言語の使用」.第10回オブジェクト指向プログラミングシステム、言語、およびアプリケーションに関する年次会議 - OOPSLA '95 の議事録. ニューヨーク、ニューヨーク州、米国: ACM. pp. 61– 72. doi : 10.1145/217838.217844 . ISBN 978-0897917032. S2CID 14099947 .
- ^ 「Dylan: オブジェクト指向動的言語」 www.cise.ufl.edu . 2016年9月22日閲覧。
- ^ Chambers, C.; Ungar, D.; Lee, E. (1989-01-01). 「プロトタイプに基づく動的型付けオブジェクト指向言語SELFの効率的な実装」.オブジェクト指向プログラミングシステム、言語、アプリケーションに関する会議議事録 - OOPSLA '89 . ニューヨーク、ニューヨーク州、米国: ACM. pp. 49– 70. CiteSeerX 10.1.1.588.6955 . doi : 10.1145/74877.74884 . ISBN 978-0897913331. S2CID 5798276 .
- ^ a b「The NewtonScript Programming Language」(PDF) 1996年。2015年1月24日時点のオリジナル(PDF)からのアーカイブ。
- ^ McKeehan, Julie; Rhodes, Neil (1994). 『Newton®のためのプログラミング:NewtonscriptTMによるソフトウェア開発』 955 Massachusetts Avenue, Cambridge, Massachusetts 02139: AP Professional. ISBN 978-0-12-484800-9。
{{cite book}}: CS1 メンテナンス: 場所 (リンク) - ^ 「AppleがNewtonをキャンセル」 windowsitpro.com 1998年2月28日2016年9月22日閲覧。
- ^ "io ガイド" . iolanguage.org . 2016年9月15日閲覧。
外部リンク
- SELF と NewtonScript の起源、Wayback Machineに 2010 年 3 月 11 日にアーカイブ、Walter Smith、1994 年。
- ユーザー インターフェイス用のプロトタイプ ベース言語の使用: Newton プロジェクトの経験 ( Wayback Machineに 2008 年 9 月 3 日にアーカイブ) (PDF)、Walter Smith、1995 年。
- クラスベースの NewtonScript プログラミングは、Wayback Machineで 2008 年 6 月 29 日にアーカイブされました(Walter Smith、1993 年)。
- ニュートン関連の追加の論文は、Wayback Machineで 2020 年 1 月 17 日にWalter Smith によってアーカイブされています。
- NewtonScript プログラミング言語(archive.org キャッシュ、元のリンクは 2004 年 10 月 15 日時点で無効です。)
- NEWT/0ポータブルな NewtonScript コンパイラ/インタープリタ
- NewtDevEnv は、Steve Weyer による、Newton 上で直接開発を実行できる NewtonScript 開発環境です。
- DyneTK は、オリジナルの Newton ToolKit (NTK) に代わる NewtonScript 開発環境であり、Matthias Melcher によって開発され、MS Windows および Mac OS X で動作します。