by 河川屋 » 2005年9月29日(木) 04:04
>ActiveBasicはN88Basicと互換があるとされていますが、正式な互換表は存在するのでしょうか?
見たことありません。あったとして、ものすごく長い表になるでしょう。
ヘルプなどで見る限り、見つけたのは、
N88BASIC:変数を型宣言無しで使うと、単精度整数となる。
AB:変数は全て型宣言する必要がある。
と、これだけ。
N88Basic互換の意味ですが、
・Windows式のプログラミングをとらずに(=FORMとかを作らなくても)
Dos時代のやりかたでとりあえず画面表示などが可能である。
・MIcrosoft系の方言が使えるBasicである。(JIS規格のBasicではない)
という2つの意味でN88Basic互換なのであり、
本来の意味での互換
・N88Basicのソースを何も修正せず実行できる
については全く期待できません。(以下のリストの1~4いずれか1つですら致命的。)
で、Microsoft系Basic互換か、といえば、それともずいぶんと違っています。
以下、Microsoft系Basicならほとんど共通動作をする命令における違いです。
なお、ABのVerは4.00、MS系はMBasic5.2の動作で比較しています。
※MBasic:CP/M-80上のBASIC。MZ-80,PC-8001,FM-7等、8bit機の大半で動作した。
1.変数の型宣言(上記)
2.Log(-1)やゼロ割などの計算不能事態が生じたとき、
MSはエラーメッセージを出して中止、
ABは、永久ループの場合と、答としてゼロを返して先に進む。
※これはIEEE754の基準違反。
3.変数名について、MSは大文字小文字は同一視、ABは別扱い。
4.変数名について、XとX# (dim X as Doubleと宣言したとして)は
MSは同一、ABは別扱い。
5.PRINT USINGで、指数表記の指定がABでは不可。
また、文字列に対する適用不可。 (PRINT USING "NAME=& &";NAME$のような使い方)
6.単精度実数、倍精度実数の内部表現が異なる。
N88Basic,MBasic等のQuiickBasic以前:MS独自形式
QuickBasic以降およびAB:IEEE形式。
なお、超越関数(logや三角関数)の計算結果の精度について、
コプロの命令を使えば最悪でも2bit以内の誤差(関数単独で)が保証されるが、
ABは数式展開で計算しているため四則演算以外はbit保証されていない。
※QuicBasicあたりまでは MSもbit保証なし。
7.Rnd関数
MS(N88)は0~1の範囲で単精度の一様乱数を返す。
ABは0~1の範囲で倍精度の一様乱数を返す....筈であるが、実は、
有効桁は10進5桁。かつ、最終桁はランダムではないから、
実質は10進4桁の関数となっており、有効桁は単精度以下である。
※スペックダウンしている。
※※しかも、頻度分布に癖がある。シミュレーションには使えない。
8.ランダムファイルに対するFIELD文
MSは、1レコード内の変数の割り当てとバイト数を定義する。
FIELD #1,8 AS A$,24 AS B$ '最初の8byteがA$,次の24byteがB$残りは未定義。
ABは、1レコードの長さを定義する???
N88Basic不可。 MSは一般に、 OPEN FL$ AS #1 LEN=256(またはOPEN "R",#1,FL%,256)
のようにレコード長を定義する。
9.STOP文(MSはプログラムの一時停止、ABはサウンド再生の停止。)
10.その他、MS系なら大抵動くが、ABではサポートされていない命令
(ABヘルプに記載の無い命令はたとえ動いてもサポートなしとみなす)
・LINE INPUT文。 (掲示板に既出)
・SWAP文 (掲示板に既出)
・数値と文字をバイナリのまま相互変換する関数。
CVI,CVS,CVD,MIK$(),MKS$(),MKD$()
・ON~GOTO(GOSUB)文。
SELECT~CASE文が増えたから不要といえば不要。
・CLEAR文(全変数をゼロクリアする。また、文字列や機械語エリアの確保。)
・ERROR文(エラー発生のエミュレート。
ON ERROR GOTOと組み合わせ IF ○○ THEN ERROR 45 のように使う。)
N88BASIC機種依存命令(他のMS系BASICと異なる命令。グラフ命令など。)については、
ほとんど使ったことがない(数値解析以外はめったに組んだことがない)ので省略します。
私の意見として、ABばどのくらいN88BASIC互換か、というと、
・十進BASICといい勝負。
※十進BASICはMicrosoftBasic非互換とはっきり宣言している。
それといい勝負ということは、ABがN88互換というのが如何にトンデモかは想像にまかせます。
結論として、N88BASICのプログラムをそのまま走らせたいなら、他の互換ソフト
(できれば、インタプリタ形式のもの。)を使うことをすすめます。
問題はQuickBasicなんです。QBは、局所変数の概念があるから、今更N88に戻すのは
地獄だし、DOSレベルで動けば良いとして簡単に動かすにはどうするか?
選択肢が乏しいのです。
候補は3つ。
1.AB。 上記の12457810が、やってられない。
2.英語版Abasic(DOS6.xに付属) 漢字使用不可。
3.十進BASIC INPUT#文1回で1行のデータを読み込む必要がある。
(十進BASICもマニュアルにコレは記載されていないが、記載されている
どれより、コレに対する修正が面倒。
コレさえ無ければ十進BASICを悩まず選ぶ。)
とまあ、そういう関係(個人的には。)です。
>ActiveBasicはN88Basicと互換があるとされていますが、正式な互換表は存在するのでしょうか?
見たことありません。あったとして、ものすごく長い表になるでしょう。
ヘルプなどで見る限り、見つけたのは、
N88BASIC:変数を型宣言無しで使うと、単精度整数となる。
AB:変数は全て型宣言する必要がある。
と、これだけ。
N88Basic互換の意味ですが、
・Windows式のプログラミングをとらずに(=FORMとかを作らなくても)
Dos時代のやりかたでとりあえず画面表示などが可能である。
・MIcrosoft系の方言が使えるBasicである。(JIS規格のBasicではない)
という2つの意味でN88Basic互換なのであり、
本来の意味での互換
・N88Basicのソースを何も修正せず実行できる
については全く期待できません。(以下のリストの1~4いずれか1つですら致命的。)
で、Microsoft系Basic互換か、といえば、それともずいぶんと違っています。
以下、Microsoft系Basicならほとんど共通動作をする命令における違いです。
なお、ABのVerは4.00、MS系はMBasic5.2の動作で比較しています。
※MBasic:CP/M-80上のBASIC。MZ-80,PC-8001,FM-7等、8bit機の大半で動作した。
1.変数の型宣言(上記)
2.Log(-1)やゼロ割などの計算不能事態が生じたとき、
MSはエラーメッセージを出して中止、
ABは、永久ループの場合と、答としてゼロを返して先に進む。
※これはIEEE754の基準違反。
3.変数名について、MSは大文字小文字は同一視、ABは別扱い。
4.変数名について、XとX# (dim X as Doubleと宣言したとして)は
MSは同一、ABは別扱い。
5.PRINT USINGで、指数表記の指定がABでは不可。
また、文字列に対する適用不可。 (PRINT USING "NAME=& &";NAME$のような使い方)
6.単精度実数、倍精度実数の内部表現が異なる。
N88Basic,MBasic等のQuiickBasic以前:MS独自形式
QuickBasic以降およびAB:IEEE形式。
なお、超越関数(logや三角関数)の計算結果の精度について、
コプロの命令を使えば最悪でも2bit以内の誤差(関数単独で)が保証されるが、
ABは数式展開で計算しているため四則演算以外はbit保証されていない。
※QuicBasicあたりまでは MSもbit保証なし。
7.Rnd関数
MS(N88)は0~1の範囲で単精度の一様乱数を返す。
ABは0~1の範囲で倍精度の一様乱数を返す....筈であるが、実は、
有効桁は10進5桁。かつ、最終桁はランダムではないから、
実質は10進4桁の関数となっており、有効桁は単精度以下である。
※スペックダウンしている。
※※しかも、頻度分布に癖がある。シミュレーションには使えない。
8.ランダムファイルに対するFIELD文
MSは、1レコード内の変数の割り当てとバイト数を定義する。
FIELD #1,8 AS A$,24 AS B$ '最初の8byteがA$,次の24byteがB$残りは未定義。
ABは、1レコードの長さを定義する???
N88Basic不可。 MSは一般に、 OPEN FL$ AS #1 LEN=256(またはOPEN "R",#1,FL%,256)
のようにレコード長を定義する。
9.STOP文(MSはプログラムの一時停止、ABはサウンド再生の停止。)
10.その他、MS系なら大抵動くが、ABではサポートされていない命令
(ABヘルプに記載の無い命令はたとえ動いてもサポートなしとみなす)
・LINE INPUT文。 (掲示板に既出)
・SWAP文 (掲示板に既出)
・数値と文字をバイナリのまま相互変換する関数。
CVI,CVS,CVD,MIK$(),MKS$(),MKD$()
・ON~GOTO(GOSUB)文。
SELECT~CASE文が増えたから不要といえば不要。
・CLEAR文(全変数をゼロクリアする。また、文字列や機械語エリアの確保。)
・ERROR文(エラー発生のエミュレート。
ON ERROR GOTOと組み合わせ IF ○○ THEN ERROR 45 のように使う。)
N88BASIC機種依存命令(他のMS系BASICと異なる命令。グラフ命令など。)については、
ほとんど使ったことがない(数値解析以外はめったに組んだことがない)ので省略します。
私の意見として、ABばどのくらいN88BASIC互換か、というと、
・十進BASICといい勝負。
※十進BASICはMicrosoftBasic非互換とはっきり宣言している。
それといい勝負ということは、ABがN88互換というのが如何にトンデモかは想像にまかせます。
結論として、N88BASICのプログラムをそのまま走らせたいなら、他の互換ソフト
(できれば、インタプリタ形式のもの。)を使うことをすすめます。
問題はQuickBasicなんです。QBは、局所変数の概念があるから、今更N88に戻すのは
地獄だし、DOSレベルで動けば良いとして簡単に動かすにはどうするか?
選択肢が乏しいのです。
候補は3つ。
1.AB。 上記の12457810が、やってられない。
2.英語版Abasic(DOS6.xに付属) 漢字使用不可。
3.十進BASIC INPUT#文1回で1行のデータを読み込む必要がある。
(十進BASICもマニュアルにコレは記載されていないが、記載されている
どれより、コレに対する修正が面倒。
コレさえ無ければ十進BASICを悩まず選ぶ。)
とまあ、そういう関係(個人的には。)です。