Skoda ze do 8mibitu nedavali FORTH. Myslim ze by se tam pohodlne vesel, a velky Bill by tak ziskal lepsi programatorske navyky a vytvory te jeho firmy pak mohly taky vypadat jinak. Nebo by se treba vubec neprosadil, kdyby zjistil ze neni schopen vytvorit interpret MS-FORTHu.
Jinak by me v dalsim dile spis nez srovnani drobnych rozdilu mezi BASICy 8mibitu zajimalo jak to bylo s temi maticemi (jestli se tim mysli jen 2D pole nebo opravdova prace s matice (nasobeni, determinanty, atd.)).
Nebo jeste by bylo zajime zminit se o BBC basicu (Acorn). V nem totiz Sophie (tehdy spise Roger) Wilson napsal(a) simulator tehdy jeste neexistujiciho procesoru ARM a vyvojove prostredi pomoci ktereho byl tento chip vyvinut.
BASIC vs. Forth – naprosto souhlasim. Je to skoda.
Muzete to brat jako dalsi prohranou bitvu ve svate valce Turingistu s Lambdisty, podobne jako byla bitva FORTRAN vs. Lisp, C++ vs. Common Lisp nebo nejnoveji Python vs. Haskell (co ja vim, v dnesnim postmodernim svete nikdo nevi, na ci je vlastne strane).
Podle me, masy (vcetne me, mimochodem) zkratka chteji programovat imperativne (nerikam, ze to ve Forthu nejde, ale je to asi neprehlednejsi).
To je pravda, taky jsem nad tim premyslel. Prostredi Forthu se da nacpat do nejakych 2 kB a s troskou vice funkci (slov) do 4 kB, takze tady by problem asi nebyl a navic novi programatori jsou vlastne „pole neorana“ takze by mozna RPN prekousli :-)
Rozdily mezi BASICu urcite zminim, protoze byly docela zajimave a v nekterych pripadech se programator pri prepisu BASICoveho programu z jednoho pocitace na jiny docela zapotil. Napriklad prikaz CLEAR nekde mazal obrazovku, nekde inicializoval promenne atd. (a to vubec nemluvim o POKE a PEEK, ale tam je jasne, ze prenositelne nejsou).
Matice skutecne byly podporovany, napriklad nektere BASICy pro ne mely pretizene operatory + atd. Viz napriklad (kdyz mam vybirat z prirucek dostupnych online, ty starsi jsem na netu bohuzel nenasel):
http://docs.hp.com/cgi-bin/doc3k/B3271590001.10189/116
Jen malá technická poznámka, nepíše se „8mibitů“, ale „8bitů“. Stejně jako neexistují například žádné 16-ti bity, 16ti bity, 16tibity, ale pouze a jedině 16bity.
A než mi někdo vynadá, že tu nejsme kvůli češtině, tak by se měl nejprve zamyslet nad tím, že právě ajťáci by měli mít cit pro správnou syntaxi, protože jinak je čeká syntax error… ;-)
Ty hry které MS dodával s Quick Basicem (pamatuji ještě v starém dobrém MS DOSU ) byly tuším tři. Jednou byla zmiňována Gorila, pak Nibbles a tu třetí si už nepamatuji. Já jsem hrával právě Nibbles :)
Mimochodem, vzpomínám si, že v té době jsem někde ( asi na netu) splašil jednoduchý ale hratelný šachy v Basicu. Kolik to mělo elo netuším (já konec konců nejsem žádný Kasparov), ale docela jsem se s tím vyřádil. :-)
Ono s Basicem se daly dělat kouzla, že by dnešní lidé odkojení C/C++, Pythonem, PHP a pod nevěřily. Svého času vycházela v jedné řadě Amaterského rádia zelená příloha, kde se daly najít nejrůznější příklady zajímavých programů, stejně tak v ABC nebo VTM občas i v Téčku… :) Blbý bylo jen, že pokaždé to bylo psáno v jiné verzi Basicu, tak si to člověk musel přepsat – což byl občas docela hlavolam. Občas, když už nevím co roupama tak jen tak pro zábzvu skouším některé ty programy přepsat do C :-D
Já jsem neřekl, že ne (konec konců já přecházel z Basicu rovnou na C a vzápětí na C++, se kterým dělám už dobrých deset let. A na Basic jsem nezanevřel doteď – v Gambasu například testuji prototypy funkcí a pod… ), ale že v porovnání na tehdejší možnosti a zároveň jednoduchost jazyka Basic a hardware, se s ním daly dělat dnes težko uvěřitelné věci… ;)
To zcela jiste ano, ale to porovnavate dva zcela rozdilne jazyky. Jeden, ktery se vleze spolu s interpretrem, zakladnimi knihovnami a vlastne i debuggerem (viz napriklad prikaz TRON) do cca 8 kB ROM nebo RAM, kdezto obludny C++ si mnohdy nevystaci ani s 8 MB a nektere nejmenovane jazyky jdou jeste o rad-dva vyse ve svych narocich. Cecka (asi ne C++) sice pro osmibity existuji, ale ten klasicky postup EDIT-COMPILE-RUN je bez disku velmi neefektivni.
Druha vec je preklad BASICu do bajtkodu (tokenizace) – ten je obecne mensi nez prelozeny strojak, takze pro stroje s malo RAM se BASIC skutecne hodi (nebo take zminovany FORTH, ktery ma v bajtkodu pouze adresy instrukci, nikoli samotne instrukce a navic implicitni adresovani operandu).
Součástí MS-DOSu 5 byly celkem čtyři demonstrační programy pro QBasic, z toho dvě hry – GORILLA.BAS a NIBBLES.BAS. Další byl jednoduchý peněžní deník MONEY.BAS a nakonec program na odstranění přebytečných čísel řádků ze starších GW-Basicových programů REMLINE.BAS. Zdrojáky všech čtyř (prý je M$ uvolnil jako open source :-D) se dají najít třeba na téhle stránce, dokonce jsem při googlení narazil na IBM verzi GORILLAS.
Autorem těch Goril je údajně Bill Gates osobně, hádám že to asi bude jeden z posledních programů které napsal na sklonku své programátorské kariéry, prý poslední program na jehož vývoji se aktivně podílel, byl GW-Basic… Gorily byly docela zábavné, ale ještě úchvatnější je Gatesova ukázková hra z MS-DOSu verze 1 DONKEY.BAS, která byla součástí demoprogramů pro tehdejší žhavou novinku IBM-PC. Tady je k vidění, má tam i několik dalších prográmků z té diskety (jednostranná 160 KB – obsahovala kompletní MS-DOS 1 a dvanáct basicových „bonusů“), třeba MUSIC.BAS.
Basic by se asi mel spis porovnavat s Pythonem, nez s C. Napr. tento program v Basicu:
10 INPUT A 20 INPUT B 30 IF A>B THEN A=A-B:GOTO 30 40 IF A<B THEN B=B-A:GOTO 40 50 IF A<>B THEN 30 60 PRINT A,B
Vypada v Pythonu takto:
a = int(raw_input()) b = int(raw_input()) while a != b: while a > b: a -= b while b > a: b -= a print a, b
Cili stejny pocet radek.
Na jednu stranu mate samozrejme pravdu, Python je citelnejsi i kratsi nez C, ale ja jsem se moc nechtel poustet do porovnani jazyku mezi jejichz vznikem lezi 27 let pomerne intenzivniho vyvoje IT.
Mimochodem je zajimave se podivat na konstrukce dostupne v nekterych BASICech o nichz se letmo zminuji v clanku, ktere se pouzivaji pro pristup k polim nebo podretezcum:
A$(3 to 5)
A$(3 to) – bez horni meze
A$(to 5) – bez spodni meze
coz se (nejenom) v Pythonu taky docela casto pouziva.
A teď by to ještě chtělo interpretr, nebo kompiler Pythonu pro osmibity. Hlásí se někdo? :-)
Jen provokace, prakticky by to asi nikdo nepoužil, protože ačkoli máme i pro Sinclaira několik kompilerů C (minimálně HiSoft C přímo běžící na ZX Spectru, nebo SDCC jako cross compiler), tak stejnak většina dosud tvořících lidí píše v assembleru. To je jediný a nejlepší způsob, jak mít celý počítač zcela pod kontrolou. A se sadou už existujících „knihoven“ to je i docela pohodlné. Prakticky jediná nevýhoda je, že se chybný program občas zhroutí, přepíše celou paměť, nebo dělá jiné nepředvídatelnosti.
cecko na Speccym mate, takze mozna by sel ohnout „tinypy“:
http://www.tinypy.org
Pokud maji na 32bitove platforme 64kilobajtovou binarku, tak by se to mohlo na osmibitove Z80 trosku zkratit :-)
Ale asi mate pravdu v tom, ze dnesni majitele ZX Specter jsou kovani assembleriste.
Ono je to tím, že to C není moc použitelné.
Konkrétně na ZX má nepohodlný editor, navíc překlad z kazety je na nic, bez disku to nejde a vzhledem k přehršli nekompatibilních diskových systémů na ZX je to prostě zabité (HiSoft C existuje ve verzi pro Betadisk, rozšířený v Rusku – a není bez zajímavosti, že zrovna mailový klient ZED pro Betadisk byl psán právě v tomto C).
Dále neumí typ real, ale jen integer, a základní knihovny jsou dost chudé.
Na druhou stranu, počítače, kde je dostupný buď slušný kompilátor (Deep Blue C na Atari) nebo dokonce crosscompiler, mají programů v C docela hodně (CC65 pro 6502 – vzniká v něm dost programů pro Atari, na C64 dokonce Contiki a programy využívající TCP/IP knihovny Contiki jasou všechny psány v tomto C, a port Contiki na Apple II).
Kdysi jsem na zakladni skole v basicu napsal dve hry. Obe byly velmi jednoduche. V prvni hre jste ovladali Ninju, ktery uhybal leticim predmetum, museli jste skakat nebo se sehnout. Nic tezkeho. V druhe hre jste jeli s autickem, pohled seshora, a vyhybali se stromum a dalsim prekazkam. Taky nic sloziteho. Na to, ze mi tehdy bylo asi 11 let, tak to nebylo spatne :-)
JJ, takhle začínali skoro všichni. Někteří pak pokračovali assemblerem.
Zajímavé je, že stroják se mi z počátku zdál být čímsi nedostupným, tajemným. Už proto, že bez dalších nástrojů nebylo snadné zobrazit obsah paměti, nebo přeložit assembler. Dobrých příruček taky nebylo mnoho, jedna z nejlepších je jednoznačně Assembler a ZX Spectrum. Jednak skvěle napsaná, druhak velmi dobře použitelná spolu s kompilerem Prometheus a zatřetí 1. díl je sázený přímo na ZX Spectru v programu Desktop, podobně jako několik malých manuálů od Proximy. Důkaz že to je možné.
Ta bariéra nebyla zas tak velká, ale byla tam a chtělo to prostě trochu snahy. Po překonání se otevřely možnosti netušené :-).
BASIC vedel byt velmi elegantny;-)
dve hry pre ATARI Basic, ovladane joystickom ktore sme spachali
GAME 01: -=- ULTRA RIVER RUN -=- 0 GR.0:POKE 752,1:H=3 1 POS.X,23:?"I I",E:X=X-RND(0)*(X>1)+RND(0)*(X<26):LOC.H,4,A:? "<-O": E=E+1:W=STICK(0):H=H-(W=7)+(W=11) 2 on A-31 goto 1
GAME 02: -=- ULTRA ASTEROID FIELD -=- 0 GR.0:POKE 752,1:POKE 710,0 1 LOC.X,4,A:?"<-V":W=STICK(0):E=E+1:X=X+(W=7)*(X<38)-(W=11)*(X>0): POS.RND(0)*38,23:? E:ON A-31 GOTO 1
pri zapisovani treba
"<-" v "<-V" alebo "<-O"
nahradit sekvenciou ESC,CTRL+lava sipka
tu prvni hru jsem nekde videl, dokoncer zkracenou o jeden radek :-) 1+2 jde napsat na jeden radek, Atari BASIC ma limit 120 znaku a zadny IF tam take neni (resp. je schovany ve vyrazech x>1 a x<26 :-)
To mi pripomelo, ze v minulosti existovala soutez (v zahranici) na tvorbu petiradkovych programu v Atari BASICu a vychazely tam hodne zajimave veci. Zkusim ty programky nekde dohledat.
A co takhle jednořádkové hry pro ZX Spectrum? Ale tam byl programátor proti Atari trochu ve výhodě, protože hodnota udávající délku řádku na Spectru byla dvoubajtová… ;-)
na http://www.pagetable.com/?p=46 je krasne spracovany vyvoj a porovnanie jednotlivych verzii MS BASICu pre rozne pocitace zalozene na 6502
Pekne, diky za odkaz! Skoda jen, ze tam maji uvedene jen MS Basicy, ktere zrovna na 6502 nebyly moc dobre naprogramovane, protoze aby se MS vlezl do 8 kB ROM, tak treba BASIC musel ocesat o grafiku a zvuky. Byly i lepsi interpretry, asi se o historii MS Basicu (proc ho napriklad nekoupili pro Atarka) zminim priste.
Na ZX Spectre som používal na svoje hotové BASIC programy HiSoft BASIC Compiler, ktorý k môjmu úžasu naozaj dokázal skompilovať BASIC do strojového kódu. A ako tak pozerám na tento dokument čo som teraz našiel, nie je mi jasné, ako som sa s tým vtedy vôbec naučil pracovať, bez manuálu? Asi mi to niekto stručne vysvetlil v rukou napísanom liste. Celkovo niekedy nechápem, čo som kedysi dávno dokázal, teraz oproti tomu robím hov… nič. ;-)
http://hayne.net/Spectrum/HiSoftBASIC/manual.html
A z BASICov stál za zmienku napríklad Sigma Basic a hlavne Beta Basic, tam už nebolo nutné v celoobrazovkovom editore ani číslovanie riadkov. Ale aj tak som ich nepoužíval, keďže čo robiť s programom ktorý sa nedá len tak šíriť.
Kompilátor od HiSoftu byl super, protože byl první, který skutečně fungoval a zvládl přeložit i složitější programy. Jaké bylo tehdy mé zklamání, že zkompilovaný program na kreslení grafů funkcí 2 proměnných je skoro stejně pomalý jako ten interpretovaný, protože na FP aritmetiku (a „eval“) to moc nepomohlo ;-)
Asi se jednalo o aplikaci ve stylu: zadej funkci a ja ti vykreslim jeji graf. S podporou evalu je to program na 10 radku, bez nej se pod 200 radku tezko dostanete (parsing, kontrola spatnych vstupu, vlastni rekurzivni vyhodnocovani ci prevadeni na zasobnikovy kod atd.)
Me spis naopak dnesni aplikace prijdou jako hodne neohrabane, treba se ptaji na nejake cislo a ja tam nemuzu zadat jednoduchy vyraz (dejme tomu soucet tri cisel, vypocet ceny s DPH apod.), takze se to musi resit zdlouhave pres clipboard :-)
Já si myslím,že jeden z hlavních důvodů proč na 8-mi bitech byl BASIC a v ROM je ten, že šel díky svým vlastnostem ( překlad po řádcích, okamžité vykonání řádku zapsaného bez úvodního čísla ) snadno použít jako operační systém. Basic se doplnil příkazy o práci s páskou ( disky ), práci s pamětí, příkazy pro spouštění programu atd. a bylo hotovo. Pak ani nebyl potřeba žádný „monitor“ i když ho některé 8-mi bity měly, hlavně ty co BASIC v ROM neměly.
… takze se nerozlisoval dejme tomu tisk na obrazovku, na tiskarnu nebo do souboru. …
Jak kde. Sinclair BASIC má tzv. kanály. Tj. jakési virtuální zařízení na které lze poslat proud dat, nebo naopak data přijímat. Obrazovce je vyhrazen kanál 1 a 2. Tiskárně pak 3, ostatní (max 8? teď nevím) jsou volně použitelné uživatelům. Např. ovladač plotru Aritma – program MZXR, přes kanál 3 tiskne výpis BASICu, ale skrz kanál 7 je ovladatelný sadou příkazů, které se podobají HPGL, resp. lze konfigurovat parametry i pro tisk přes kanál 3.
Stejně tak můj PCL ovladač pro DeskJety tiskne přes kanál 3, takže lze pak obsah diskety vytisknout příkazem !LIST #3 a pod…
Kanály se používaly i k čtení/ukládání dat z/do velmi velkých souborů na MDOSu (a nejspíš i jinde, ale TRDOS má omezení na 64k – 256 bytů). Není problém vytvořit soubor několik set kB dlouhý (snad dokonce do kapacity diskety? – používal jsem velmi dávno). Mohlo to dokonce posloužit jako velmi primitivní náhrada unixové trubky a předávat tak data mezi několika utilitkami.
Myšlenka skvělá, bohužel v ROM se něco nepovedlo a tak s tím byly někde problémy – nepamatuji si jaké. Mnoho let používám ROM (15+), která toto má opravené.
Tišnovský to myslel asi tak, že pokud provedu OPEN #3,„s“, tak mi PRINT #3 místo na tiskárnu půjde na obrazovku, a programuje to jedno, pokud mám Interface 1 a otevřu si OPEN #3,„b“ sériák nebo OPEN #3,„n“;5, tak „tisknu“ na sériák nebo po síti (na stanici č. 5)… a programu je to furt jedno.
Což je v souladu s tím, co jsi napsal ty.
Což mne přivádí na trochu šílenou myšlenku – dalo by se ZX Spectrum (resp. jeho BASIC) ovládat vzdáleně po síti?
Zatím jsem nezkoušel, ale čistě teoreticky – kdybych přesměroval kanály 0,1,2 (tj. klávesnici a obrazovku) a proud dat přijímal/posílal přes SIF s ConnectOne ethernet modulem … teoreticky by se mohlo povést (možná s nějakými modifikacemi ROM a konverzí řídících znaků) ovládat Sinclair BASIC přes Telnet z Linuxu (nebo z jiného Sinclaira).
ConnecOne modul na SIFu už mám zprovozněný a začínám experimentovat, ale zatím jsou jiné priority … uvidíme.
Ano, BASIC sloužil k podobnému účelu, jako nyní slouží např. BASH.
Přinejmenším majoritní diskové (disketové, HDD) systémy na Sinclairech vždy s BASICem nějak interagují. Buď ho rozšíří o vlastní podmnožinu příkazů (MDOS, TRDOS i když kostrbatěji), nebo alespoň nahrazují funkčnost původních (TAP emulace Fatware, Demfir, ESX DOS), nebo obojí (BSDOS). Některé systémy měly dost šílenou syntaxi (Interface 1 + Microdrive). Pro TRDOS existuje specielně upravený BASIC (ISOROM), který komplikovanou syntaxi radikálně zjednodušuje (stará verze totéž údajně umožňovala s Interface 1).
Prostě BASIC je na osmibitech skutečně všestranný a na Sinclairech, tím, že je všude stejný (nebo alespoň z pohledu softwaru stejně funkční), tak značně usnadňuje start softwaru, který je nějak vázaný na konkrétní hardware. Případně portování softwaru na jiný diskový systém, nepracuje-li se soubory jinak než v BASICu (hry se obvykle načtou a spustí, tam to bývá snadné, u všelijakých editorů naopak někdy značně obtížné).
Na Atarku to fungovalo takto:
otevreni zarizeni:
10 OPEN #2,8,0:„Dl:TEST.TXT“
tj.udava se cislo kanalu (nektera jsou rezerovana aneb neni dobry napad si napriklad zavrit klavesnici ci znakovy vystup), potom cislo prikazu (read, write, append), cislo podprikazu a nakonec vlastni zarizeni + u nektery jmeno souboru. Potom se vsude pouzivalo cislo kanalu, napriklad:
20 PRINT #2, „hello“
popr. pro praci s jednotlivymi bajty GET a PUT a nakonec CLOSE. Celkem prehledne reseni rekl bych, s vyuzitim pouhych sedmi(?) prikazu je vyreseno cele I/O, zadne silene iostreamy :-)
U obrázku 9 je napsáno „autoři v celém manuálu používají pro znak O (velké písmeno ó) znak 0, a pro číslici 0 naopak znak O“
Já bych řekl, že měli jen takový font. Čili nulu vyjadřují normálně nulou a písmeno O písmenem O, jen v té tobě ještě nebylo ustáleno, který z těchto dvou znaků bude přeškrtnutý. Tak nějak jsem to kdysi četl a tady konečně vidím přeškrtnuté písmeno O v praxi.
K tomuhle jsem se kdysi v jedné knížce dočetl vysvětlení, že se to přeškrtnuté O používalo kvůli severským státům. Ale moc věrohodné mi to nepřipadá, sám jsem vždycky dával přednost škrtání nuly, ručně jí tak píšu dodnes :-D
Ještě si pamatuji příručky k BASICu, kde bylo na první stránce zdůrazněno, že počítače přísně rozlišují 0 a O, a místo jedničky se v žádném případě nesmí psát malé l, jak to bylo zvykem na psacích strojích!