FAQ FreeBASIC Kompilátoru - Frequently Asked Questions - Často Kladené Otázky
 


FreeBASIC - Otázky:

Začínáme s FreeBASIC - otázky
Pokročilý FreeBASIC FAQ

Viz též


Zpět na Hlavní stránku





FreeBASIC - Odpovědi na Vaše otázky


Co je FreeBASIC?
FreeBASIC je free, 32/64-bitový kompilátor BASICů pro 32/64-bitový Windows, 32/64-bitový chráněný režim DOS (COFF spustitelné soubory jako DJGPP), 32/64-bitový Linux, a mobilní 64-bitové OS (ARM procesory). Vše začalo jako pokus, vytvořit svobodný kód, kompatibilní s Microsoft QuickBASIC. Nějak se nám to ale zvrtlo a rázem je z původně drobného projektu silný vývojový nástroj s rostoucí komunitou okolo, který dnes již běžně podporuje všeliké knihovny, např. Allegro, SDL, OpenGL a mnoho dalších, a to již ve výchozí instalaci.

Kromě funkcí, zajišťujících zpětnou kompatibilitu s QuickBASIC a QBASIC, přináší FreeBASIC několik nových funkcí potřebných pro přítomnost i budoucnost jazyka, včetně ukazatelů na proměnné a funkce a nepodepsané datové typy.

Kompilátor FreeBASIC je self-hosting, tedy napsán ve FreeBASIC. Knihovny jsou ovšem napsány v jazyce C.

Zpět na začátek

Kdo je zodpovědný za FreeBASIC?
První verze FreeBASIC byly vyvinuty výhradně V1ctor. Do pozdějších verzí již přispělo mnoho lidí, včetně Lillo, který vyvinul port Linux a knihovnu grafiky a DrV, který vyvinul port DOS.

Podívejte se na stránku FreeBASIC Credits.

Zpět na začátek

Proč bych měl používat FreeBASIC, spíše než QBasic?
FreeBASIC má nesčetné výhody oproti QBasic, QuickBASIC, PDS, a Visual Basic pro DOS.
    • FB podporuje 32-bitové procesory. QBasic je stavěn pro 16-bitové CPU.
    • FB podporuje moderní OS. Funguje na Windows, Linux i 32-bit DOS.
    • FB podporuje moderní API, jako jsou SDL, DirectX, Win32 a OpenGL.
    • FB je distribuován pod licencí GPL, což znamená, že je legálně využitelný zdarma, na rozdíl od většiny kopií QuickBASICu, či jiných BASICů.
    • Knihovna je šířena pod LGPL s přidanou výjimkou, což znamená, že s vámi vytvořenými zdrojáky i kompilacemi si můžete ....
      Tedy můžete dělat, co chcete, včetně prodeje.
    • FreeBASIC je mnohonásobně rychlejší, než QuickBASIC a jiné BASICy.
    • FreeBASIC podporuje mnoho funkcí, jako jsou ukazatele, či řádkový Assembler, které nejsou k dispozici v QuickBASICu a ostatních BASICích.
    • QuickBASIC podporuje pouze DOS. Podpora systému Windows pro emulaci DOS (a tedy i QuickBASIC) se s každou další novou verzí omezuje. Vista už nepodporuje grafiku nebo fullscreen text pro DOS aplikace. (pozn.překl. v sedmičkách už se nevyskytuje vůbec, ale dá se v nich ještě spustit, v.8 a v.10 již ignoruji i já, takže nemám informace, jen předpoklad neexistence podpory)

Zpět na začátek

Proč používat FreeBASIC, spíše než nové verze jiných BASICů?
FreeBASIC má mnoho rysů, které jej dělají atraktivnější, než je většina jiných implementací jazyka BASIC:
    • FreeBASIC se úzce drží standardů syntaxí jazyka BASIC, což usnadňuje jeho použití.
    • FreeBASIC kompiluje do aktuálních programů - spustitelných souborů, nikoliv do bytecode.
    • FreeBASIC má velkou, specializovanou komunitu, která se na vývoji FreeBASICu aktivně podílí.
    • FreeBASIC využívá standardní metody přístupu k běžným C knihovnám. SDL například je standardní C SDL, nikoliv nová sada vnitřních příkazů.
    • FreeBASIC je portován na Windows, Linux a 32-bitový DOS. Dokáže tak udržet konzistentní syntaxi mezi nejméně třemi platformami.

Zpět na začátek

Jak rychlý je FreeBASIC?
Testy spáchané komunitou ukázaly, že FreeBASIC je výrazně rychlejší než QuickBASIC, rychlejší než většina ostatních GPL nebo komerčních BASICů a přibližuje se rychlostí GCC.
Computer Languages Benchmark Game (odkaz již v čase překladu do CZ nefunkční) - Nezávislý testovací tým udává FreeBASICu pro Linux rychlost 1.8x pomalejší, než GNU g++. Test se opírá o rychlost výpočtu, rychlost přístupu k paměti a disku a rychlosti v konzoli. Grafické schopnosti testovány nebyly. (pozn.překl.: Rychlovka na Google mi našla pár benchmarků a odhadl bych kombinovanou rychlost FB oproti C na 3:1 v době testů (rok a více zpět).) To není nikterak špatný výsledek. FreeBASIC kompilátor ještě neprošel optimalizacemi. Lze očekávat další výrazná zlepšení již brzy.
Jednou z oblastí, kde byl zjištěn pozoruhodný nedostatek rychlosti, jsou 32-bitové režimy konzoly. Zatímco je FreeBASIC trvale srovnatelný s jinými 32-bitovými aplikacemi konzole, 32-bit režim konzoly portovaný z 16-bitového vykazuje výrazné zpomalení operací, což se projevuje především u QuickBASIC. V DOS verzi mohou také některé I/O operace po portování z 16-bitu na FB zpomalit. O problému se ví a optimalizace kódu FB přinese kýžené zrychlení. (pozn.: Pokud se tak už nestalo, neb tento návod v době překladu byl několik měsíců starý.)

Zpět na začátek

Nakolik je FreeBASIC kompatibilní s QuickBASIC?
Sestava FreeBASIC s grafickou knihovnou emuluje nejpoužívanější grafické režimy QuickBASIC (režimy 7,12,13) a podporuje všechny základní příkazy kreslení, uváděné jako funkční v QuickBASIC.
Většina problémů s kompatibilitou vyplývá z použití 8086-DOS hardwarových specifikací low-level (nízkoúrovňových) technik ve starých QuickBASIC programech. VGA programovatelný port, přerušení DOS, přepínání paměťových segmentů, přímé vkládání (poke) do obrazové RAM nebo přehrávání hudby pomocí reproduktoru počítače (PC-speaker), nejsou přímo podporovány. Je nutno je nahradit pomocí funkcí externích knihoven.
Ostatní problémy při přenosu starých QuickBASIC programů jsou vyřešeny jednoduše, volbou -lang qb v příkazovém řádku. Jde zejména o kdysi problémové pojmenování proměnných a jejich střety s novými klíčovými slovy FreeBASIC, , některé typové přípony, či výchozí velikost celých čísel (32-bitů ve FB).

Viz Rozdíly mezi FreeBASIC a QuickBASIC.

Zpět na začátek

Jaká je kompatibilita FreeBASIC s Windows, DOS a Linux?
FreeBASIC je plně kompatibilní s Windows, MS-DOS, FreeDOS i Linux. Již od počátku byl program koncipován pro všechny tři platformy, nemusel se dodatečně předělávat či rozšiřovat, a proto je také na všech těchto platformách plně funkční bez kompromisů. Mějte ale na paměti dostupnost API - kódu využívajícího OpenGL. V systému Windows a Linux pracovat bude, ovšem v systému DOS nikoliv, protože OpenGL ve verzi pro DOS prostě neexistuje.

Zpět na začátek

Má FreeBASIC podporu OOP - Objektově Orientovaného Programování?
FreeBASIC (od verze 0.90) podporuje třídy (uživatelem definované typy - UDT) s funkcemi (metodami) členu, statické metody, statické členy proměnných, konstruktory, destruktory, vlastnosti, přetížení operátoru, jednoduchou dědičnost, virtuální a abstraktní metody (polymorfismus) i informace typu run-time. Mezi budoucí plány, týkající se funkčnosti OOP, patří přidání podpory vícenásobné dědičnosti a/nebo rozhraní. Pro více informací viz: Průvodce pro začátečníky - Typy jako Objekty.

Zpět na začátek

Jaké jsou plány do budoucna se seznamem FB/ToDo?

Co se plánuje v příštích verzích zjistíte na fbc's todo.txt.

Zpět na začátek

Mohu ve FreeBASICu naprogramovat GUI aplikace?
Ano, můžete. Hlavičky, umožňující volání GUI API Windowsů a Linuxů, jsou dodávány s příslušnými verzemi. Programy vytvořené tímto způsobem jsou však nepřenosné.
Existuje několik API obalů a experimentálních RAD aplikací, které vytvářejí nepřenosný GUI kód pro Windows.
Pro programování přenosných multiplatformních GUI, mohou být použity knihovny jako GTK nebo wx-Widgets. FreeBASIC poskytuje GTK hlavičky, ale funkce OOP, které jsou v současné době ve FreeBASIC k dispozici, prozatím použití wx-Widgets brání. Programy vytvořené s těmito knihovnami mohou vyžadovat i instalaci balíku knihovny uživatelem v jejich systému.
Pro hry a malé aplikace existují FreeBASIC-specifické knihovny, které vykreslují a spravují jednoduchá ovládací tlačítka a textová pole uvnitř grafického okna. Programy vysrobené s těmito knihovnami jsou zcela přenosné.

Zpět na začátek

Je FreeBASIC vhodný pro velké, komplexní aplikace?
FreeBASIC kompilátor je typu self-hosting, tzn. je naprogramován ve FreeBASIC. Jako takový obsahuje v této chvíli více než 120 000 řádků kódu. Nám přijde jako komplexní. A Vám?

Zpět na začátek

Mohu ve svých FreeBASIC aplikacích použít ne-latinkovou sadu znaků?

FreeBASIC má Unicode podporu pro dané platformy, poskytovanou přes C runtime knihovnu. FB Vám s Unicode v DOS nepomůže. Na ostatních platformách můžete mít s použitím Wstrings podporu pro jakoukoliv znakovou sadu, kterou potřebujete. Příkaz OPEN (pro soubory) má navíc volitelný parametr Encoding, umožňující práci s různými znakovými sadami. Jako je FreeBASIC kódován v FB, můžete svůj zdroj kódovat v editoru s Unicode, a pak vaše komentáře a řetězcové literály mohou být v jakékoliv znakové sadě (klíčová slova, štítky (labels), názvy proměnných a procedur musí být v rozsahu ASCII sady).
Podpora výstupu na obrazovce je odlišná od konzoly ke grafice. V konzole je podporován tiskový režim wstring u jiných znakových sad tehdy, pokud konzola font podporuje. Grafický režim používá vnitřní znakovou sadu CP437 (starého DOSu), písmo tak vyžaduje pro non-latin výstup rastrový font a využití příkazu Draw String. Existují nástroje třetích stran, které umí externí písmo do formátu DRAW STRING převést.

Zpět na začátek

Mohu ve FreeBASIC použít Serial/COM a Hardware/CPU porty?
Ano, FreeBASIC má vestavěné funkce pro přístup k sériovému (COM) i hardwarovému (CPU) portu bez nutnosti externích knihoven. Mrkněte na FAQ vašeho OS pro detaily k vašemu OS a na Open Com, Inp a Out .

Zpět na začátek

Začínáme s FreeBASIC - Odpovědi na Vaše otázky


Kde najdu více informací o FreeBASIC?
FreeBASIC Wiki je nejaktuálnější manuál pro používání FreeBASIC. Je dostupný na freebasic.net/wiki/ v angličtině.
Pokud zůstane tento český návod na Helltrackeru i po dokončení překladu, přidám k němu i české fórum a wiki a vznikne tak české zrcadlo anglických stránek freebasic.net. Budoucí linky by měly být tyto: Wiki (nápověda) a fórum. (?zatím nefungují)

Aktivní FreeBASIC fóra:
  •       Official one FreeBASIC
  • FreeBASIC.net - Fórum
  •       Qbasic/Quickbasic News
  • Qbasic/Quickbasic News
  •       Pete's QBASIC Site
  • Pete's QBASIC Site
  •       FreeBASIC Games Directory Forum       
  • FreeBASIC Games Directory Forum
  •       FreeBASIC-Portal.de (in German)
  • FreeBASIC-Portal.de


    Aktivní periodika, která přinášejí s FreeBASIC související články jsou:
    Tyto magazíny vždy rády přijmou nové články. Takže pokud myslíte, že máte dobré téma na článek o FreeBASICu, neváhejte a nabídněte jej!

    Zpět na začátek

    Proč se mi neotevře QB GUI když spustím FreeBASIC?
    Protože QB měl Integrované Vývojové Prostředí (Integrated Development Environment - IDE).
    Protože FreeBASIC jej nemá integrováno.

    FreeBASIC je samostatný kompiler, nikoliv klon, nebo nějaká aktualizace QuickBASIC. Je to aplikace v režimu konzoly. FreeBASIC Vám bude přes příkazový řádek přijímat soubory BAS a vyplivne vám EXE.
    Soubor se zdrojovým BAS kódem si můžete vytvořit v jakémkoliv Textovém Editoru, který Vám vyhovuje (Notepad, EDIT, nano,...), a ten pak spustíte v kompilátoru.
    Pokud nemůžete žít bez vybarvování syntaxí, zvýrazňovače chyb, multičetné editace souborů, integrovaného debuggeru, kontextové nápovědy a dalších prvků, typických pro specializované IDE BASICu, máme pro vás i to. Není však napevno a nedělitelně 'smontované' s kompilátorem, takže vám dává svobodu volby tvůrčího prostředí. Mrkněte se FAQ podle vašeho OS a vyberte si z dostupných editorů.

    Zpět na začátek

    Mohu mít OFF-Line verzi této dokumentace?
    Toto je neoficiální překlad oficiální dokumentace do českého jazyka. Jako překladatel jsem nebyl nikým autorizován, a tedy nejsem oficiální spolupracovník. Neexistují vzájemné kontakty, které by mne opravňovaly k takovému tvrzení, neexistuje systém automatických upozornění na změny v oficiální dokumentaci. Pouze jsem svůj záměr s překladem oznámil na fóru freebasic.net a byl jsem několika členy fóra pochválen za bohulibou činnost. Z toho vyplývá, že jediná oficiální dokumentace k FreeBASIC je v angličtině a ano, můžete ji mít v offline i online verzi.
    Offline verze oficiální wiki v různých formátech (CHM, HTML a jiné) je dostupná na Documentation directory at fbc's downloads site on SourceForge. Online je pak na http://www.freebasic.net.
    Tato česká verze prozatím k offline použití dostupná není. Vše se změní, až dopíši překlad. Pak Vám umístím na hlavní stránku této nápovědy tlačítko ke stažení, zároveň nabídnu překlad oficiální komunitě FreeBASIC. Požádám o autorizaci a o uvedení tohoto překladu (prozatím jen HTML) na stránky projektu na sourceforge.net. Pokud mi bude vyhověno, stane se tato verze nápovědy oficiální a bude dostupná na nejméně dvou na sobě nezávislých zdrojích. Tedy zde na Helltrackeru a dále na již zmíněném Sourceforge.

    Zpět na začátek

    Co stojí za myšlenkou Dialektů FreeBASIC?
    Ideou dialektů je umožnit zlepšení jazyka a zároveň zachovat zpětnou kompatibilitu s Basicy typů Q-Quick, tedy Basici, které již výrobce nepodporuje. Vtip je v tom, že syntaxe QB nejsou kompatibilní s pevně definovanými potřebami stylů, žádající si OOP. Nová klíčová slova FB se často střetávají s názvy proměnných ve starých QB programech. V QB je povoleno volně používat tečky v názvech proměnných a procedur, které nejsou UDT (Uživatelem Definované Typy).
    Tyto tři dialekty (-lang fb, -lang qb, -lang fblite) umožňují spojit to nejlepší z obou světů.
    • -lang fb poskytuje rámec (framework) potřebný pro programování OOP. Jiné dialekty OOP neumožňují.
    • -lang qb umožní vývojářům zvyšující se slučitelnost-kompatibilitu s QB programy. Novější klíčová slova ve starých zdrojácích lze ale využít také. Je na to malý, originální fígl. Stačí je předepsat dvěma podtržítky. Například Getmouse vyvoláte takto __Getmouse.
    • -lang fblite nabízí FreeBASIC jazykovou kompatibilitu s více QBASIC kompatibilním stylem kódování.

    Zpět na začátek

    Proč mi spadl program, když jsem definoval pole větší, než xx?

    To se obvykle stane, když vytvoříte automatické pole fixní délky příliš velké, a to poškodí programový zásobník. Máte několik možností řešení:

    • Pokud je to možné, zmenšit velikost automatického pole.
    • Vytvořit pole s proměnnou délkou, které
      • definuje pole s prázdným dolním indexem (pomocí Dim), nebo
      • definuje pole s variabilními indexy namísto numerických literálů, Konstanty nebo Enums (s použitím Dim), nebo
      • definuje pole s ReDim.
    • Rezervovat více paměti pro programový zásobník použitím -t volby příkazového řádku při kompilaci. Výchozí nastavení je -t 1024 (kilobytů). Pozn.: Není moc dobrý nápad, používat velmi vysoké hodnoty.
    • Vytvořit statické pole, jeho definováním se Static, je lepší než Dim (jen lokálně viditelné, ale rezervováno všude (tzn. zabírá místo)).
    • Definovat pole s Shared (sdíleným) přístupem pomocí Dim (toto dělá pole zcela globální).
    • Použití Pointers (ukazatele) a Memory Functions (paměťových funkcí) jako Allocate a Deallocate, k vlastní správě paměti - což je preferovaný způsob pro ukládání velkých vyrovnávacích pamětí, není však vhodný pro začátečníky.

    Statické a proměnné délky polí nepoužívají programový balík pro své datové prvky, takže nemají problém spojený s automatickými fixními délkami polí. Viz Storage Classes (Třídy úložišť). Všimněte si, že ukládání obrovské vyrovnávací paměti jako statické, nebo se zvyšící se hodnotou zásobníku vysoko nad výchozí nastavení, zvyšuje fixní množství paměti potřebné k načtení a spuštění vašeho programu, i když se většina z toho později nepoužije. To vše může mít za následek degradaci výkonu, nebo dokonce úplné odmítnutí načtení vašeho programu.

    Zpět na začátek

    Proč mi program při kompilaci vyhazuje hlášku 'cannot find -llibname' (nemůžu najít -llibname)?
    Jedná se o chybu vytvořenou pokusem o provázání. Program má odkazovat na externí knihovnu(y), určené v kódu programu #inclib, nebo v příkazovém řádku kompilátoru -l. Nicméně, linker nebyl schopen najít odpovídající soubor na žádné z definovaných či defaultních cest ke knihovnám. Ověřte domovskou stránku knihovny, kterou potřebujete pro kompilaci, zjistěte, jak ji stáhnout, nebo mrkněte na Seznam externích knihoven, kde najdete více potřebných informací o Vámi požedované knihovně.

    Zpět na začátek


    Pokročilý FreeBASIC - Odpovědi na Vaše otázky


    Jak vytvořím propojení do C knihoven?
    Ve FreeBASIC jsou C knihovny nastaveny v podstatě stejným způsobem jako v C. Všechny knihovny zabudované ve FreeBASIC mají v základu uložený souborový název "library name.bi", který používá metacommand #inclib pro zahrnutí knihovny a příkaz Declare k deklaraci funke v rámci knihovny. Ve FreeBASIC jsou zahrnuty stovky BI souborů, viz úplný seznam záhlaví knihoven zde.

    Zpět na začátek

    Mohu použít debugger?
    FreeBASIC preferuje debugger kompatibilní s GNU GDB.
      • Win32: Insight je uživatelsky přívětivý obal pro GDB, viz FAQ pro Win32.
      • DOS: Upozornění: DOS má také produkt s názvem "Insight", je to ale debugger v reálném režimu nepoužitelný s FreeBASIC. Použijte GDB nebo alespoň nějaký DPMI32 debugger.
      • Linux: použijte GDB.

    Zpět na začátek

    Co je úkolem souborů AR.EXE, AS.EXE a LD.EXE přiložených k FreeBASICu?
    AS.EXE je GAS, "GNU Assembler". Vždy se podílí na kompilaci. LD.EXE je "GNU linker", podílí se na vytváření spustitelných souborů. AR.EXE je "GNU archiver", ve skutečnosti knihovník. Vytváří .A knihovny.

    Zpět na začátek

    Existuje limit pro velikost mých zdrojových souborů?
    Ano. Protože je FreeBASIC plně 32-bitový kompilátor, může teoreticky zpracovávat soubory až 4 GB = 4294967296 byte, nicméně kapacita vaší RAM by měla být podstatně větší, než je velikost vašeho zdroje, jinak se kompilace nedokončí, nebo se bude přinejmenším velice zpomalovat.

    Zpět na začátek

    Mohu ve FreeBASICu napsat i Operační Systém?

    Ano i Ne. Pokud opravdu trváte na tom, že napíšete Operák ve FreeBASIC, pak zní odpověď ANO. Jestliže otázka zní, zda je to dobrý nápad, nebo zda jste začátečník a chystáte se psát OS pomocí FreeBASIC, pak odpověď zní NE!.
    Je zde několik nástrah:
      • Vývoj OS je tvrdá makačka, viz: http://www.osdev.org/wiki/Getting_Started.
      • FB vám nepomůže obejít nutnost sestav částí, i s C to může být téměř nemožné.
      • Nebudete moci používat většinu důvěryhodných FreeBASIC prvků, jako je grafika, souborové I/O, vlákna, management paměti, ani konzolové I/O... po plovoucí čárku, matematiku a logiku. Pokud budete potřebovat tyto funkce knihovny, musíte je reimplementovat.
    FreeBASIC spoléhá na GCC, a dostupné informace o vývoji OS v C platí i pro FreeBASIC. FB vám nepomůže ani více, ani méně než GCC.

    Zpět na začátek

    Jsem vývojář OS. Lze FreeBASIC naportovat na můj OS?

    Záleží, jak leží a závisí, jak visí! Pokud váš OS alespoň umožňuje funkcionality DOS s DPMI32 (konzole I/ODepends (console I/O (hledání, mnohočetné otevřené soubory, ...), souborové I/O, management paměti) a má port GCC, pak zní odpověď ANO. Pokud máte alespoň trochu jiný, vyhovující C kompilátor s knihovnami, pak by to mohlo být možné. Nelze rozumným způsobem portovat FreeBASIC například na OS, který umožňuje načíst, nebo uložit, soubor pouze do jednoho bloku, nebo na 16-bitový OS.

    Zpět na začátek

    Má FreeBASIC podporu vracení výsledků z funkcí, stejnou jako je v C++?

    Ano, tato funkce existuje od verze 0.90.0. Procedurey mohou vracet odkazy pomocí ByRef jako datatype pro návratový typ.

    Zpět na začátek

    Viz též
    Překlad: Gmisiycs 20.2.2016