FreeBASIC CompilerDialects
FreeBASIC バージョン 0.17b は、
-lang コマンドライン・オプションを導入しました。
このオプションは、BASIC 言語の異なった方言に対する言語互換性モードを変えるために、使われます。
バージョン 0.18.4b では、今後
-lang deprecated を置き換えることを意図して、
-lang fblite 方言が加えられました。
バージョン 0.20.0b では、
#lang 指示と、
$lang メタコマンド(渡辺の推奨)が、ソースで方言を指定するために、加えられました。
-lang オプション | 記述 |
fb | FreeBASIC 互換(デフォルト) |
qb | qbasic 互換 |
fblite | FreeBASIC 互換。より QBASIC 互換コード化スタイル |
deprecated | FB 0.16 との互換 (非推奨) |
-lang オプションは、今後、FreeBASIC が、オブジェクト指向や、他の特徴を追加してサポートできるようにするために必要でした。
-lang オプションを導入したことで、QuickBASIC サポートを無力にすることなく、古い FreeBASIC ソースとの互換性を壊すことなく、FreeBASIC が、よく似た同様のパッケージの多くの異なったバージョンに対して、維持を難しくすることを、回避したのです。
QuickBASIC サポートは、必要ならば、改良され続けることができます。この場合も、特に FreeBASIC のために書かれたソースは、書き換える必要はありません。
古い GW-BASIC や、QuickBASIC/QBasic のソースを、それほど多く変更せずにコンパイルするには、
fbc を実行するときに、コマンドラインで
-lang qb オプションを使ってください。
このオプションは、QuickBASIC/QBasic コードと、より互換性を保つように、進化していくでしょう。
0.16b の FreeBASIC ソースをコンパイルするには、
-lang deprecated オプションを使ってください。
このオプションは、互換性のために維持されていますが、今後、修正されないでしょう。FreeBASIC の将来のリリースで、これは無くなるかもしれません。
FreeBASIC の、より新しい特徴を使いたいが、QBASIC 風のプログラミング形式を残したいプログラマは、
-lang fblite オプションを使ってください。
この方言は、将来著しい変化はしませんが、維持されて、サポートされ続けるでしょう。
このオプションは、また、FreeBASIC の旧式バージョンを使って作られたソースと、最も互換性があります。
新しいプロジェクトには、
-lang fb を使用することを推奨します。新機能(オブジェクト・クラス、継承 など) は、この方言だけに追加されるからです。
-lang fb (デフォルトモード)
サポートされない項目:
2) 型の接尾語(
!, #, $, %, &)
-
これらは数字直定数のために許容されているだけです。しかし、多重定義できるように、Cast や、 数字直定数接尾語 f (single), d (double), ll (longint), ul (ulong), ull (ulongint) を使うことを、推奨します。
3)
Defbyte,
Defubyte,
Defshort,
Defushort,
Defint,
Defuint,
Deflng,
Deflongint,
Defulongint,
Defsng,
Defdbl,
Defstr
4) すべてのパラメタは、デフォルトで参照渡しされる
5) あらゆる種類の
OPTION (文脈で使えません)
9)
Resume
- ほとんどの実行時ライブラリと描画ライブラリ手続きは、エラーコードを返します。下記を参照下さい。
IF OPEN( "text" FOR INPUT AS #1 ) <> 0 THEN error...
10) コメントに埋め込んだ
'$DYNAMIC,
'$STATIC,
'$INCLUDE メタコマンド
- 項目 5) の、Option Dynamic を参照下さい。
- '$include の代わりに、#include "filename" を使います。
12) 数値ラベル
- 名前付きラベルが、代わりに使えます。例えば label_name: / Goto label_name
-lang deprecated (非推奨)
サポートされる項目:
バージョン 0.16b で許容された、全ての項目。しかし・・・
1)
GOSUB/
RETURN と
ON ...
GOSUB
(モジュールレベルの場合も)
- so the GOSUB implementation could be thread-unsafe in the -lang qb mode, allowing fast execution (-lang qb doesn't support multi-threading, while -lang deprecated does).
-lang qb モードでは、GOSUB を実装すると、スレッドで安全ではないので、-lang deprecated で、高速実行を許容します。(-lang qb は、多重スレッド化をサポートしません。-lang deprecated は、サポートします。)
サポートされない項目:
1) Classes
-
識別名でピリオド(.)を使うと、難し過ぎて、あいまいになります。
2) 演算子の多重定義
-
識別名でピリオド(.)を使うと、難し過ぎて、あいまいになります。
3)
TYPE の中の、構築子、解体子、メソッド。
-
識別名でピリオド(.)を使うと、難し過ぎて、あいまいになります。
-lang fblite
サポートされる項目:
-lang deprecated 方言で許容された全ての項目。およびいくつかの項目。
1)
GOSUB/
RETURN
-
Option Gosub が使えます。
これは、あいまいさのため、手続きを出るところで、
RETURN が使えません。
サポートされない項目:
1)
Scope ブロック
- すべての変数は、手続き範囲が与えられます。
明示的な Scope ブロックは、将来、加えられるかもしれません。
-lang qb
サポートされる項目:
-lang fb 方言でサポート・許容されなかったすべて。および、いくつかの項目。
1)
Call は、前方参照された関数と共に、使用できます。
2)
Shared は、関数の中で使うことができます。
(開発途中)
3) 明示的もしくは黙示的に宣言された、全ての変数は、QuickBASIC のように、常に、手続き範囲に割り当てられます。
4)
Data 命令文は、シンボルを見ません。全ての文字列構成は、たとえ引用符がなくても、文字定数の文字列と見なします。QuickBASIC と同様の動きです。
サポートされない項目:
2) クラスと名前空間
3) 手続きと演算子の多重定義
4)
Type 定義における構築子、解体子、および他のメンバー手続き。
7) 可変の初期化
-
すべての変数は、手続き範囲の方に移されます(QuickBASIC の中と同様)。このため、局所変数の初期化をサポートすることは、困難です
参照:
ページ歴史:2020-08-13 03:36:45
日本語翻訳:WATANABE Makoto、原文著作者:JeffMarshall