dalsie clanky o codovani: mmx sysparm datafile |
Najprv by som zacal porovnanim diem s klasickym filmom. Film je dlhy pas s obrazkami a zvukovou stopou. Toto sa da prirovnat k obrazkom, hudbe a dalsim datam, ktore vyrobia pre demo grafici a hudobnici. Na to, aby ste si mohli film pozriet, potrebuje premietacie zariadenie. A to je prave to, co robi v pocitaci program, premieta nas "film" na monitor a zvukovu kartu. S tym malym rozdielom, ze filmova premietacka dokaze uz len zobrazit hotove obrazky z filmu, kym program moze s obrazkami rozne narabat, modifikovat ich a upravovat, teda z niekolkych obrazkov mozete vytvorit pomocou roznych matematickych funkcii celu sekvenciu obrazkov. Teraz by som sa pokusil zadefinovat pojem "kod" trochu formalnejsie.
Kod je program, teda postupnost instrukcii mikroprocesora. Kod vznika prelozenim
zdrojovych textov pomocou kompilatora. Zdrojovy text vznika tym, ze ho programator
(koder) napise v nejakom textovom editore.
Ak ste predoslemu odstavcu prilis nerozumeli, tak sa Vam to pokusim priblizit
este trochu jednoduchsie. Programator pise akesi texty, ktore vyzeraju nejak
takto:
-------- nahodny utrzok zdrojoveho textu --------- pic1 = LoadJpeg("1.jpg"); for ( x = 0; xsizex*pic1->sizey; x++ ) { pic1->picdata[x] = DodgeColor(pic1->picdata[x]); } -------- nemyslite si, ze takyto kus kodu najdete v nasich demach :) ---------
Nase posledne demo WHY si vyziadalo okolo 402 kB zdrojovych textov, co bolo
cca. 14000 riadkov. (cize cca. 3500 krat viac, nez ma ta vymyslena ukazka)
Tieto texty su potom pomocou kompilatorov prelozene na instrukcie mikroprocesora.
Kompilatory su napriklad Microsoft Visual C++, Watcom C++, NASM, TASM, Turbo
Pascal, GCC, DJGPP, atd...
Instrukcie mikroprocesora su vlastne tie prikazy, ktore napisal programator
v zdrojovom texte, ale prelozene do reci pocitaca, pretoze keby mal kazdy prikaz
prekladat zo zdrojoveho textu az pred jeho vykonanim, tak by to spomalovalo
beh programu (a nepotrebovali by ste potom kompilator, ale interpreter), co
je riesenie, ktore sa pri demach nezvykne pouzivat.
Este najnovsie sa vela rozprava o jazyku Java. Programy v Jave sa kompiluju
do tzv. Java bytecodes, co su sice tiez instrukcie, ale nie instrukcie procesorov
typu Pentium. A teda ked si pustite nejaku Java aplikaciu na vasom PC, tak to,
ze aplikacia funguje aj na PC zabezpecuje interpreter tychto Java instrukcii.
(iba principialne, prakticky existuju pre PC takzvane Java JIT (Just In Time)
kompilatory, ktore prelozia Java instrukcie do instrukcii PC procesora). Inymi
slovami, z pohladu spustania programu je Java pekny hybrid toho, co je vyssie
spominane, ale z pohladu programatora je to programovaci jazyk, ako kazdy iny,
jednoducho napisete zdrojovy text, a nechate nejaky Java compilator, nech sa
postara o zvysok.
Takze pocitac vlastne vykonava prikazy, ktore mu napise programator.
A ako to suvisi s demami, grafikou, hudbou, atd... ?
Vsetka grafika, hudba, 3D modely a texty su len data. Pocitac vlastne s nimi
nedokaze nic robit. Ak si chcete taketo data prezriet, resp. vypocut, tak tu
prichadza k slovu program, ktore tieto data nacita, spracuje a posle grafickej,
alebo zvukovej karte. Teda demo sa bez programu urobit neda. Pokial mate kresliaci
program, ktory vam ponukne vytvorenie EXE suboru s obrazkom, a myslite si, ze
tym padom sa vam podarilo zobrazit obrazok bez programu, tak ste na omyle. Totiz
ten EXE subor obsahuje okrem vasho obrazku aj vopred pripraveny program, ktory
obrazok vykresli. Je sice pravda, ze ste ho nemuseli programovat, ale je tam,
a nezbavite sa ho.
Naopak demo bez grafiky a hudby sa urobit DA. Mozete napriklad na obrazovku
kreslit nahodne farebne bodky, alebo ratat obrazky pomocou roznych matematickych
funkcii.
Pokial sa teda rozhodnete robit dema, tak budete najskor potrebovat nejakeho
programatora, alebo sa budete musiet naucit programovat. Programovanie ma velmi
vela spolocneho s matematikou, a teda pokial nie ste kamarati s matematikou,
tak vam neodporucam si s programovanim nieco zacinat. A pokial sa rozhodnete
sa programovaniu venovat, tak ratajte s tym, ze na 95% vas to pohlti ako droga,
a programovanie si vyzaduje velmi vela casu, takze je mozne, ze skoncite prave
tak, ako mi - ludia, ktori sedia za pocitacom 12 - 16 hodin denne, a na ktorych
si ostatny ukazuju tukajuc si prstom na celo. Toto sialenstvo sa vola PROGRAMATOR
a lieci sa len velmi problematicky. Pokial Vas zaujem o programovanie trva aj
napriek predoslemu varovaniu, tak by ste sa mali najskor poobzerat po nejakych
informaciach ohladom architektury a principu fungovania pocitacov, dalej co
je to pamet, ako sa v pocitaci ukladaju rozne udaje, ako obrazky a zvuky, (jednoducha
odpoved znie "ako cisla", ale kolko tych cisel je, a co znamenaju
je niekedy tiez dolezite), a potom si budete musiet zvolit programovaci jazyk,
v ktorom sa budete ucit programovat.
Osobne z vlastnej skusenosti by som Vam odporucal zacat s programovacim jazykom
LOGO, ktory ma len zopar prikazov a je naozaj jednoduchy. Ked na nejakom takomto
jednoduchom programovacom jazyku pochopite, co su to funkcie, parametre, premenne,
vstupy a vystupy, co je to algoritmizacia problemu, a naucite sa pouzivat niektore
standartne algoritmy a casti programov, ako napriklad rekurzia, cykly, atd.,
tak potom vam odporucam prejst na programovaci jazyk C++, alebo Javu.
C++ je v dnesnej dobe naozaj standart, a kompilator pre C++ existuje takmer pre kazdy mikroprocesor. Java by sa mala v buducnosti stat velmi silnym nastrojom, pretoze programy v Jave by mali byt spustitelne na roznych typoch pocitacov bez toho, aby ste museli mat specialnu verziu programu pre dany typ pocitaca, ale ja osobne zatial Jave prilis nedoverujem, rozhodne este potrebuje nejaky ten cas, kym bude naozaj standartizovana, a kym program v Jave bude fungovat naozaj takmer vsade.
Este kde tu asi narazite na pojem Assembler. Assembler je subor znakovych ekvivalentov pre samotne instrukcie procesora. Cize je to vlastne nativny programovaci jazyk daneho procesora a preto sa lisi pre kazdy procesor (iny assembler je pre Pentium, iny pre PowerPC, iny pre SGI, Alphu, Sun, atd... takisto jednotlive modely Intelovskej rady 80x86 (386,486,Pentium,...) maju rovnaku len zakladnu sadu instrukcii a s kazdym novym typom je tato instrukcna sada rozsirovana o nove instrukcie (preto program vyuzivajuci specialne instrukcie procesora Pentium sa neda spustit na pocitaci s procesorom 486). Preto ucit sa programovat v assembleri je vacsinou strata casu, pokial neviete presne, ze CO a AKO sa ucit. Na druhej strane skuseny programator v assembleri dokaze vacsinou napisat uspornejsi a rychlejsi kod, ako ten, ktory vygeneruju kompilatory takzvanych vyssich jazykov (ako C++ a pod.). Ale kompilatory vyssich jazykov su coraz dokonalejsie a rozdiel v rychlosti medzi programom napisanym v assembleri a vyssom jazyku sa rapidne zmensuje. Kym koncom 80tych rokov boli programy v assembleri zvycajne 1.5 az 20 krat rychlejsie, nez ich ekvivalenty vo vyssich jazykoch, tak v dnesnej dobe dokazu kompilatory produkovat kod na urovni priemerneho programatora v assembleri, a len skutocny znalci procesora a experti na optimalizaciu dokazu v niektorych specialnych pripadoch dosiahnut aj dvojnasobne zrychlenie pomocou assembleru, ale v priemere su rozdiely 5 - 10% v rychlosti, teda vacsinou zanedbatelne.
Napriek tomu osobne programujem radsej v assembleri, nez vo vyssich programovacich jazykoch, pretoze mi pripada jasnejsi a krajsi, ale takyto nazor ma len velmi malo ludi, takze si radsej zistite sami, ze co vam viac vyhovuje.
Dufam, ze je Vam aspon trochu jasnejsie, ze kto je to programator, a co to
znamena, ze programuje.
Ped / 7Gods demo group