Hlavní navigace

BBC BASIC i QBasic oslavují svá kulatá výročí

25. 2. 2021
Doba čtení: 38 minut

Sdílet

Letos, ostatně podobně jako v předchozích letech, oslavíme několik kulatých výročí souvisejících s vývojem jazyků. Dnes si připomeneme třicetileté narozeniny QBasicu a čtyřicetileté narozeniny v několika ohledech přelomového BBC BASICu.

Obsah

1. BBC BASIC i QBasic oslavují svá kulatá výročí

2. Mainframy společnosti General Electric: platforma pro vznik BASICu

3. Need for BASIC?

4. Rodí se Dartmouth Time Sharing System – DTSS

5. Revoluční a stále ještě nepřekonaný koncept – interaktivní dialog s počítačem přes DTSS

6. Vznik programovacího jazyka BASIC na systému DTSS

7. Příkazy dostupné v prvních verzích programovacího jazyka BASIC

8. Goto statement considered harmful

9. Vznik programovacího jazyka BBC BASIC

10. Rozšíření BBC BASICu na další počítačové platformy

11. Základní vlastnosti programovacího jazyka BBC BASIC

12. Strukturované konstrukce v BBC BASICu

13. Kombinace programů psaných v BBC BASICu a assembleru

14. Programovací jazyk BASIC na platformě IBM PC

15. GW BASIC

16. QBasic

17. Podpůrné knihovny pro QBasic, aplikace vytvoření v QBasicu

18. Vývojové prostředí QBasicu

19. Předchozí články o kulatých výročích v oblasti programovacích jazyků

20. Odkazy na Internetu

1. BBC BASIC i QBasic oslavují svá kulatá výročí

V předchozích dvou letech jsme si na stránkách Roota připomněli několik důležitých kulatých výročí v oblasti IT a především pak programovacích jazyků. Pro připomenutí: jednalo se o šedesátiny programovacího jazyka Algol a taktéž COBOLu. Od vzniku assembleru uběhlo dokonce již sedmdesát let. Zmiňovali jsme se ovšem i o modernějších programovacích jazycích; například Python oslavuje třicetiny a současně loni Python verze 2 oslavil dvacetiny. Ovšem nezapomněli jsme ani na třicáté výročí vzniku Turbo Pascalu.

Obrázek 1: Nové (tedy alespoň relativně) vydání BBC BASICu, který letos oslavuje čtyřicet let od svého vzniku.

Pochopitelně i letos oslavíme několik podobných výročí. V dnešním článku se budeme zabývat dvěma událostmi, od nichž letos uplynulo či v následujících deseti měsících uplyne třicet, resp. dokonce čtyřicet let. Konkrétně se jedná o data vydání dvou poměrně důležitých (i když ve druhém případě nikoli přelomových) interpretrů programovacího jazyka BASIC, který sice má z hlediska teorie programovacích jazyků poměrně mnoho nepříjemných vlastností, ovšem snadnost jeho implementace, minimální nároky na kapacitu operační paměti (popř. paměti ROM s interpretrem) i rychlost procesoru a v neposlední řadě taktéž rychlá učící křivka udělaly z tohoto jazyka na konci sedmdesátých let „lingua francu“ v oblasti minipočítačů a především pak domácích osmibitových mikropočítačů. Nejprve si připomeneme vznik slavného BBS BASICu v roce 1981; prakticky přesně o deset let později, tedy v roce 1991, byla vydána první verze QBasicu.

Obrázek 2: Kombinace zdrojového kódu v BBC BASICu s assemblerem. Podobný koncept byl podporován i v Turbo Pascalu i mnoha variantách programovacího jazyka C.

2. Mainframy společnosti General Electric: platforma pro vznik BASICu

Vzhledem k tomu, že je tento článek zaměřen na historii výpočetní techniky, seznámíme se v něm – alespoň ve stručnosti – se samotným vznikem konceptu programovacího jazyka BASIC. Musíme se ovšem v čase vrátit ještě mnohem dál, než „pouze“ do roku 1981 a BBC Basicu či dokonce do roku 1991 a QBasicu. Vznik programovacího jazyka BASIC totiž není spojen s osmibitovými domácími mikropočítači, ale se zcela odlišnými stroji (jak cenově, tak i rozměrově) – s mainframy řady GE-200, konkrétně s mainframy nesoucími označení GE-215, GE-225 a GE-235. Na těchto počítačích vyvinutých společností General Electric se používalo velké množství různých programovacích jazyků, z nichž většina byla vytvořena – jak bylo v tu dobu obvyklé – přímo v laboratořích společnosti GE.

Poznámka: v šedesátých a vlastně i v sedmdesátých letech minulého století vůbec nebylo neobvyklé, že jak samotný hardware (mainframe, minipočítač, později mikropočítač, mnohdy i se všemi periferiemi), tak i operační systém, programovací jazyky a další podpůrný software dodávala jedna a táž společnost. Dnes je situace naprosto odlišná – hardware je většinou komoditní, komoditou se de facto stává i operační systém a pokus o vytvoření programovacího jazyka, který by běžel pouze na jediném operačním systému, je velmi problematický, vyžaduje obrovské investice a prakticky je již od začátku odsouzen pouze k minoritní roli (nehledě na risk softwarových společností, které by své aplikace psaly v tomto jazyce).
*

Obrázek 3: Procesorová jednotka sálového počítače GE-225.
Autor fotografie: Ed Thelen

Vraťme se však k mainframům společnosti General Electric. Z nižších programovacích jazyků měli vývojáři na výběr mezi jazykem symbolických instrukcí nazvaným General Assembly Program (zkráceně GAP) a plnohodnotným assemblerem se jménem ZOOM, který mj. podporoval i tvorbu maker (dnes se většinou setkáme pouze s plnohodnotnými assemblery a tak pojem „jazyk symbolických instrukcí“ začal splývat s označením assembler). K těmto nízkoúrovňovým programovacím jazykům můžeme připočíst i specializovaný jazyk pojmenovaný WIZ, který sloužil pro překlad aritmetických a logických výrazů do strojového kódu. Tyto přeložené výrazy bylo díky kompatibilnímu binárnímu formátu samozřejmě možné volat jak z assembleru (přesněji řečeno z programů napsaných v jazyku symbolických instrukcí), tak i z programů vytvořených v některém vyšším programovacím jazyku.

*

Obrázek 4: Pohled na vnitřní uspořádání procesorové jednotky sálového počítače GE-225.
Autor fotografie: Ed Thelen

Vyšší programovací jazyky byly na mainframech společnosti General Electric dostupné přes nástroj nazvaný GECOM, což je zkratka plného názvu General Compiler. Tento nástroj podporoval především dvojici programovacích jazyků COBOL a ALGOL, kterými jsme se podrobněji zabývali v předchozích částech tohoto seriálu (viz též devatenáctou kapitolu s odkazy). Kromě těchto v podstatě obecných programovacích jazyků byl nástrojem GECOM podporován i specializovaný jazyk GECOM Report Writer, jehož jméno přesně vystihuje oblast jeho použití (tvorba tiskových sestav), a taktéž programovací jazyk TABSOL, který byl specializovaný na programování úloh, v nichž se používaly rozhodovací tabulky. Díky možnosti vzájemné kombinace jednotlivých programovacích jazyků podporovaných nástrojem GECOM bylo možné psát nízkoúrovňové rutiny aplikace v assembleru, základní rutiny v COBOLu a/nebo v ALGOLu, rozhodovací část aplikace (dnes je moderní používat termín „business logika“ :-) ) v TABSOLu a definici výstupních sestav bylo možné provést v GECOM Report Writeru.

Obrázek 5: Výpis části grafického dema pro počítače PMD-85, které bylo vytvořeno v BASICu s využitím příkazů (unikátních pro PMD-85), které umožňovaly práci s rastrovou grafikou.

3. Need for BASIC?

I přes na svou dobu velmi široké spektrum programovacích jazyků, které jsme si stručně představili v předchozí kapitole však nebyla nabídka jazyků úplná do té míry, aby vyhovovala potřebám všech uživatelů a programátorů mainframů. Z tohoto důvodu byl pro sálové počítače řady GE-200 vyvinut i překladač programovacího jazyka FORTRAN II, který spolu s COBOLem patřil až do poloviny šedesátých let minulého století mezi nejpoužívanější jazyky na sálových počítačích (což do jisté míry způsobila tehdejší převaha společnosti IBM nad ostatními „sedmi trpaslíky“). Ovšem všechny výše zmíněné programovací jazyky, ať již se jednalo o assemblery či o vyšší programovací jazyky, trpěly jedním poměrně závažným nedostatkem – zdrojové texty programů se nejdříve musely napsat na specializované formuláře (pro každý jazyk byl určen jiný formulář), poté se texty napsané na těchto formulářích vyděrovaly na děrné štítky, což se provádělo na mechanickém či elektromechanickém zařízení bez jakékoli návaznosti na samotný počítač (mainframe) a teprve poté bylo možné děrné štítky umístit do čtečky, která zapsané zdrojové texty postupně načítala a předávala překladači.

Obrázek 6: Jednotka pro přípravu děrných štítků.

Pokud nastala při překladu zdrojového textu chyba (vypsaná většinou na systémovou tiskárnu nebo do generovaného listingu programu), nebo i úspěšně přeložený program nevykonával takovou činnost, jakou programátor zamýšlel (typické pro vydání „stabilní verze“ v pátek odpoledne), musel se celý postup překladu znovu opakovat. Díky tomu, že se pořadí děrných štítků mohlo měnit, nemusel se většinou přepisovat celý program, ale pouze se do něj mohly doplňovat (či nahrazovat) další příkazy, i tak se však jednalo o velmi zdlouhavou činnost, která navíc vyžadovala spolupráci mezi programátorem, pracovníky, kteří program vyděrovali na děrné štítky a operátory pracujícími přímo se sálovým počítačem. Určité zrychlení přineslo použití dálnopisů pro zápis programů na děrné pásky s tím, že se při opravě programu musela většinou vytvořit nová páska, popř. přišly ke slovu nůžky a lepidlo. Děrná páska se v místě opravy přestřihla a při troše trpělivosti se mohlo přestřižené místo nahradit kusem nové pásky (popř. se mohly jednotlivé bity zalepit) – i z tohoto důvodu také mnoho tehdejších programátorů znalo nazpaměť kódování EBCDIC či ASCII, aby dokázali kód na pásce číst z hlavy a tak snadno najít místo, které je potřeba opravit.

Obrázek 7: Část programu napsaného v programovacím jazyce TABSOL na formuláři určeném k vyděrování a následnému překladu (kompilaci).

4. Rodí se Dartmouth Time Sharing System – DTSS

Řešení s dálnopisy přinášelo i tu výhodu, že programátor nemusel po každé změně ve zdrojových textech svého programu cestovat s děrnými štítky do budovy, kde se nacházel sálový počítač (nebo specializované zařízení pro přípravu děrných štítků), ale mohl svůj program přenést přímo s využitím dálnopisu, resp. při použití běžné telefonní linky přes modem, který většinou obsahoval „kolébku“ pro položení telefonního sluchátka – přenos dat byl prováděn přes běžný telefon (některé modernější dálnopisy již externí telefon nepotřebovaly), a to mnohdy závratnou rychlostí 50 nebo 75 baudů (symbolů za sekundu). Počítač navíc mohl všechny zprávy překladače tisknout pomocí dálnopisu přímo u stolu programátora. Ovšem i tento způsob použití dálnopisu nebyl zcela dokonalý, protože ve svých prvopočátcích vedl k tomu, že se celý mainframe (resp. jeho operační systém) musel věnovat jedinému uživateli, který prováděl překlad svého programu, nebo již přeloženou aplikaci spouštěl. Počet uživatelů obsloužených za jeden den byl při tomto způsobu práce relativně nízký a navíc bylo nutné zavádět a dodržovat časové plány určující termíny připojení jednotlivých uživatelů.

Poznámka: dálnopis se anglicky řekne teletype, zkráceně tty. A právě od původních dálnopisů se odvozuje i název UNIXových zařízení /dev/tty*.

Obrázek 8: Starší typ dálnopisu. Na levé straně je umístěna jednotka pro děrování i čtení děrné pásky, na pravé straně pak klávesnice.

Zatímco při použití sálových počítačů v bankách, pojišťovnách či podobných institucích nebyl problém obsluhy více uživatelů zpočátku příliš omezující, protože se na těchto mainframech většinou spouštěly dlouhotrvající dávkové úlohy, byla situace zcela odlišná na vysokých školách, kde měly sálové počítače sloužit mj. i pro výuku programování, popř. pro implementaci různých výpočtů z oblasti matematiky, fyziky, chemie atd.. To znamenalo, že „univerzitní“ počítače musely zpracovávat větší množství spíše krátkodobějších úloh denně (překlad programu trval několik desítek sekund až jednotek minut, což byla mnohem kratší doba, než například výpočet mezd ve větší společnosti nebo clearing mezi bankami). Z toho důvodu, aby se toto omezení do co nejvyšší míry vyřešilo, se začal na Dartmouth College (jedna z prestižních univerzit v USA) již v roce 1963 vyvíjet systém, který by umožnil současnou práci více uživatelů na jednom mainframu, přičemž by jednotliví uživatelé pro komunikaci se sálovým počítačem používali dálnopisy upravené do podoby počítačových terminálů. Vývoj tohoto systému byl veden Johnem Kemenym a Thomasem Kurtzem, kteří při programování tohoto systému spolupracovali s několika svými studenty.

Obrázek 9: Dálnopis ASR-33, který byl v minulosti poměrně často používaný i jako levná a relativně kvalitní tiskárna.

5. Revoluční a stále ještě nepřekonaný koncept – interaktivní dialog s počítačem přes DTSS

Výsledný produkt spolupráce Johna Kemenyho, Thomase Kurtze a skupiny studentů (první použitelná verze jejich systému byla představena již roku 1964), jenž byl nazván Dartmouth Time-Sharing System – DTSS, byl zprvu provozován na sálovém počítači GE-235 vybaveného dálnopisy Datanet 30. Tyto terminály se však nepřipojovaly přímo k mainframu GE-235, ale k jednoduššímu počítači nazvanému Datanet (tedy podobně, jako vlastní dálnopisy), který požadavky z dálnopisů vhodným způsobem předpřipravil pro zpracování mainframem GE-235. Systém DTSS na této konfiguraci umožňoval souběžnou práci až několika desítek uživatelů, což byla naprosto přelomová vlastnost. Po přenosu operačního systému DTSS na modernější a výkonnější mainframy řady GE-600 (konkrétně na typ GE-635) se výkon celého systému zvýšil takovým způsobem, že počet souběžně pracujících uživatelů dosáhl téměř neuvěřitelné hodnoty 300!

ibm-5

Obrázek 10: Manuál k první verzi FORTRANu určeného pro mainframy IBM 704.

Poznámka: John Kemeny, který byl, jak již víme, jeden z autorů systému DTSS, ještě před svým působením v Dartmouth College pracoval ve výzkumných laboratořích v Los Alamos (jedná se o známé laboratoře, kde ve čtyřicátých a padesátých letech probíhal intenzivní výzkum v oblasti jaderné fyziky).

Zde John Kemeny tvořil výpočetní a simulační programy a taktéž si sám připravoval děrné štítky se zdrojovými kódy aplikací, které byly následně dávkově (někdy i po delší době) překládány tehdejšími sálovými počítači. Právě při této činnosti si Kemeny uvědomil, jak je tento dávkový způsob práce ve skutečnosti krkolomný, a vzápětí se stal propagátorem interaktivního způsobu práce s počítačem, při němž uživatel zadává mainframu příkazy konverzačním způsobem a počítač následně tyto příkazy vykonává a ihned tiskne veškerá chybová hlášení i výstupy příkazů.

ibm-5

Obrázek 11: Ukázka programu napsaného ve FORTRANu II, ve kterém můžeme mj. vidět i použití takzvaného aritmetického IF.

Právě díky systému DTSS a dálnopisům se interaktivní způsob komunikace s počítačem stal skutečností – uživatelé (většinou studenti) mohli s počítačem konverzovat takovým způsobem, že napsali příkaz na dálnopisu, tento příkaz byl mainframem vykonán a výsledek se ihned poté vypsal na elektronickém psacím stroji, kterým byl dálnopis vybaven (tento psací stroj mohl taktéž „opisovat“ příkazy zapsané uživatelem). Při čekání na zadání nového příkazu mohl mainframe díky způsobu implementace DTSS vykonávat jiné činnosti, tj. obsluhovat další uživatele, což mnohdy ve výsledku poněkud paradoxně vedlo k lepšímu využití strojového času, než tomu bylo na mainframech orientovaných výhradně na zpracování dávkových úloh.

Obrázek 12: Jednoduchý grafický editor pro počítače Apple II naprogramovaný v ASICu. Zajímavé je, že mnoho aplikací bylo původně naprogramováno právě v BASICu a teprve druhé a další verze se přepisovaly do assembleru. BASIC tak pro různé softwarové firmy sloužil jako důležitý prostředek pro tvorbu prototypů (tímto způsobem vznikly například i první hry firmy Sierra on Line či slavná herní série Ultima).

6. Vznik programovacího jazyka BASIC na systému DTSS

Se systémem DTSS je prakticky nerozlučně spojen i programovací jazyk BASIC, jenž byl na tomto systému vyvinut a kterému je věnován dnešní článek. Nejednalo se v žádném případě o náhodu, ale o cílený vývoj, protože některé vlastnosti BASICu, především jeho interaktivní způsob komunikace s uživatelem (jednalo se sice původně o překladač, ovšem program byl při zápisu kontrolován) i jednoduchost tvorby programů přesně odpovídala potřebám výuky programování, samozřejmě s ohledem na stav výpočetní techniky v polovině šedesátých let minulého století (dnes již jsou samozřejmě k dispozici zcela jiné technické prostředky, včetně grafických displejů a operačních systémů nabízejících plnohodnotné GUI). Programovací jazyk BASIC byl navržen takovým způsobem, aby v něm bylo možné interaktivně vytvářet programy, a to i v případě, že se uživatel k sálovému počítači připojoval „pouze“ s využitím dálnopisu. Omezení na použití dálnopisu ovšem do značné míry vylučovalo použití plnohodnotného textového editoru a tím do značné míry i blokovou strukturu programů psaných v BASICu.

Obrázek 13: John Kemeny a Thomas Kurtz.

Namísto toho byla prapůvodní verze programovacího jazyka BASIC orientována na zápis programových řádků, které byly očíslovány, tj. na začátku každého řádku bylo uvedeno jeho číslo s tím, že se programové řádky automaticky po svém zápisu na klávesnici dálnopisu zařazovaly podle svého čísla na správné místo v programu. To mj. znamenalo, že vývojář mohl zapisovat programové řádky v libovolném pořadí a navíc při zadání řádku se stejným číslem, jaké měl již existující řádek, došlo k přepisu původního obsahu tohoto programového řádku novou sekvencí příkazů. S číslováním řádků částečně souvisely i (ne)slavné příkazy GOTO a GOSUB, které obsahovaly číslo cíle skoku a nikoli (textové) návěští. Používání čísel řádků v BASICových programech bylo sice o mnoho let později – již v dobách celoobrazovkových terminálů a domácích i osobních počítačů – kritizováno, ovšem s ohledem na dobu vzniku BASICu a možností, které v té době poskytovala dostupná technika (dálnopisy) se podle mého skromného názoru jednalo o velmi dobrý návrh, což je ostatně potvrzeno i tím, že BASIC ve své téměř původní podobě přežil až do dob, kdy se jeho způsob zápisu programů již stal v mnoha ohledech zastaralý (mezitím ostatně přišla éra strukturovaného programování i programování objektově orientovaného).

Obrázek 14: Dálnopis Datanet používaný v systému DTSS.

Poznámka: číslování řádků, resp. přesněji řečeno možnost vymazat, modifikovat či přidat konkrétní řádek (určený číslem) do editovaného textu je ovšem i nedílnou součástí klasických řádkových textových editorů, tedy zejména historického QEDu následovaného editorem ed či v DOSu editorem EDLIN.

7. Příkazy dostupné v prvních verzích programovacího jazyka BASIC

John Kemeny a Thomas Kurtz navrhli programovací jazyk BASIC i s ohledem na to, aby se jednalo o jazyk využitelný pro prakticky libovolné úlohy, který by byl jednoduchý a současně i nezávislý na použitém hardware i operačním systému. Některé příkazy (jejich syntaxe i sémantika) jsou do jisté míry založeny na FORTRANu a ALGOLu, ovšem oproti oběma zmíněným programovacím jazykům byly první verze BASICu mnohem jednodušší a v několika ohledech i omezenější – na rozdíl od ALGOLu například BASIC po velmi dlouhou dobu postrádal možnost definice víceřádkových funkcí či uživatelských datových typů, FORTRAN navíc nabízel například funkce pro práci se soubory, formátovací příkazy, podporu pro komplexní čísla a od verze FORTRAN II taktéž uživatelské podprogramy. Původní verze BASICu byla skutečně velmi jednoduchá a možná až primitivní, což je pro výuku základů programování spíše pozitivní vlastnost – jazyk obsahoval pouze osmnáct příkazů, deset funkcí a neumožňoval deklarovat vícerozměrná pole ani řetězce.

Poznámka: mnoha vlastnostmi byl BASIC vlastně ještě primitivnější, než mnohé assemblery, což bylo v pozdější době celkem oprávněně BASICům vyčítáno.

Obrázek 15: Přední stránka manuálu k historicky první verzi programovacího jazyka BASIC.

Všechny příkazy dostupné v první verzi BASICu jsou vypsány v následující tabulce:

Příkaz Popis
REM začátek komentáře
DEF definice jednořádkové funkce
DIM definice jednorozměrného pole
LET přiřazení hodnoty výrazu do proměnné
GOTO skok na zadané číslo řádku
GOSUB skok do (nepojmenovaného) podprogramu
RETURN návrat z podprogramu
IF začátek podmínky
THEN začátek těla podmínky
FOR začátek počítané smyčky
TO za tímto příkazem je koncová hodnota počitadla smyčky
STEP krok, o který se změní počitadlo smyčky po jedné iteraci
NEXT konec počítané smyčky
PRINT tisk výsledné hodnoty výrazu
DATA datová sekce programu obsahující statická data
READ načtení hodnot uložených v sekci DATA
STOP zastavení programu na tomto příkazu
END konec programu, jedná se o příkaz umístěný na posledním řádku

Obrázek 16: Program zapsaný v AppleSoft BASICu spuštěný na počítači Apple II.

Poznámka: možná poněkud paradoxně se příkaz DEF nenacházel v dalších – v mnoha ohledech dokonalejších – variantách BASICu.

8. Goto statement considered harmful

Z předchozí tabulky je zřejmé, že klasický BASIC obsahoval jen velmi omezené možnosti tvorby rozhodovacích konstrukcí a programových smyček. Podmíněné konstrukce IF-THEN byly omezeny na jediný řádek. Pokud bylo nutné při (ne)splnění podmínky provést delší část kódu, musel se provést skok, a to buď skok bez návratu nebo skok do podprogramu:

10 IF A=B THEN GOTO 100
...
...
...
20 IF C==0 THEN GOSUB 2000

Totéž platilo pro programové smyčky. Přímo byla podporována jen smyčka FOR s počitadlem:

30 FOR I=1 TO 100 STEP 2
40 PRINT I
50 NEXT I

Ostatní typy smyček se realizovaly opět přes GOTO, například:

10 PRINT I
20 I=I*2
30 IF I <> 1024 GOTO 10
Poznámka: povšimněte si zápisu nerovnosti.

Obrázek 17: Práce s numerickými proměnnými a poli v BASICU. Povšimněte si, že na řádku 50 se do proměnné A vloží hodnota 0 a současně se vytvoří numerické proměnné B a C inicializované na nulu. Dále se na řádku 70 vytvoří desetiprvkové pole, na řádku 80 se nastaví hodnota prvního prvku tohoto pole na 42 a na řádku 100 se vypíše hodnota zdánlivě neinicializovaného prvku číslo 2 (který je ve skutečnosti automaticky nastaven na nulu).

Výše uvedené příkazy GOTO byly použity pro tvorbu strukturovaných konstrukcí, ale ne vždy tomu tak muselo být – mnohdy se GOTO vyloženě zneužívalo, což byl ostatně jeden z důvodů, proč Dijstra napsal známý a často citovaný článek Go To Statement Considered Harmful, v němž upozorňuje na rizika spočívající v použití „špagetového kódu“. Tento článek časově koresponduje se vznikem Algolu 68 a současně i éry strukturovaného programování. A právě možnost strukturovaného programování je jednou z věcí, která odlišuje dále zmíněný BBC BASIC od mnoha primitivnějších BASICů.

Obrázek 18: Demonstrační příklad zapsaný v Sinclair BASICu. Jednotlivé příkazy nebyly vypisovány znak po znaku, ale použily se klávesové zkratky, které si uživatelé nemuseli pamatovat, neboť je měli natištěné přímo na klávesnici.

9. Vznik programovacího jazyka BBC BASIC

Velmi důležitým dialektem BASICu, který byl velmi úspěšný především v západních zemích (ovšem nikoli v ČSSR, kde panovala, podobně jako v dalších státech RVHP, poněkud specifická situace), je BBC BASIC, jehož původním autorkou je Sophie Wilsonová a mezi další autory, kteří například provedli portaci tohoto programovacího jazyka na jiné platformy, patří i známý Richard Russell, který stále o tomto jazyku udržuje stránky dostupné na adrese http://www.bbcbasic.co.uk/index.html (z této stránky si můžete stáhnout i variantu BBC BASICu doplněnou o podporu knihovny SDL 2 a dostupnou i na Linux. K dispozici je ovšem i čistě terminálová varianta určená opět pro Linux a mnohé další varianty (Windows apod.).

Obrázek 19: Dobový plakát s počítačem Acorn BBC Micro.

Tento dialekt programovacího jazyka BASIC má poměrně zajímavou a taktéž dlouhou historii. Za jeho vznikem a vývojem stála, jak již ostatně název tohoto programovacího jazyka napovídá, britská BBC, která na počátku osmdesátých let minulého století chtěla vytvořit počítač (samozřejmě s nezbytným programovým vybavením), který by byl vhodný pro výuku a který by bylo možné masově rozšířit jak mezi školy, tak i na právě vznikající trh s domácími osmibitovými mikropočítači. Ovšem vzápětí se ukázalo, že samotná BBC nemá prostředky na to, aby sama v rozumném čase navrhla a následně masově vyráběla počítač, jenž byl mohl svými parametry i cenou konkurovat domácím osmibitovým počítačům vyráběným specializovanými firmami, které právě začaly poměrně překotným způsobem vznikat (popř. se jednalo o divize již zavedených technologických firem). Z tohoto důvodu BBC vypsala tendr, z něhož vyšla vítězně firma Acorn Computers z Cambridge. Historie BBC BASICu začala… a nejenom jeho, začala se současně psát i prehistorie mikroprocesorů ARM.

Obrázek 20: Strukturované konstrukce REPEAT a FOR v BBC BASICu.

10. Rozšíření BBC BASICu na další počítačové platformy

Společnost Acorn Computers již v době, kdy tendr vypsaný BBC probíhal, konstruovala svoje počítače nazvané Atom vybavené sice poměrně rychlým, zato však omezeným a nekompatibilním dialektem BASICu, který se ukázal být nepříliš vhodným pro počítač určený mj. i pro výuku (jednou z pozitivních vlastností interpretru tohoto BASICu byla možnost zápisu assembleru spolu s BASICovými programy, která se později objevila i v BBC BASICu). Z tohoto důvodu BBC zpočátku uvažovala o tom, že nakoupí licence na dialekt BASICu nabízený firmou Microsoft, ovšem tento programovací jazyk, přesněji řečeno jeho varianta určená pro osmibitové mikroprocesory, postrádal některé vlastnosti, které byly vyžadovány k tomu, aby bylo možné tento dialekt použít pro potřeby výuky – týkalo se to například nedostupnosti již zmíněných programových konstrukcí umožňujících strukturované programování, taktéž nemožnosti použití dlouhých názvů proměnných (nikoli pouze jedno- či dvouznakových) atd.

Obrázek 21: Úvodní obrazovka BBC BASICu ve verzi pro ZX Spectrum. Tato verze vznikla později než původní dialekt pro počítače Acorn BBC Micro, mj. i z toho důvodu, že nejdříve musel být tento dialekt BASICu portován na mikroprocesory Intel 8080 a Zilog Z80 (a samozřejmě také proto, že ZX Spectrum začalo být prodáváno později než Acorn BBC Micro).

Z těchto důvodů bylo nakonec od myšlenky licencování Microsoft BASICu odstoupeno a pro nově vznikající platformu nazvanou příhodně Acorn BBC Micro byl vytvořen nový programovací jazyk s názvem BBC BASIC, který byl mj. navržen takovým způsobem, aby nebyl závislý na konkrétní počítačové platformě. Původní verze programovacího jazyka BBC BASIC z roku 1981 byla určena pro počítače vybavené slavnými osmibitovými mikroprocesory MOS 6502, ovšem v pozdějších letech došlo k jeho rozšíření i na další mikroprocesory a počítačové platformy, viz též údaje na stránce http://mdfs.net/Software/BBCBasic/.

Poznámka: u BASICu od Microsoftu dříve uvažovala i firma Atari, ovšem ani zde nakonec na realizaci nedošlo. V tomto případě kvůli tomu, že Microsoft nebyl schopen vytvořit BASIC s grafickými a zvukovými příkazy, který by se vlezl do 8 kB ROM, což bylo společností Atari vyžadováno.

Obrázek 22: Osmibitový mikropočítač Acorn BBC Micro.

Ve své době se jednalo o nejrozšířenější multiplatformní dialekt BASICu a současně i o jeden z nejrozšířenějších dialektů nějakého programovacího jazyka vůbec, protože byl portován na minimálně sedm různých mikroprocesorů (kromě původního MOS 6502 i na Intel 8080, Zilog Z80, řadu Motorola M68000, řadu Intel 80×86, ARM atd.) a takřka neuvěřitelných více než 30 různých počítačových platforem, včetně velké části osmibitových mikropočítačů, Amigy, osobních počítačů PC s DOSem a taktéž Microsoft Windows. Původní verze tohoto jazyka byla napsána v assembleru, což samozřejmě znamenalo nutnost přepsání alespoň části interpretru při portaci na nový typ mikroprocesoru, ovšem posléze došlo k přepsání celého interpretru do programovacích jazyků C a C++, což umožnilo provádět portace na nové platformy nepoměrně snadněji než v případě přepisu zdrojových kódů v assembleru (i když tyto zdrojové kódy obsahovaly velké množství maker, takže se samotný zápis interpretru podobal spíše autokódu než assembleru).

Obrázek 23: Programovací jazyk BBC BASIC byl portován dokonce i na osobní počítače PC s nainstalovaným operačním systémem Microsoft Windows.

11. Základní vlastnosti programovacího jazyka BBC BASIC

V předchozí kapitole jsme si řekli, že BBC BASIC byl portován na více než třicet různých počítačových platforem, což svědčí jak o poměrně velké oblibě tohoto programovacího jazyka, tak i o tom, že jeho vlastnosti umožnily tvorbu takových aplikací, které se skutečně vyplatilo používat na různých platformách, tj. především aplikací udržovatelných (v opačném případě by bylo pravděpodobně efektivnější celou aplikaci přepsat). Pojďme si nyní některé vlastnosti BBC BASICu přiblížit. Na rozdíl od některých jednodušších implementací programovacího jazyka BASIC (například se jedná o původní BASIC pro výše zmíněný operační systém DTSS), bylo možné v BBC BASICu tvořit proměnné, jejichž identifikátory neměly (prakticky) omezenou délku, přičemž všechny znaky názvu proměnné měly význam. O této zdánlivé maličkosti se zmiňuji proto, že existovaly dialekty BASICu, kde sice bylo možné používat relativně dlouhé názvy proměnných, ale pouze prvních n znaků (kde n bylo většinou rovno jedné, dvěma, pěti či osmi) bylo skutečně rozeznávaných, takže tyto BASICy například považovaly proměnné nazvané TOTALPROFIT a TOTALLOSS za rovnocenné (zde si můžeme pouze představovat, jakými problémy museli procházet programátoři, kteří portovali aplikace z „vyšší“ verze BASICu do nějaké verze jednodušší; o problémech uživatelů takto portovaných programů nemluvě).

Obrázek 24: Screenshot obrazovky původního BBC BASICu spuštěného v emulátoru počítače Acorn BBC Micro.

Další vlastností BBC BASICu, která se postupem času rozšířila i na některé další dialekty tohoto programovacího jazyka, byla možnost práce s celočíselnými proměnnými, které byly na většině platforem interně ukládány jako 32bitové hodnoty ve dvojkovém doplňku. Celočíselné proměnné se od proměnných reálných (přesněji řečeno od proměnných uložených ve formátu plovoucí řádové čárky) odlišovaly tím, že se za jejich název přidával znak ‚%‘ (procento), což spolu s existencí řetězcových proměnných znamenalo, že identifikátory TEST, TEST% a TEST$ byly považovány za tři odlišné proměnné (dnes bychom pravděpodobně řekli, že celočíselné, reálné a řetězcové proměnné měly oddělené jmenné prostory :-). Pro práci s řetězci byly zvoleny stejně pojmenované funkce, jaké můžeme nalézt v interpretrech MS BASICu – LEFT$, RIGHT$ a MID$ (tyto funkce se však daly použít i na levé straně přiřazovacího příkazu jako omezovače podřetězce, který se měl změnit), navíc bylo možné pro nalezení podřetězce v řetězci použít příkaz INSTR.

Poznámka: mnohé jednodušší BASICy rozlišovaly jen dva typy skalárních hodnot – čísla (interně s plovoucí čárkou) a řetězce. A právě existence jediného číselného typu je v mnoha ohledech velmi problematická.

Obrázek 25: BBC BASIC byl portován i na programovatelné kalkulačky TI-83+/TI-84+ s grafickým displejem. Zde je výsledek běhu programu pro výpočet Mandelbrotovy množiny.

12. Strukturované konstrukce v BBC BASICu

Ovšem největší předností BBC BASICu byla možnost zapisovat programové smyčky s využitím strukturovaných výrazů, nikoli s použitím příkazu GOTO, i když tato možnost zůstala zachována. Spolu s odstraněním nutnosti používat GOTO byla z BBC BASICu odstraněna povinnost číslovat všechny programové řádky. Poněkud paradoxní přitom je, že poslední verze učebnice BBC BASICu (která je mj. dostupná i na Internetu), se o příkazu GOTO a o číslování řádků zmiňuje pouze okrajově, což znamená, že tento příkaz již dávno není zapotřebí ani pro psaní školních ani reálných aplikací. Následující úryvek programu napsaný v BBC BASICu ukazuje typické použití zastaralého příkazu GOTO, ovšem čísla programových řádků jsou zapisována pouze tam, kde je to skutečně zapotřebí – v ukázkovém programu se jedná pouze o jediný řádek představující cíl skoku, pomocí něhož je implementována nekonečná smyčka. Povšimněte si taktéž toho, že příkaz INPUT (čtení dat ze standardního vstupu) může obsahovat zprávu zobrazenou uživateli (což uměly jen některé BASICy):

   REM Cisla radku lze pouzit pouze tam,
   REM kde je to nezbytne nutne kvuli
   REM prikazum GOTO a GOSUB.
   REM --------------------------------
   REM Vypocet plochy kruhu:
20 INPUT "Enter the radius " Radius
   Area=PI*Radius^2
   PRINT "Area of the disk is " ;Area
   GOTO 20
   END

Následující příklad, opět určený pro programovací jazyk BBC BASIC, obsahuje pouze strukturované programové smyčky typu REPEAT-UNTIL s testem provedeným na konci těla smyčky:

REPEAT
    INPUT ' "What number should I stop at", num
    i=0
    REPEAT
        i=i+1
        PRINT i;
    UNTIL i=100 OR i=num
UNTIL num=-1

Obrázek 26: Program (zde s čísly řádků) založený na použití strukturovaných konstrukcí a nikoli na příkazu GOTO, který se v něm ani nevyskytuje.

Další důležitou vlastností BBC BASICu, která umožnila tvorbu i poměrně složitých aplikací, byla možnost deklarace uživatelských procedur a funkcí: BASIC totiž, na rozdíl od céčka či Javy, poměrně striktně rozlišoval mezi procedurou (tj. příkazem spouštěným s parametry, ale nevracejícím žádnou hodnotu) a funkcí vracející vždy nějakou hodnotu, která musela být v programu zpracována (byla vždy součástí výrazu, například výrazu přiřazeného nějaké proměnné či vyčíslovaného v rámci rozhodovací konstrukce IF-THEN). Pomocí procedur a funkcí bylo možné celou aplikaci rozdělit na menší části, které mohly být zpracovány nezávisle na sobě a taktéž nezávisle na sobě testovány. Následuje příklad definice nové uživatelské funkce nazvané FN_Square a použití (zavolání) této funkce z programu. Kromě způsobu definice uživatelské funkce (zejména způsobu výpočtu její návratové hodnoty) si povšimněte, že zdrojový kód tohoto příkladu neobsahuje žádná čísla řádků, na rozdíl od „klasického“ BASICu, kde to bylo striktně vyžadováno:

REM Nova funkce nazvana FN_Square
DEF FN_Square(Num)
=Num^2
 
REM Pouziti funkce FN_Square pri
REM vypoctu druhe mocniny hodnoty
REM promenne A
INPUT "Enter numeric value" A
B=FN_Square(A)
PRINT A;" squared is ";B
END

Obrázek 27: Program pro vyřešení hlavolamu Hanojských věží.

Obrázek 28: Implementace algoritmu pro vyřešení hlavolamu Hanojských věží s několika uživatelsky definovanými procedurami.

13. Kombinace programů psaných v BBC BASICu a assembleru

Mezi další zajímavou (a v tomto případě i poměrně vzácnou a v jiných dialektem BASICu málo viděnou) vlastnost programovacího jazyka BBC BASIC patří možnost kombinace programu zapsaného v BASICu s částmi zapisovanými v assembleru, tj. v nízkoúrovňovém jazyku symbolických instrukcí odpovídajícímu (binárním) strojovým instrukcím použitého mikroprocesoru. Tato pro mnohé programátory důležitá vlastnost byla do BBC BASICu přidána ještě v dobách, kdy byl tento jazyk vyvíjen pro osmibitové mikroprocesory MOS 6502, ovšem později, spolu s poměrně rychlým rozšiřováním BBC BASICu na další platformy, byla přidána i podpora pro symbolické instrukce mikroprocesoru Intel 8080, Zilog Z80 a dalších osmibitových a o několik let později i šestnáctibitových a třicetidvoubitových mikroprocesorů, zejména úspěšných mikroprocesorových řad Intel 80×86 a Motorola M68000 používaných v mnoha osobních počítačích (zapomenout ovšem nesmíme ani na platformu ARM!).

Obrázek 29: Programovatelná grafická kalkulačka TI 83+, na níž byl taktéž portován BBC BASIC (viz výše zmíněný program pro výpočet a zobrazení Mandelbrotovy množiny).

Ve fragmentu programu, který je vypsán pod tímto odstavcem je ukázán způsob současného použití BASICu a assembleru osmibitového mikroprocesoru Zilog Z80. Povšimněte si především použití hranatých závorek pro označení části programu napsaného v assembleru i toho, že v assembleru se poznámky i odkazy pro skoky zapisují odlišným způsobem než v BASICu (v assembleru se používají textová navěští – labely, zatímco v BASICu čísla řádků – v tomto ohledu je assembler vysokoúrovňovějším jazykem než samotný BASIC):

100 DIM code 15        :REM Reserve space for 16 bytes of code
110 bdos=5
120 FOR pass=0 TO 1    :REM Implement 2-pass assembly
130 P%=code            :REM Set program counter at start of each pass
140 [OPT pass*3        ;Enter assembler and select listing on pass 2
150 LD D,95:LD E,ASC"!"
160 .loop              ;A label
170 LD C,2             ;Source statements
180 PUSH DE:CALL bdos:POP DE
190 INC E:DEC D:JR NZ,loop
200 RET:]              :REM Exit assembler
210 NEXT pass
220 CALL code          :REM Execute assembly language routine

pc106

Obrázek 30: Známý algoritmus bublinkového řazení (bubble sort) implementovaný v BASICu. Povšimněte si, jakým způsobem se používá proměnná I, která zde slouží pro úschovu příznaku, že bylo v dané iteraci provedeno prohození alespoň jedné dvojice prvků. V některých interpretrech BASICu lze řádek 210 zjednodušit tím, že se neprovede porovnání hodnoty proměnné I s jedničkou, ale přímo hodnota I se považuje za pravdivostní hodnotu.

14. Programovací jazyk BASIC na platformě IBM PC

Programovací jazyk BASIC, resp. přesněji řečeno jeho různé více či méně dokonalé dialekty, byl portován i na osobní počítače IBM PC. Ostatně originální PC od společnosti IBM bylo standardně vybaveno interpretrem BASICu, který se spustil v případě, že nebyl nalezen boot sektor operačního systému. Vzhledem k tomu, že počítače IBM PC začaly být zákazníkům, především firmám, nabízeny již v roce 1981, tj. v dobách kralování osmibitových domácích mikropočítačů, byly i první modely IBM PC vybaveny, podobně jako naprostá většina osmibitových počítačů, interpretrem programovacího jazyka BASIC uloženého v paměti ROM.

Poznámka: historií vzniku IBM PC, které v srpnu bude taktéž slavit výročí svého vzniku, se budeme věnovat v samostatném článku.

Obrázek 31: Fotografie obrazovky počítače IBM PC se spuštěným interpretrem BASICu, v němž je napsán velmi jednoduchý program.

Na originálním IBM PC byla kapacita ROM rovna 40 kB, přičemž BASIC z této kapacity využíval pouze 8 kB a zbylých 32 kB sloužilo pro uložení BIOSu (v dalších modelech IBM PC se kapacita ROM kvůli podpoře většího množství zařízení zvyšovala, typicky na hodnotu 64 kB). Interpret BASICu uložený v ROM se spouštěl snadno – v případě, že počítač po svém zapnutí nenašel v disketové jednotce disketu s operačním systémem (podpora pro pevné disky byla zavedena až s modelem PC XT v roce 1983), spustil se automaticky interpret BASICu. Dialekt programovacího jazyka BASIC uložený v ROM se sice nazýval IBM Cassette BASIC (i když se na obrazovce ohlašoval nápisem „IBM Personal Computer Basic“), ve skutečnosti se však jednalo o interpret BASICu vytvořený firmou Microsoft, která ho licencovala firmě IBM jako jeden z prvních softwarových produktů pro počítače PC vůbec. Poté následoval operační systém MS-DOS, ale o této poměrně historické události si však řekneme více podrobností v jiném článku. Při převodu BASICu na počítače IBM PC použila firma Microsoft svůj BASIC určený pro operační systém CP/M.

Obrázek 32: Interpret IBM Cassette BASICu spuštěný v emulátoru IBM PC. Při spuštění emulátoru byl použit obraz originálních paměťových modulů (ROM) firmy IBM.

Poznámka: takto se ovšem choval originální BIOS od IBM, nikoli nutně ostatní BIOSy. Ty většinou již BASIC neobsahovaly a v případě nenalezení operačního systému jen lakonicky oznámily „Non-System disk or disk error“.

15. GW BASIC

Zatímco IBM Cassette BASIC byl používán pouze na originálních počítačích IBM PC, další dialekt programovacího jazyka BASIC byl dostupný všem uživatelům, protože měl formu běžné (spustitelné) aplikace určené pro operační systém MS-DOS. Jedná se o GW-BASIC vytvořený opět firmou Microsoft. Vývoj tohoto programovacího jazyka a taktéž standardizaci jeho příkazů napříč několika operačními systémy a platformami vedl Greg Whitten, který do firmy Microsoft nastoupil již v roce 1979 a měl tak velmi nízké číslo zaměstnance (sám uvádí, že pokud si dobře pamatuje, měl číslo 16). Název tohoto programovacího jazyka zvolil sám Bill Gates, přičemž písmena „GW“ oficiálně znamenaly zkratku dvousloví „Gee-Whiz“, pravděpodobně se však původně jednalo o iniciály Grega Whittena. GW-BASIC se stal mezi uživateli počítačů IBM PC (především v dobách PC XT) velmi populární, i když se jednalo o dialekt, který se nijak zvlášť neodlišoval od dialektů BASICu dostupných na osmibitových mikropočítačích – dokonce bylo možné používat pouze jeden segment paměti, tj. 64 kB, i když samotný MS-DOS dokázal obsloužit 640 kB, resp. 1 MB pokud započítáme i oblast BIOSu a grafické paměti.

Obrázek 33: Úvodní obrazovka GW-BASICu po jeho spuštění v emulátoru PC (zde se konkrétně jedná o DOSBOX).

Nicméně tento článek je zaměřen na historická a kulatá výročí, takže rychle pokročme k dalšímu BASICu pro počítače PC – jedná se o známý QBasic!

16. QBasic

Jedním z nejznámějších a pravděpodobně i nejpoužívanějších dialektů programovacího jazyka BASIC na osobních počítačích kompatibilních s IBM PC je bezesporu QBasic firmy Microsoft, která tento BASIC začala dodávat společně s MS DOSem 5.0 a později byl dostupný například i pro operační systémy Windows 95 a jako jedna z přídavných utilit i pro Windows NT. Jedná se, na rozdíl od podobně pojmenovaného QuickBASICu, o interpret BASICu, což znamená, že programy se nepřekládaly do strojového kódu, ale „pouze“ byly prováděny interpretrem, se všemi přednostmi ale i zápory tohoto řešení. Mezi přednosti patřilo především to, že QBasic po svém spuštění prakticky nepotřeboval přistupovat k paměťovému zařízení (disketové jednotce, pevnému disku), což mělo velký význam především tehdy, pokud byl počítač vybaven pomalejším pevným diskem (psala doba PC AT a disků s kapacitami typicky 20 MB, 40 MB a 80 MB, diskovou cache bylo možné zapnout, ale na úkor volné kapacity RAM). Taktéž spuštění či znovuspuštění programu bylo takřka okamžité, protože odpadl čas potřebný pro překlad zdrojového textu do strojového kódu mikroprocesoru.

Obrázek 34: Úvodní zpráva zobrazená po spuštění QBasicu.

Na druhou stranu bylo provádění programů nepoměrně pomalejší než kdyby došlo k jejich překladu před spuštěním, takže se zde opět ukázal klasický rozpor mezi interpretry a překladači. QBasic taktéž programátorům kladl některá omezení, která vyplývala například z toho, že interpret běžel, ostatně jako celý MS DOS, v reálném (popř. virtuálním) režimu mikroprocesoru 80×86, což mj. znamenalo, že operační paměť byla rozdělena na segmenty o velikosti 64 kB. Právě kvůli segmentování paměti byla omezena například velikost polí, maximální délka řetězců ale i celková velikost všech globálních proměnných. Posledním záporem QBasicu byl nedostatečný rozsah základních knihoven dodávaných k tomuto jazyku (například v porovnání s tehdy velmi populárním Turbo Pascalem nebo výše zmíněným GFA BASICem). QBasic nabízel základní operace pro práci se soubory, grafickými režimy dostupnými přes BIOS (ovšem nikoli režimy VESA) a taktéž procedury pro ovládání PC Speakeru (reproduktoru zapojeného na jednobitový výstup obvodu 8253).

Obrázek 35: Ve vývojovém prostředí QBasicu je zabudované i okno s nápovědou.

Poznámka: rozpor mezi interpretry a překladači částečně překlenul Turbo Pascal s překladačem, který byl na dobu vzniku (a použitý hardware) až neskutečně rychlý, čímž se smazala jedna z nevýhod překladače. Z novějších jazyků touto vlastností vyniká zejména jazyk Go.

17. Podpůrné knihovny pro QBasic, aplikace vytvoření v QBasicu

V předchozí kapitole jsme se zmínili o nedostatečně vybavené základní knihovně QBasicu. Prakticky žádné další procedury ani funkce kromě těch zmíněných výše nebyly ve standardní knihovně dostupné, takže se není čemu divit, že se postupně začaly objevovat například sady procedur pro práci s myší, ovládání pamětí EMS a XMS, knihovny pro tvorbu uživatelského rozhraní v textovém režimu podobné Turbo Vision atd. Nicméně QBasic měl kromě svých záporů i mnoho předností. První a možná i nejdůležitější předností tohoto jazyka bylo to, že byl nainstalován prakticky na jakémkoli počítači s MS DOSem 5.0 či některém pozdějším operačním systému firmy Microsoft, včetně již zmíněných Windows NT. To s sebou přinášelo poměrně mnoho výhod, protože bylo možné distribuovat programy přímo ve zdrojovém kódu s poměrně velkou jistotou, že je cíloví uživatelé budou moci spustit (mezitím se na Linuxu úspěšně rozšiřoval Perl a s menší razancí i Python, Tcl atd. ostatně i Linux oslaví třicátiny).

Obrázek 36: Hra Gorily spuštěná pomocí interpretru QBasicu.

Společně s QBasicem bylo dodáváno i několik programů, z nichž nejpopulárnější byly hry Gorillas (jednodušší variace na známé hry Tank Wars či Scorched Earth) a Nibbles (starodávná hra, která byla později zpopularizovaná podobnou hrou určenou pro mobilní telefony Nokia). Právě díky přítomnosti QBasicu na prakticky každém počítači s MS DOSem či Windows bylo možné tyto hry spouštět i na těch počítačích o nichž jejich uživatelé/administrátoři tvrdili, že na nich žádné hry nebyly a nejsou (kanceláře, školy :-)

Obrázek 37: Profesionální alternativou ke QBasicu je či lépe řečeno byl QuickBasic vybavený lepším debuggerem, překladačem atd.

18. Vývojové prostředí QBasicu

Další předností QBasicu bylo jednoduše ovladatelné a velmi snadno použitelné vývojové prostředí (některé chyby byly odhaleny již po přechodu na předchozí či následující textový řádek, programy bylo možné krokovat atd.). Poslední kladnou vlastností QBasicu byla jeho syntaxe a sémantika, která byla již v prakticky všech ohledech odlišná od původních BASICů „staré školy“. To mj. znamenalo, že v QBasicu se programy zapisovaly strukturovaně, tj. bez nutnosti používat čísla řádků a s nimi souvisejícího příkazu GOTO, který však zůstal kvůli zpětné kompatibilitě zachován. Dále byly podporovány funkce a procedury s parametry a lokálními proměnnými (navíc se zdrojové kódy funkcí editovaly odděleně, takže nedošlo k jejich nechtěnému promíchání) a všechny proměnné i parametry mohly mít přidělen datový typ. Výsledné programy se tedy svojí strukturou podobaly spíše programům zapisovaným v Pascalu nežli programům v klasickém BASICu (totéž ostatně platí pro GFA BASIC).

Poznámka: většina dobových „moderních“ BASICů se držela tohoto pojmenování spíše z komerčních důvodů, než kvůli podobě s původním BASICem.

Obrázek 38: Editor s otevřeným programem pro výpočet Mandelbrotovy množiny.

Pro ilustraci způsobu zápisu programů následuje ukázka jednoduché aplikace pro (relativně pomalý) výpočet Mandelbrotovy množiny, která byla odladěna v QBasicu v DOSBOXu (povšimněte si určování typu proměnných s využitím speciálního znaku umístěného za jejich jménem):

SCREEN 13
cy! = -1.5
FOR j% = 0 TO 199
    cx! = -2.5
    FOR i% = 0 TO 319
        iter% = 0
        zx! = 0: zy! = 0
        zx2! = 0: zy2! = 0
        DO
            zx2! = zx! * zx!
            zy2! = zy! * zy!
            zy! = 2! * zx! * zy! + cy!
            zx! = zx2! - zy2! + cx!
            iter% = iter% + 1
        LOOP WHILE iter% < 100 AND zx2! + zy2! < 4!
        PSET (i%, j%), iter%
        cx! = cx! + 4! / 320
    NEXT i%
    cy! = cy! + 3! / 200
NEXT j%
Poznámka: až na některé „podivnosti“ typu parametrů procedury PSET se jedná o relativně dobře čitelný strukturovaný programový kód.

Obrázek 39: Výsledek běhu demonstračního příkladu.

19. Předchozí články o kulatých výročích v oblasti programovacích jazyků

V této kapitole jsou uvedeny odkazy na již vyšlé články, v nichž jsme si připomněli narozeniny některých důležitých (a ve dvou případech i přelomových) programovacích jazyků:

  1. The future's bright… the future's Cobol
    https://www.root.cz/clanky/the-future-s-bright-the-future-s-cobol/
  2. Sedmdesátiny assemblerů: lidsky čitelný strojový kód
    https://www.root.cz/clanky/sed­mdesatiny-assembleru-lidsky-citelny-strojovy-kod/
  3. Šedesátiny převratného programovacího jazyka ALGOL-60
    https://www.root.cz/clanky/sedesatiny-prevratneho-programovaciho-jazyka-algol-60/
  4. Další kulaté výročí v IT: dvacet let existence Pythonu 2
    https://www.root.cz/clanky/dalsi-kulate-vyroci-v-it-dvacet-let-existence-pythonu-2/
  5. Třicet let od vydání revolučního Turbo Pascalu 5.5
    https://www.root.cz/clanky/tricet-let-od-vydani-revolucniho-turbo-pascalu-5–5/

20. Odkazy na Internetu

  1. GWBASIC User's Manual
    http://www.antonis.de/qbe­books/gwbasman/index2.html
  2. GFA-BASIC
    http://sites.google.com/si­te/gfabasic16/
  3. E-mail od tvůrce GW-Basicu
    http://www.classiccmp.org/pi­permail/cctech/2005-April/042999.html
  4. General Electric GE-400
    http://www.feb-patrimoine.com/PROJET/ge400/ge-400.htm
  5. GE-400 Time-sharing information systems:
    http://www.computerhistory­.org/collections/accession/102646147
  6. A brief history of the development of BASIC (pravděpodobně již nefunkční odkaz)
    http://www.phys.uu.nl/~ber­gmann/history.html
  7. History of BASIC (PDF)
    http://www.q7basic.org/His­tory%20of%20BASIC.pdf
  8. Dartmouth College Computation Center. 1964.-The original Dartmouth BASIC manual
    http://www.bitsavers.org/pdf/dar­tmouth/BASIC_Oct64.pdf
  9. The Original BASIC
    http://www.truebasic.com/
  10. BASIC – Beginners All-purpose Symbolic Instruction Code
    http://hopl.murdoch.edu.au­/showlanguage.prx?exp=176
  11. The History of the Mainframe Computer
    http://www.vikingwaters.com/htmlpa­ges/MFHistory.htm
  12. Dartmouth Time Sharing System
    http://en.wikipedia.org/wi­ki/Dartmouth_Time_Sharing_Sys­tem
  13. General Electric (Wikipedia)
    http://en.wikipedia.org/wi­ki/General_Electric
  14. GE 225 vs. IBM 1401
    http://ed-thelen.org/GE225-IBM1401.html
  15. A GE-225 is found
    http://ed-thelen.org/comp-hist/GE225.html
  16. G.E. 200 Series Computers
    http://www.smecc.org/g_e__200_se­ries_computers.htm
  17. DTSS – Dartmouth Time Sharing System
    http://dtss.dartmouth.edu/index.php
  18. John G. Kemeny: BASIC and DTSS: Everyone a Programmer
    http://dtss.dartmouth.edu/e­veryoneaprogrammer.php
  19. GE-200 series (Wikipedia)
    http://en.wikipedia.org/wiki/GE-200_series
  20. GE-400 series (Wikipedia)
    http://en.wikipedia.org/wiki/GE-400_series
  21. GE-600 series (Wikipedia)
    http://en.wikipedia.org/wiki/GE-600_series
  22. ZX Basic Manual
    http://www.worldofspectrum­.org/ZXBasicManual/
  23. ZX81 BASIC Programming
    http://www.worldofspectrum­.org/ZX81BasicProgramming/
  24. Sinclair BASIC History
    http://scratchpad.wikia.com/wi­ki/Sinclair_BASIC_History
  25. Sinclair BASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Sinclair_BASIC
  26. Sinclair BASIC (Wikipedia EN)
    http://en.wikipedia.org/wi­ki/Sinclair_BASIC
  27. Beta BASIC (Wikipedia EN)
    http://en.wikipedia.org/wi­ki/Beta_BASIC
  28. Beta BASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Beta_BASIC
  29. BETA BASIC NEWSLETTER No 8
    http://spectrum128.ru/hel­p/BetaBasicNewsletter8.pdf
  30. R. T. RUSSELL: The home of BBC BASIC
    http://www.rtrussell.co.uk/
  31. R. T. RUSSELL: A History of BBC BASIC
    http://www.cix.co.uk/~rrus­sell/bbcbasic/history.html
  32. SuperBASIC (Wikipedia EN)
    http://en.wikipedia.org/wi­ki/SuperBASIC
  33. SuperBASIC (Wikipedia CZ)
    http://en.wikipedia.org/wi­ki/SuperBASIC
  34. Laser Basic/Laser Compiler
    http://www.sincuser.f9.co­.uk/049/laser.htm
  35. Laser BASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Laser_BASIC
  36. BBC BASIC
    http://www.bbcbasic.co.uk/bbcba­sic.html
  37. BBC BASIC
    http://mdfs.net/Software/BBCBasic/
  38. BBC BASIC (Z80) for the ZX Spectrum
    http://mdfs.net/Software/BBCBa­sic/Spectrum/
  39. BBC BASIC (Wikipedia CZ)
    http://en.wikipedia.org/wi­ki/BBC_BASIC
  40. BeebWiki – 8-bit Acorn Computer Wiky
    http://beebwiki.jonripley­.com/Main_Page
  41. Porovnání osmibitů
    http://porovnani8bitu.spa­ces.live.com/
  42. Rosetta Code – Main Page
    http://rosettacode.org/wiki/Main_Page
  43. Rosetta Code – Category Basic
    http://rosettacode.org/wi­ki/Category:BASIC
  44. QBasicJedi
    http://www.freewebs.com/qbasicjedi/
  45. QBasic/QuickBasic Downloads
    http://www.freewebs.com/qba­sicjedi/qbdownloads.html
  46. QuickBASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/QuickBASIC
  47. QBasic.com
    http://www.qbasic.com/
  48. QBasic (Wikipedia)
    http://cs.wikipedia.org/wiki/QBasic
  49. Dialling with QBASIC
    http://www.mysundial.ca/tsp/qba­sic.html
  50. BASIC (Wikipedia EN)
    http://en.wikipedia.org/wiki/BASIC
  51. BASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wiki/BASIC
  52. Turbo BASIC (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Turbo_BASIC
  53. More BASIC Computer Games
    http://www.atariarchives.or­g/morebasicgames/
  54. How to build an interpreter in Java, Part 1: The BASICs
    http://www.javaworld.com/jw-05–1997/jw-05-indepth.html
  55. Apple I
    http://applemuseum.bott.or­g/sections/computers/a1.html
  56. The Apple 1 history
    http://apple2history.org/his­tory/ah02.html
  57. The Apple 2 history
    http://apple2history.org/his­tory/ah03.html
  58. INTEGER BASIC Reference
    http://www.landsnail.com/a2ref2.htm
  59. APPLESOFT Reference
    http://www.landsnail.com/a2ref.htm
  60. Apple II Programming
    http://home.swbell.net/ru­bywand/csa2pfaq.html
  61. Applesoft Lite: Applesoft BASIC for the Replica-1
    http://cowgod.org/replica1/applesoft/
  62. Simons' BASIC
    http://en.wikipedia.org/wi­ki/Simons'_BASIC
  63. Simon's Basic
    http://www.lemon64.com/?ma­inurl=http%3A//www.lemon64­.com/museum/list.php%3Fli­neoffset%3D54%26genre%3Dma­nualmisc
  64. BASIC
    http://www.c64-wiki.com/index.php/BASIC
  65. C64 Wiki: Simons Basic
    http://www.c64-wiki.de/index.php/Simons_Basic
  66. Simons' Basic (evaluation)
    http://www.atarimagazines­.com/creative/v9n11/60_Si­mons_Basic.php
  67. Bill Gates' Personal Easter Eggs in 8 Bit BASIChttp://www.pagetable.com/?p=43
  68. Kladivo na programy (je tam třeba popsán způsob nahrávání a ochran programů protí kopírování a crackování)
    http://www.grandjihlava.cz/tmp/kla­divo.pdf
  69. Didaktik Gama návod k obsluze
    http://www.grandjihlava.cz/tmp/na­vod.pdf
  70. Můj přítel Didaktik Gama
    http://www.grandjihlava.cz/tmp/pri­teldidaktik.pdf
  71. Tip & trip pro Didaktik
    http://www.grandjihlava.cz/tmp/tip­trikdidaktik.pdf
  72. Muzeum československých mikropočítačů
    http://cs-pocitace.ic.cz/
  73. Popis modulů a aplikací pro IQ-151
    http://cs.felk.cvut.cz/~bily/iq151/
  74. IQ 151
    http://osmi.tarbik.com/cssr/iq151­.html
  75. „Domácí počítače“ nedávné minulosti
    http://www.fi.muni.cz/usr/jku­cera/pv109/xkrejcir.htm
  76. ZPA: IQ-151
    http://www.homecomputer.de/pa­ges/easteurope_cz.html#iq151
  77. Zrození IQ-151
    http://www.iq151.net/index.htm
  78. Stručná historie počítače IQ150/IQ151
    http://www.iq151.net/history.htm
  79. Old Computers – IQ 151
    http://www.old-computers.com/MUSEUM/compu­ter.asp?st=1&c=1045
  80. Wikipedia EN: IQ 151
    http://en.wikipedia.org/wiki/IQ151
  81. Wikipedia CZ: IQ 151
    http://cs.wikipedia.org/wiki/IQ151