| デザイン: | モトローラ |
|---|---|
| 開発者 | マイクロウェア |
| 初登場 | 1980年 |
| 安定版リリース | 1.1.0 / 2003年1月5日 |
BASIC09は、モトローラに代わってマイクロウェアが当時の新製品であったモトローラ6809 CPU用に開発し、1980年2月にリリースされた構造化BASICプログラミング言語方言である。 [1]主に1979年にリリースされたOS-9オペレーティングシステムで使用されている。マイクロウェアは、 68000上のOS-9/68k用のバージョンをマイクロウェアBASICとしてリリースした。[2]
当時の典型的な BASIC とは対照的に、BASIC09 には、I-codeと呼ばれるコンパクトなバイトコードを生成するマルチパスコンパイラが含まれています。I-code は、他の BASIC にあるいくつかのデータ構造をコードと値への直接ポインタに置き換え、パフォーマンスを高速化します。ユーザーは、 コマンドを使用してコードをさらにコンパイルすることができ、その時点で OS-9 によって直接呼び出され、ネイティブ コードとして操作できます。PACKed コードの場合、BASIC09ランタイム システムの縮小版であるRunb が使用され、メモリ フットプリントとロード時間がさらに改善されます。
PACK
この言語には、ローカル変数、名前付きルーチンを優先して行番号を無視する機能、ユーザー定義の構造、浮動小数点数や文字列に加えて 16 ビットおよび 8 ビット (バイト)の整数を含むいくつかの異なる基本データ型など、構造化プログラミングの追加機能が多数含まれています。
構文
プログラムの構成
BASIC09 と当時の従来の BASIC (標準的なMicrosoft BASICPROCEDUREなど) との主な違いは、別々に実行可能なコードブロックを作成する構造が追加されたことです。 のコードは、変数がコードにローカルであることや、スタンドアロンで実行できることPROCEDUREなど、他の BASIC の完全なプログラムとの共通点が多くありました。は、 コマンドを使用して名前で呼び出され、関数呼び出しセマンティクスの変数を含めることができました。たとえば、 は、 2 つのパラメータを取る という名前のプロシージャを呼び出します。パラメータは、次の例のように、キーワードを使用してプロシージャにインポートされます。[3]PROCEDURERUNRUN add(4,7)addPARAMPARAM a,b
手順追加 パラメータa,b 印刷 a+b
名前付きプロシージャの使用による副作用は、結果として得られるメモリ ワークスペースが、事実上、独自の名前空間になることです。この点で、BASIC09 システムは、ユーザーにとって呼び出し可能なプログラムのディレクトリのように見えます。これは、一度に 1 つのプログラムしか使用できず、ライブラリのようなコードを呼び出す大規模なプログラムを構築するには、通常、ソース コードをコピーして別のプログラム間で貼り付ける必要がある一般的な BASIC とは対照的です。BASIC09 では、ユーザーはLOAD名前でプロシージャをワークスペースに挿入し、自分のコードから呼び出して、別々に保存されたプロシージャから大規模なプログラムを構築できます。[4] [a]
ワークスペース内のコードに加えて、プログラムがRUN見つからないプロシージャ名で呼び出された場合、同じ名前のディスクファイルを検索し、そのファイルをロードして実行します。これは、BASIC09コードだけでなく、マシン言語ファイルを含む他の実行可能プログラムでも機能しました。つまり、BASIC09はシステムルーチンを簡単に呼び出すことができました。[5]
に加えてRUN、他の一般的な BASIC コマンドも同様に名前を使用します。たとえば、LIST bobは「bob」という名前のプロシージャのソース コード (「リスト」) を出力しますが、 はLIST*現在メモリ内にあるすべてのプロシージャを出力します。 からの整形された出力はLIST、 などのシェルのような表記法を使用してファイルまたはプリンタにリダイレクトできます。 および をストレージからプロシージャとしてLIST bob >/p使用することもできます。 [6]SAVELOAD
構造化プログラミング
の組織的特性に加えて、BASIC09 には、BASIC のフロー制御PROCEDUREステートメントにいくつかの拡張が加えられ 、より構造化されたものになっています。たとえば、ステートメントは従来の...形式で 1 行で使用することも、構造化された複数行形式で使用することもできます。[7]IFIFTHEN
x>10の場合 PRINT "x は 10 より大きい" それ以外 PRINT "x は 10 より小さい" 終了
FOR/NEXTループは当然構造化された形式を持ち、 はNEXT任意の行に配置できますが、BASIC09ではインデックスなしのループで作業する場合の明確さを高めるために と も追加されました。WHILE/ENDWHILE[ 8]また、 文を使用してループ本体の任意の場所をテストするcenter-exit も含まれていました。 [9]REPEAT/UNTILLOOP/ENDLOOPEXITIF
データ型
BASIC09 には、いくつかの組み込みデータ型が含まれていました。当時のほとんどの BASIC に見られる従来の文字列 (STRING) と 40 ビット浮動小数点 (REAL) 型に加えて、16 ビット符号付き INTEGER、8 ビット符号なし BYTE、論理 BOOLEAN 型も含まれていました。BOOLEAN 型はバイトにパックされず、1 つの BOOLEAN は 8 ビット バイト全体を使用して 1 つの値を格納しました。言語は、BYTE と INTEGER のビット単位演算用に、個別のバイト単位ブール演算子を提供しました。 [10]異なる基本型を操作する他の BASIC とは対照的に、BASIC09 は変数名を「装飾」して型を示すことはせず、代わりにDIMfor 定義を使用しました。たとえば、DIM a,b:BOOLEAN2 つの BOOLEAN 変数を宣言したり、DIM c(5):INTEGER5 つの INTEGER の配列を宣言したりしました。[11]
さらに、BASIC09にはTYPEキーワードが含まれており、これにより複合型を定義でき、各「要素」は1行にセミコロンで区切って列挙される。例えば:[12]
TYPE employee_record=name:STRING;number(2):INTEGER;旧:BOOLEAN
employee_recordは、3つの要素name、、numberおよびを持つ従業員レコード型を定義しますformer。従業員レコード型は、他の型と同様に定義で使用できます。たとえば、DIM employees(100):employee_record100個の従業員レコードの配列を定義します。コード内で要素にアクセスするには、ドット表記を使用します。たとえば、 ですemployees(50).name="Bob"。[12]
ランタイム
編集
行番号は、ほとんどの BASIC 方言で、主にエディターをサポートする方法として使用されていました。ユーザーは、番号を入力して特定のコード行を編集し、その後のテキストは、メモリ内の既存の行に追加されるか、またはそれらの行を置き換えます。すべてのコード行に番号が付けられていたため、これは、GOTOまたはのターゲットを示すのにも適していました。一方、 FORTRANGOSUBなどの他の言語では、この目的で別の「行ラベル」が使用されていました。
BASIC09 は通常行番号を使用しなかったので、ユーザーが行を番号で参照せずに編集できるようにエディターを変更する必要がありました。しかし、BASIC09 はフルスクリーン機能を想定していなかったため、カーソルキーを使用することはできませんでした。代わりに、システムには別のエディタープロンプトがあり、ユーザーは+キーと-キーを使用して、一度に 1 行ずつ前後に移動できました。行番号なしで新しいコード行を挿入するには、ユーザーはステートメントの先頭に空白を残しました。[13]
この言語では、プロシージャ名や変数名などのユーザー指定の値については大文字と小文字が区別されLISTますが、キーワードについては区別されないことに注意してください。エディターに小文字で入力されたキーワードは、プログラムが編集されるときに大文字で表示されます。[14] BASIC09では、1行のコードに複数のステートメントを許可していましたが、ほとんどの方言で使用される:の代わりに\を区切り文字として使用しました。 [15] [b]これは、通常の.に加えて、代入演算子にコロンを使用したためです。効果はと同じですが、代入と比較の違いがより明確になりました。[16]:==:==
コンパイラ
内部マルチパスコンパイラは、BASIC09のソースコードを、トークン化され最適化されたバイトコード( Iコード)に変換します。[ 17] Iコードは、ほとんどのBASICで見られる従来のトークン化アプローチとは異なり、参照を使用する代わりに、いくつかの項目がメモリ内に直接配置されます。[18]
たとえば、MS ベースのインタープリタでは、コード内の変数参照は文字列形式で残されます。変数はメモリ内で 3 つのASCIIVAR文字「VAR」で表されます。実行中にコード内でこの変数に遭遇すると、インタープリタは変数テーブルでその文字列を検索し、メモリ内の関連するストレージ アドレスを見つけて、最後にその場所に格納されている値を読み取る必要があります。テーブルは通常、最終的な検索の時間を節約するために、値が名前の後に続くように構築されます。[17]
対照的に、Iコードでは変数のアドレスが事前に決定され、コード内の参照はそのアドレスに置き換えられます。これにより、実行時に変数テーブルを検索する必要がなくなります。[17]その他の最適化には、インデックス変数がINTEGERの場合に使用される別のFOR/NEXTルーチンや、INTEGERとREALの別々の数学ライブラリなどがあります。[18] [c]
パフォーマンス向上のため、BASIC09 には、PACKプロシージャ名を受け取り、最適化されたバージョンを返す コマンドも含まれていました。これらの最適化には、コードコメントなどの非コーディング命令の削除や、定数式の単一の値への置き換えなどが含まれていました。たとえば、は、右側に定数のみが含まれていることPACKを認識し、実行時に単一の操作 (加算) のみを必要とするコード に置き換え、除算と平方根を削除します。プロシージャのメモリフットプリントが削減され、パフォーマンスが約 10 ~ 30% 向上しました。[19]LET x=x+SQR(100)/2x=x+5PACK
軽量ランタイム
他のBASICと同様に、BASIC09環境内でプログラムを実行するのが一般的でしたが、BASIC09にはRunbと呼ばれる実行専用のコードバージョンも付属していました。Runbはシステムの編集機能とデバッグ機能を削除し、結果として完全なBASIC09の約半分のサイズになりました。[20]
Runbの主な目的は、他のプログラムから呼び出されたときにPACKされたモジュールを実行することでした。つまり、ユーザーがOS/9のコマンドラインでBASIC09モジュールの名前を入力し、そのモジュールがPACKとしてマークされている場合、そのモジュールはBASIC09ではなくRunbによって開かれ、実行されます。これにより、メモリ使用量が削減され、ロード時間が短縮されます。[20]
重要な特徴
GOTO適切に構造化された制御フロー規定(例: BASIC09にはswitch/case文やcomputedがなかったため、行番号は主にcomputedに必要でしたGOSUB)- 構造体宣言(当時の BASIC バリアントではまれでしたが、後の BASIC 実装ではより一般的です)
- 固有の整数およびブールデータ型
- 変数名に 2 文字以上の意味のある文字を含めること (当時の一部の BASIC では 1 文字しか許可されておらず、多くのMicrosoft BASICバリアントでは 2 文字しか許可されていませんでした)
- ローカル変数(実際、 BASIC09 のすべての変数はプロシージャに対してローカルです)と参照渡しによるパラメータを持つプロシージャ
- 妥当なデバッガー(唯一の大きな欠点は、構造体のフィールドの内容を調べることができないことです)
- BASIC09呼び出しシーケンスを使用してパラメータを渡すことができる機械語コードへのインターフェース方法
- ソースの自動整形により、標準的なレイアウトが強制され、当時のBASICインタプリタではどんなサイズのプログラムでも通常見苦しい見た目になることがなかった。プログラマーは通常、行番号のメモリオーバーヘッドを避けるためにできるだけ多くの行を詰め込むが、BASIC09ではこれは問題ではない[21]
参照
- COMALは構造化プログラミング構造を持つBASICに似た別の言語である。
注記
- ^ GRASSシステムは、 BASIC のような言語を個別の名前付きプロシージャからアセンブルできるという点で似ていますが、BASIC09 のように事前コンパイルするのではなく、すべてをトークン化されていないソース コードのままにすることでこれを実現しました。
- ^ ステートメント内のデータ型にコロンが使用されていました
DIM。 - ^ Atari BASIC もこの方法で動作し、行が入力されるとソース コードはトークンにコンパイルされ、変数参照はストレージへのポインターに置き換えられました。
参考文献
引用
- ^ マニュアル1984、p.1.2。
- ^ "BASIC09". Geneslinuxbox.net:6309 . 2016年11月27日閲覧。
- ^ マニュアル1984、p.5.1。
- ^ マニュアル1984、3.5ページ。
- ^ マニュアル1984、p.9.12。
- ^ マニュアル1984、p.2.9。
- ^ マニュアル1984、9.4ページ。
- ^ マニュアル1984、p.9.6-9.7。
- ^ マニュアル1984、9.8ページ。
- ^ マニュアル1984、7.2–7.6ページ。
- ^ マニュアル1984、7.6ページ。
- ^ ab マニュアル1984年、7.8ページ。
- ^ マニュアル 1984、p. 2.3。
- ^ マニュアル1984、p.2.5。
- ^ マニュアル1984、p.9.1。
- ^ マニュアル1984、p.9.2。
- ^ abc マニュアル1984年、11.1ページ。
- ^ ab マニュアル1984年、11.2ページ。
- ^ マニュアル1984、p.11.3。
- ^ ab マニュアル1984、p. D.1。
- ^ 基本的に OS-9、Ron Voigts 著、68 Micro Journal、第 09 巻第 04 号、1984 年 4 月、14 ページ、その強力な機能の 1 つは、フォーマットされた出力の処理です。他の言語では、フォーマットされた出力をどの程度うまく処理できるかは異なります。しかし、BASIC09 は、行を希望する形式にうまく配置することができます。
文献
- BASIC09 プログラミング言語リファレンスマニュアル(PDF)。1984 年。
- 「OS-9 Basic 09 - The Dragon Archive」。Archive.worldofdragon.org 。 2016年5月7日。 2016年11月27日閲覧。
[1] [2] [3] [4]
外部リンク
- OS-9 の初期の歴史、68 Micro Journal、1980 年 9 月号から抜粋したコンテンツ、HHH Enterprises の Tom Harmon 氏から送られた OS-9 と Basic09 の最初のレビュー
- 公式 Basic09 ツアーガイド、Dale L. Puckett、1985 年、ISBN 0-918035-00-7、カタログ番号: 26-3189
- パッケージ: Basic09 1.1.0 / リリース日: 2003 年 1 月 5 日、Wayback Machine で 2016 年 3 月 4 日にアーカイブされました。Tandy Color Computer 1/2/3 用の Basic09 のこのリリースは、1980 年代の CoCo の製造中止以来初のコミュニティベースのリリースとなります。
- ^ 広告: BASIC09 には二重の性格があります。、68 Micro Journal、第 04 巻第 01 号、発行: 1982 年 1 月
- ^ 初期の OS-9 の歴史、68 Micro Journal から抜粋したコンテンツ、1980 年 12 月、Microware は 6809 の広告をわずかに変更しました。現在、Basic09 は Microware によって「Motorola Basic09」ではなく「The Basic09 Programming Language System」と呼ばれています。
- ^ ニュースグループ: comp.os.os9、差出人: Colin McKay、件名: Re: OS/2 vs. W95 and OS-9、日付: 1995/04/12、要約: OS-9 ユーザー グループ ニュースレターの Microware の歴史からの抜粋、MICROWARE 新製品ニュースレター 1979 年 4 月。、6800 ファミリーのハードウェアおよびソフトウェア製品についてお問い合わせいただきありがとうございます。現在、新しいソフトウェアを導入中であるため、1979 年のカタログはしばらく準備できません。その間、このニュースレターで新製品情報を紹介します。6809 ソフトウェア。Motorola は、6809 用の最高のソフトウェアを作成するために Microware と契約しました。Motorola 用に準備した新しいソフトウェアには、新しい BASIC 言語システムとオペレーティング システムが含まれています。このソフトウェアは、Motorola と Microware からまもなく入手可能になります。
- ^ 著者について、 Terry Ritter、..ソフトウェア...以前: スタッフ エンジニア、Motorola MOS 部門、マイクロコンピュータ システム設計グループ、1976 年 7 月 - 1981 年 1 月。... 6809 用の構造化 BASIC 言語の設計者。ソフトウェア エンジニア、1979-81 年.... 発案者および監督プロジェクト エンジニア - BASIC09、1978-80、構造化 BASIC 言語プロジェクト、オペレーティング システム OS9 および関連仕様。
