Těch použitelných klonů jazyka Basic je samozřejmě více
1) od notoricky známého FreeBasic
https://www.freebasic.net/
2) přes LogicBasic
https://www.maxissoft.com/logicbasic/
3) a ThinBasic:
https://www.thinbasic.com/
4) až po placený PureBasic
https://www.purebasic.com/index.php
5) nebo vývojové prostředí B4X
https://www.b4x.com/
21. 10. 2021, 10:37 editováno autorem komentáře
Ty rozdíly jsou obrovské, přes jeden řád. Chystám se na nějaké benchmarky, ale bude tam nutné rozlišit mezi čistým výpočetním výkonem a například výkonem při vykreslování (což ovlivní například tvorbu her).
V čistém výpočetním výkonu vyhrávají (pochopitelně) překladače, například FreeBasic, ale fakt musím udělat ty benchmarky, abych to porovnal se zbytkem světa (pro interpretry to nebude žádná sláva, cca na úrovni CPythonu).
V interpretech BASICU na 8-bit ATARI pomohlo pokud se výpočet v cyklu vtěsnal na jednu řádku. Provedl se překlad řádky do strojáku do "zásobníku" a provedl se celý. Místo pomalejšího překladu jedné řádky do "zásobníku", vykonání přeloženého kódu, vyprázdnění "zásobníku", překlad následující řádky...... . Funguje to v interpretrech BASICu na PC podobně?
Ty dnešní interpretry už mají reprezentaci programu v AST, pokud už rovnou negenerují bajtkód. Na Atárku bylo nutné šetřit paměť, doslova každý bajt. Tak se používal tokenizovaný kód (což nebylo špatné), ovšem dlouho se hledaly cíle skoků - navíc lineárním prohledáváním, což bylo na 1,7MHz procesoru šíleně pomalé. Trošku to spravil Turbo Basic, ale i ten stále pracoval s tokenizovaným kódem a ne s AST nebo dokonce s bajtkódem - to si můžeme dovolit až dnes s obrovskou pamětí.
Příkazy nejsou v paměti uložené jak se zadávají "po písmenkách", ale jako čísla - tokeny. Když se podíváš třeba na tabulku znaků ZX Spectra, v horní polovině najdeš úplně všechno co ten BASIC umí: https://cs.wikipedia.org/wiki/Znakov%C3%A1_sada_ZX_Spectrum
Bajtkód (bytecode) je "stroják" pro virtuální stroj, kterým ho můžeš spustit na libovolném procesoru s libovolnou architekturou. Se skutečným strojákem to nejde, ten funguje jen na konkrétním typu procesoru. Interpret BASICu je také takový virtuální stroj.
To je v pohodě, dneska se to totiž už tak často nepoužívá.
Například zrovna ten zmíněný Atari BASIC provádí tokenizaci hledáním klíčových slov, operátorů atd. na právě zadaném programovém řádku - Ihned po zápisu každého řádku se provádí takzvaná tokenizace, která nahradí jednotlivé konstrukce jazyka osmibitovými kódy. Příkladem může být tokenizace tohoto programového řádku:
10 LET X=1 : PRINT X
V operační paměti tento kód není uložen (pouze v bufferu textového editoru, odtud je však ihned poté přemazán). Namísto toho se uloží sekvence bajtů s následujícím významem:
Sekvence bajtů Stručný popis A0 00 13 délka celého tokenizovaného řádku (19 bajtů) 0F offset konce prvního příkazu 06 token příkazu LET 80 index proměnné X 2D token operátoru = 0E následuje numerická konstanta 40 01 00 00 00 00 takto vypadá zakódovaná hodnota 1 (na začátku je exponent) 14 konec (prvního) příkazu 13 offset konce druhého příkazu 20 token příkazu PRINT 80 index proměnné X 16 značka EOL pro konec řádku
Trošku to rozepisuji tady:
https://www.root.cz/clanky/programovaci-jazyky-pouzivane-na-platforme-osmibitovych-domacich-mikropocitacu-atari/#k06
To má další důsledky - to, co zapíše programátor, je nenávratně ztraceno! Všechny mezery, všechny zkratky příkazů - to je pryč, protože po LIST se vypíše podoba získaná "detokenizací". Tedy v tomto BASICu má výpis programu jedinou správnou strukturu. (v TurboBASICu je to vylepšeno tím, že se odsazují těla smyček - opět jen při výpisu)
A ještě jeden důsledek - při tokenizaci se hledají příkazy v tabulce příkazů odshora dolů. Pokud použijete zkrácený příkaz, tak se prostře v tabulce najde první příkaz, který odpovídá té zkratce. Tedy zkratky nikde nejsou zapsány (myslím v ROM), řeší se to dynamicky právě při tokenizaci. Příklad:
10 SE. 1,2,3 20 SET. 1,2,3 30 SETC. 1,2,3 40 SETCOLOR 1,2,3
se ve skutečnosti tokenizuje na čtyři totožné řádky a při LISTu dostaneme:
10 SETCOLOR 1,2,3 20 SETCOLOR 1,2,3 30 SETCOLOR 1,2,3 40 SETCOLOR 1,2,3
To je svým způsobem geniální a pokud si tu tabulku osvojíte, tak lze **psát** programy stejně rychle, jako na Spectru, kde se tokeny přímo generují díky "multimodální" klávesnici. A při výpisu dostanete krásný zdroják :-]