Dialekty FreeBASIC kompilátoru
 

FreeBASIC verze 0.17b zavádí -lang volbu příkazového řádku, která se používá ke změně režimu kompatibility jazyka pro různé dialekty základního jazyka.

Počínaje verzí 0.18.3b byl -lang qb dialekt omezen tak, aby dovolil jen to, co bylo dovoleno v QuickBASICu.

Ve verzi 0.18.4b byl přidán dialekt -lang fblite, který má v budoucnu nahradit -lang deprecated.

Ve verzi 0.20.0b byl přidán #lang jako direktiva a $Lang jako metacommand, aby bylo možno určit dialekt ze zdrojového kódu.

 -lang volba popis
 fb (výchozí) kompatibilita s FreeBASIC
 qb QBASIC kompatibilita
 fblite FreeBASIC jazyková kompatibilita, se stylem kódování více podporující QBASIC kompatibilitu
 deprecated Kompatibilita s FB 0.16


Volba -lang byla potřebná, aby FreeBASIC mohl podporovat objektově orientované programování a další funkce v budoucnu, aniž by byla ochromena podpora QuickBASIC, narušena kompatibilita se starými FreeBASIC zdrojáky, a aniž by bylo nutno FreeBASIC udržovat s velkým množstvím navzájem podobných balíčků. Podporu QuickBASIC lze v případě potřeby vylepšovat, aniž by to poškozovalo zdrojové kódy napsané speciálně pro FreeBASIC.

Ke kompilaci starých GW-BASIC nebo QuickBASIC/QBasic zdrojových souborů s minimálními změnami, použijte volbu příkazového řádku -lang qb při spuštění FBC. Tuto volbu budeme rozvíjet pro lepší kompatibilitu s QuickBASIC/QBasic kódem.

Pro kompilaci FreeBASIC zdrojů 0.16b, použijte volbu -lang deprecated. Tato volba je jen pro zachování kompatibility starých kódů a do budoucna vyvíjena nebude. Je pravděpodobné, že v další beta verzi již obsažena nebude vůbec.

Pro programátory, kteří chtějí mít přístup k některé z FreeBASIC novějších funkcí, ale chtějí zachovat více QBASIC friendly styl programování, je zde možnost zadání volby -lang fblite. Tento dialekt nebude v budoucnu podléhat výrazným změnám, ale udržován a podporován bude.
Tato volba je také nejvíce kompatibilní se zdrojovými kódy, napsanými pro starší verze FreeBASIC.

Pro nové projekty se doporučuje používat -lang fb. Nové funkce, jako jsou třídy objektů, dědičnost..., budou přidávány výhradně k tomuto dialektu.


-lang fb (výchozí režim)
Není podporováno:

1) Implicitní deklarace proměnných
2) Typ přípony (!, #, $, %, &)
    • Jsou povoleny pouze u číselných literálů, ale je doporučeno použít Cast nebo f (single), d (double), ll (longint), ul (ulong), ull (ulongint) přípony numerických literálů k ochraně přetečení.

    • Explicitní typy ("As T") je potřebné deklarovat jako proměnné pomocí Dim, ReDim, Extern nebo Common. Proměnné deklarované použitím Var nebo Const mají mít typ vyplývající z hodnoty inicializace (explicitní typ je volitelný pomocí Const).

4) Předávání všech parametrů ve výchozím nastavení formou odkazu
    • Ve výchozím nastavení jsou všechny vnitřní typy skalárů - numerické typy a typy ukazatele - předávány podle hodnoty (ByVal). Ostatní typy - String nebo Uživatelem Definovaný Typ - je předáván odkazem (ByRef).
    • Použijte volbu příkazového řádku -w pedantic, k zabránění hlášení o ne-explicitních ByVal nebo ByRef.

5) OPTIONs jakéhokoliv druhu bez kontextové citlivosti (no context-sensitivity)
6) Termíny v názvech symbolů
    • Místo nich používejte jmenné prostory.
    • Vnořené procedury mohou být v budoucnu povoleny.

8) On Gosub nebo On Goto
9) Resume
    • Většina procedur grafických a runtime knihoven nyní vrátí chybový kód pro: IF OPEN( "text" FOR INPUT AS #1 ) <> 0 THEN error...

10) '$DYNAMIC, '$STATIC, '$INCLUDE meta příkazy, vložené v komentářích
    • Viz bod 5 o Option Dynamic.
    • Použijte #include "filename" namísto '$include.

11) Call nebo Let
    • Odstraňte je.

12) Číselné štítky
    • Pojmenované štítky mohou být použity místo např. label_name: / Goto label_name.

13) Globální symboly se stejným názvem, jako klíčová slova
    • Deklarujte je uvnitř jmenného prostoru.


Zastaralé -lang

Podporováno: Vše z verze 0.16b, ale:

1) GOSUB/RETURN a ON ... GOSUB (a to i na úrovni modulu)
    • Realizace GOSUB by mohla být nebezpečná pro vláknové zpracování v -lang qb režimu, umožňujícím rychlé spuštění. Multi-threading (vícevláknové zpracování) není podporováno při volbě -lang qb, zatímco při použití -lang deprecated ano.

Nepodporováno:

1) Třídy (Classes)
    • Povolení opakování v názvech symbolů by mohlo být příliš obtížné, a nebo nejednoznačné při provádění.

2) Přetížení operátoru
    • Povolení opakování v názvech symbolů by mohlo být příliš obtížné, a nebo nejednoznačné při provádění.

3) Konstruktory, destruktory a metody v TYPEs.
    • Povolení opakování v názvech symbolů by mohlo být příliš obtížné, a nebo nejednoznačné při provádění.


-lang fblite

Podporováno: Vše z -lang deprecated dialektu, plus..

1) GOSUB/RETURN
- Pro povolení použijte Option Gosub. (?) Tímto zakážete RETURN pro opuštění procedury, vzhledem k nejednoznačnosti.

Nepodporováno:

1) Scope bloků
    • Všechny proměnné jsou dány rozsahem procedury. Explicitně mohou být Scope (rozsahy) bloků přidány později.

-lang qb
Podporováno: Vše, co není podporováno/povoleno v dialektu -lang fb, plus..

1) Call může být použit s dopředu volanými funkcemi.

2) Shared může být použito uvnitř funkcí. (W.I.P.)

3) Všechny proměnné, definované implicitně nebo eplicitně, jsou vždy alokovány v rámci procedury, stejně jako v QuickBASIC.

4) Příkaz Data se neohlíží na symboly a předpokládá, že i bez uvozovek je každý řetězec doslovný, jako v QuickBASIC.


Nepodporováno:

1) Vícevláknové zpracování (multi-threading)
    • Nelze použít žádnou z procedur threading.

2) Třídy a jmenné prostory.

3) Procedury a operátory přetížení.

4) Konstructory, destructory a další členské procedury v definicích Type.

5) Scope (rozsah) bloků.

6) Extern (externí) bloky.

7) Inicializace proměnných
    • Všechny proměnné jsou přesunuty do oblasti působnosti procedury (jako v QuickBASIC), takže by byla inicializace lokálních proměnných příliš obtížná.

Překlad: Gmisiycs 18.2.2016