FreeBASIC CompilerFAQ
FreeBASIC についての質問:
FreeBASIC を使い始める前の質問
高度な FreeBASIC
参照
FreeBASIC についての質問
FreeBASIC とは何ですか?
FreeBASICは、無料の BASIC コンパイラで、Windows(32ビットおよび64ビット)、32ビットプロテクトモードDOS(DJGPP などの COG 実行可能ファイル)、Linux(x86、x86_64、ARM)で動作します。
これは、マイクロソフト QuickBASIC への、コード互換、そして、無料の代替手段を提供する試みとして始まりました。
しかし、すぐに強力な開発ツールに成長しました。
既に、デフォルトで、Allegro、SDL、OpenGL、その他の多くのライブラリが、インストールされて、サポートされています。
QuickBASIC とほとんど互換性がある構文に加え、FreeBASIC は古い言語にいくつかの新機能を導入します。
変数と関数へのポインタや、符号無しのデータ型を、含んでいます。
FreeBASIC コンパイラは、self-hosting です - つまり、FreeBASIC は、FreeBASIC で書かれています。
しかし、ライブラリは、C で書かれています。
最初に戻る
だれが FreeBASIC に関与していますか?
FreeBASIC の最初のバージョンは、V1ctor 一人だけで開発されました。
後のバージョンは、多くの人々の貢献を受けました。
特に、Lillo は、Linux ポートと描画ライブラリを発展させました。そして、DrV は、DOS ポートを開発しました。
最初に戻る
なぜ QBasic より FreeBASIC を使う方がよいですか?
FreeBASIC は、QBasic、QuickBASIC、PDS、DOS のための Visual Basic より、無数の利点があります。
-
FreeBASIC は、32ビットおよび64ビットのプロセッサをサポートします。QBasic は、16ビットの CPU のために設計されています。
-
FreeBASIC は、現在の OS をサポートします。
Windows、Linux、および 32ビットの DOS で使えます。
-
FreeBASIC は、SDL、Direct2D か DirectX、Win32、OpenGL などの最新の API をサポートします。
-
FreeBASIC は、GPLの下で配布されます。これは、QuickBASIC や、他の BASIC の多くのコピーと異なって、無料で、法的にも、自由に使えることを、意味します。
- ライブラリは、追加例外を持つ LGPL の下で、配布されます。これは、あなたがコンパイルしたプログラムで、それを販売することを含め、やりたいことは何でもできる、ことを意味しています。
-
FreeBASIC は、QuickBASIC / 他の BASICs より、数倍速いです。
- FreeBASIC は、ポインタやインライン・アッセンブリなどの多くの特徴をサポートします。
インライン・アッセンブリは、プログラムの一部に、アセンブラコード(機械語と1対1に対応した低級言語によるプログラム)を埋め込むことです。
QuickBASIC や、他の BASIC では、ポインタやインライン・アッセンブリは、使えません。
- QuickBASIC は、DOS だけをサポートします。
Windows の DOSエミュレーションのサポートは、Windows の バージョン・アップの度に、より希薄になっています。
(その結果、Windows で QuickBASIC を使うことが難しくなっています。)
Windows Vista 以降は、DOS アプリケーションのために、描画も、全画面テキストも、サポートしません。
最初に戻る
なぜ、他のより新しい BASIC ではなく、FreeBASIC を使った方が良いですか?
FreeBASIC は、他のほとんどの BASIC 言語実現より、FreeBASIC を魅力あるものにする、多くの特色があります:
-
FreeBASIC は、標準の BASIC 構文を、厳密に固く守ります。これは、より簡単に使えることを、意味します。
-
FreeBASIC は、バイトコードではなく、実際のプログラム(実行ファイル)にコンパイルされます。
-
FreeBASIC は、FreeBASIC の開発に活発に参加した、大きく、献身的な、共同体があります。
- FreeBASIC は、一般的な C ライブラリにアクセスする、標準の方法を利用します。
例えば、SDL (Simple DirectMedia Layer) は、新しい組み込みコマンドではなく、標準の C SDL です。
- FreeBASIC は、Windows、Linux、32-bit DOS に、移植されています。
FreeBASIC は、3つの移植の間で、一貫した構文を保有します。
最初に戻る
FreeBASIC は、どれくらい速いですか?
共同体によって実行されたほとんどのテストで、FreeBASIC が、QuickBASIC よりかなり速いことを示しました。ほとんどの他の GPL や、商業 BASICs より速く、そして、速度に関して、GCC(GNU C Compiler)に、しばしば近づいています。
独立テストチーム
Computer Languages Benchmark Game∞ は、Linux のための FreeBASIC に、GNU g++ より、1.8倍遅い速度を、与えました。
テストは、コンソール・プログラムにおける、計算、メモリとディスクへのアクセス速度に関するもので、描画能力は、全くテストされませんでした。
これは、FreeBASIC が、まだ最適化コンパイラではない、と判断するような、悪い結果ではありません。
注目に値する速度不足の、1つの領域は、32ビットのコンソール・モードです。
FreeBASIC は、他の32ビットのコンソール・モード・アプリケーションと、堅実に同等です。
しかし、32ビットのコンソール・モード操作は、QuickBASIC で見られるように、16ビットのコンソール操作より、かなり遅いです。
DOS バージョンでは、いくつかの I/O 操作が、16ビットの BASIC から FB に移植すると、減速します - コードを最適化すると、速度は戻ります。
最初に戻る
FreeBASIC は、QuickBASIC と、どの程度、互換性がありますか?
FreeBASIC の内蔵の描画ライブラリは、QB で多く使われた描画モード(モード7、12、13)を模倣しています。そして、QB で特徴とされた全ての描画基関数を、実装しています。
ほとんどの互換性の問題は、古い QB プログラムでの、8086-DOS-ハードウェア仕様の、低レベル技術の使用から起こります。
VGA ポート・プログラミング、DOS 中断、メモリ・セグメント切替え、画面メモリに poke すること、PC スピーカーを使った音楽演奏は、直接サポートされません。外部のライブラリを使って、それらをサポート、または模倣することは、できますが。
古い QB プログラムを移植する上での他の問題は、以下があります。
変数名が新しい FB キーワードと衝突する、
型接尾辞とQBキーワードの名前を持った変数、
FB では、デフォルト整数サイズは、32ビット、などです。
これらは、コマンド行スイッチ -lang qb で、FreeBASICを実行することで、扱います。
最初に戻る
FreeBASIC は、Windows、DOS、Linux で、どの程度、互換性がありますか?
FreeBASIC は、Windows、MS-DOS、FreeDOS、Linux で、完全に互換性があります。
すべての、3つのプラットホームのためにプログラムを作ろうと計画しているときは、しかし、API の有用性を覚えておいてください
-- 例えば、OpenGL を利用するコードは、Windows と Linux で働きますが、DOS では働きません。OpenGL は、DOS で利用できないからです。
最初に戻る
FreeBASIC は、オブジェクト指向プログラミングをサポートしますか?
FreeBASIC は、クラス(ユーザ定義型)をサポートします。これは、メンバ関数(メソッド)、静的メソッド、静的メンバ変数、構築子、破壊子、プロパティ、演算子の多重定義、単一継承、仮想メソッドと抽象メソッド(多義性)、および実行時型情報(RTTI)を持ちます。
OOP 機能に関する今後の計画には、多重継承やインタフェースのサポート追加が含まれています。
詳細については、以下を参照下さい:
オブジェクトとしての型 入門(1).
最初に戻る
FB の将来のプランは何ですか ? ToDo リストは ?
最初に戻る
FB で GUI アプリケーションをプログラムできますか?
最初に戻る
FB は、複雑な大きいアプリケーションに適していますか?
FB コンパイラは、self-hosting です。つまり、FBは、FB それ自体が、FB でプログラムされています。
これは、現在、120 000 行以上のコードで、かなり複雑なアプリケーションであることを意味します。
最初に戻る
FreeBASIC アプリケーションで、ラテン文字以外を使えますか?
FreeBASIC は、ユニコード・サポートがあります。ユニコード・サポートは、与えられたプラットホームのための C ランタイム・ライブラリによって提供されます。
これは、FB DOS では、ユニコードが使えないことを意味します。
DOS 以外のプラットホームでは、
Wstring を使って、必要な文字は全てサポートされます。
ファイル
OPEN キーワードには、異なった符号化を考慮する、追加
Encoding パラメタがあります。
FreeBASIC は、これ自体が FB でコード化されています。これは、あなたのソースを、ユニコード・エディタで、コーディングできることを意味します。このため、コメントと文字列直定数は、どんな文字集合でも使うことができます。(変数と手続きのための、キーワード、ラベル、および名前は、ASCII セットの中の文字を使わなければなりません。)
画面への出力については、サポートは、実行画面と描画画面で、異なっています。
実行画面では、非ラテン文字の
Wstring 表示は、コンソール・フォントがそれらをサポートするなら、サポートされます。
描画モードは、内部の CP437 文字セット (古いDOS 文字セット) フォントを使います。このため、非ラテン文字の出力は、カスタム・メード・ラスタ・フォントと、
DRAW STRING キーワードを、使う必要があります。
第三者ツールで、外部のフォントをつかんで、外部のフォントを
DRAW STRING 形式に変換するものが、存在しています。
最初に戻る
FB の Serial/COM と Hardware/CPU ポートを使ってもよいですか?
最初に戻る
FreeBASIC を使い始める前の質問
どこで FreeBASIC に関する詳しい情報を見つけることができますか?
FreeBASIC ウィキは、FreeBASIC を使うための、最新のマニュアルです。
ここ∞ を参照して下さい。
発刊中の雑誌で、定期的に、FreeBASIC に関連する記事を掲載しているのは、
QB Express∞ と
QBXL Magazine∞ です。
これらの雑誌は、いつも新しい記事を探しているので、FreeBASIC に関する記事のために良いアイデアがあるなら、投稿してください!
最初に戻る
FreeBASIC を始動するとき、QB GUI はなぜ開きませんか?
QB には、統合開発環境(IDE)がありました。
FreeBASIC には、IDE が同梱されていません。
FreeBASIC は、ただ、コンパイラで、QuickBASIC の完全なクローンではありせん。
FreeBASIC は、コンソール・モード・アプリケーションです。
FreeBASIC は、コマンドラインで、BAS ファイルを受け入れて、EXE ファイルを吐き出します。
あなたの OS の、最も単純な、プレーン・テキスト・エディタ(メモ帳、EDIT、...)で、BAS ファイルを作成して、次に、コンパイラを実行できます。
構文着色や、エラー着色や、複数ファイルの管理や、統合デバッガや、コンテキスト・ヘルプなどを必要とするなら、IDE を使って下さい。
利用可能な IDE とエディタについて、
OS specific FAQ's を参照下さい。
最初に戻る
関連文書のオフライン版を入手できますか?
最初に戻る
FB 方言の、裏にある考えは何ですか?
考えは、QB コードとの、後方互換性を維持しながら、言語として、継続して改良を進められるようにすることです。
QB 構文の曖昧な言葉遣いは、OOP が必要とする、より厳格なスタイルと、互換性がありません。
新しい FB キーワードは、古い QB プログラムの変数名と、しばしば、衝突しました。QB は、変数名と、UDT でない手続きに、ドットを使えました。
3つの方言 (-lang fb、-lang qb、-lang fblite) 指定は、FreeBASIC と QB の 2つの世界のベストを、一体化できるようにします。
- lang fb は、OOP プログラミングに必要なフレームワークを提供します。他の方言は、OOP へのアクセスを与えません。
- lang qb は、開発者が、qb プログラムとの互換性を増やし続けることを、認めます。FBの、より新しいキーワードは、キーワードの前に、2つのアンダーバーを付けることによって、使えるようになります。
例えば、Getmouse は、__Getmouse を使うことによって、呼ぶことができます。
- lang fblite は、FreeBASIC に、言語の互換性を 提供します。
QBASIC により近い互換のコード化スタイルになります。
最初に戻る
xx より大きい配列を定義すると、なぜプログラムはダウンしますか?
一般に、
自動(記憶域クラス) 固定長配列を大きくし過ぎると、これは起こります。これはプログラム・スタックを崩壊させています。
あなたには、下記のオプションがあります:
-
できれば、automatic 配列のサイズを小さくします。
-
以下の方法で、可変長の配列を作成します。
-
コンパイル時に -t コマンドライン・オプション を使って、プログラム・スタック用に、より多くのメモリを予約します。
デフォルトは -t 1024 (キロバイト)か -t 2048 (キロバイト)です。
注:ここで非常に大きな値を使うことは推奨できません。
- 配列を、Dim よりむしろ Static を使って定義することで、静的配列を作成します。
(見え方は局所的ですが、保存は、グローバルに保存されます。)
- Dim を使って、Shared アクセスで、配列を定義します。
(これで、配列は、完全にグローバルになります。)
- Allocate と Deallocate のような、Pointers と Memory Functions を使って、自分でメモリを管理します。 - これは、大きいバッファを保存する、都合のよい方法ですが、初心者向けの方法ではありません。
静的 配列と、
可変長 配列は、その要素データに、プログラム・スタックを使いません。このため、
自動固定長配列に関連する問題を起こしません。
詳しい情報は、
記憶域クラス を参照下さい。
静的 として巨大なバッファを保存したり、デフォルトをはるかに越えるスタック・サイズを増やすことは、あまり良い考えではないということに、注意して下さい。
というのは、これは、プログラムをロードしてスタートするために必要な記憶の固定量を増やすからです。
たとえ、その大部分が後で使用されなくても、パフォーマンスを低下させ、あるいは、プログラムをロードすることを拒否さえするからです。
プログラムが、「-llibname を見つけることができない」のメッセージで、コンパイルできないのはなぜですか?
これは、リンカにより引き起こされたエラーです。
プログラムは
#Inclib でプログラム・コードで指定されるか、または
-l でコンパイラ・コマンドラインで指定された、外部ライブラリにリンクされています。
しかし、リンカーは、いずれのライブラリ・パスでも一致するファイルを見つけることができませんでした。
ライブラリのホームページを確認して、コンパイルするライブラリをダウンロードする方法を調べて下さい。
また、
外部ライブラリ索引 で、ライブラリに関する情報が見つかるか確認してください。
ライブラリの一般的な情報と使い方については、
既存のライブラリを使う およびそこにリストされている関連ページを参照してください。
最初に戻る
高度な FreeBASIC
どのようにして、C ライブラリにリンクしますか?
C ライブラリは、それらが C の中にある状態と、ほとんど同じ方法で、FreeBASIC に設定されています。
FreeBASIC に含まれる全てのライブラリは、"
library name.bi" という名前の、基本のインクルード・ファイルを持っています。
基本インクルード・ファイルは、ライブラリを含むために、
#INCLIB メタコマンドを使います。そして、ライブラリの中で関数を宣言するために、
Declare 命令文 を使います。
FreeBASIC は、何百個もの BI ファイルを含んでいます。ライブラリ・ヘッダーの全リストは、
ここ で参照ください。
最初に戻る
デバッガを使えますか?
FreeBASIC は、GNU GDB 互換デバッガを使用できます。
- Win32:
Insight は、GDB のためのユーザ・フレンドリーなラッパーです。Win32 related FAQ を参照下さい。
- DOS:
DOS には、"Insight" という製品があります。しかし、これは、FreeBASIC と共に使えない、リアル・モード・デバッガです。
GDB か、少なくとも何らかの DPMI32 デバッガを使います。
- Linux:
GDB を使います。
最初に戻る
FB と共に含まれている、AS.EXE、AR.EXE、LD.EXE ファイルの目標は何ですか?
AS.EXE は、GAS、"GNU assembler" です。
これは、いつもコンパイルにかかわります。
LD.EXE は、"GNU linker" で、実行ファイルの作成にかかわります。
AR.EXE は、"GNU archiver" で、事実上、ライブラリアンで、.A ライブラリを生成します。
最初に戻る
ソース・ファイルの大きさに関して限界がありますか?
はい。FreeBASIC が完全に32ビットのコンパイラなので、ソースファイル上で、理論的に、4GB か 4294967296バイトまで操作することができます。
しかし、あなたの RAM 容量は、あなたのソースのサイズをかなり越えなければなりません。さもないと、コンパイルは終わらないか、少なくとも非常に遅いです
最初に戻る
FreeBASIC で、OS を書いてもよいですか?
はい、そして、いいえ。
あなたが、本当に、OS を書いて、FB にかかわる、と主張するなら、答えは、「はい」です。
質問が、もし、現在 FB を使って OS をコーディングすることが、名案であるかどうか、ということなら、答えは、「いいえ」です。あなたが、初心者であれば、なおさらです。
いくつかの隠れた危険があります:
- OS 開発は、困難です。http://www.osdev.org/wiki/Getting_Started∞ を参照下さい。
-
あなたは、アセンブリを取り扱う必要があるでしょう。また、C も避けて通れません。
- あなたは、信頼できる FB の機能の大部分を使えないでしょう。例えば、描画、ファイルI/O、スレッド、メモリ管理、コンソールI/O でさえ… 。コントロールの流れ、数学、および論理も。
これらのライブラリ関数が必要なら、これらを 再実装 しなければなりません。
FreeBASIC は、GCC を当てにします。そして、C で OS を開発することに関する入手可能な情報は、また、FreeBASIC に適用されます。
FB は、GCC と同程度で、超えることも下回ることもないでしょう。
最初に戻る
私は OS を開発していて、私の OS に FreeBASIC を移植できますか?
状況によります。
あなたの OS が、少なくとも、DPMI32 (コンソールI/O(探知、複数のファイルを開く…)、ファイルI/O、メモリ管理)と共に DOS の機能性を合法化していて、そして、GCC のポートを持っているなら、答えは「はい」です。
あなたが、少なくとも、ライブラリがある、他の何か準拠した C コンパイラを持っていれば、それは可能かもしれません。
例えば、一区画だけでファイルをロードまたは保存する OS、または、16ビットのOSに、FBを、理論的に、移植できません。
最初に戻る
FreeBASIC は、C++ などのように、関数からの参照を戻すことをサポートしますか?
はい、この機能は存在します。
手続は、戻り型の datatype として byref を使って参照を返すことができます。
最初に戻る
参照:
そして
ページ歴史:2020-12-28 07:20:07
日本語翻訳:WATANABE Makoto、原文著作者:JasonFirth