Porovnanie s vyššími programovacími jazykmi

Už som spomenul aj v predchádzajúcich častiach analýzy určité porovnania týchto dvoch tried programovacích jazykov, teraz toto porovnanie skompletizujem a popíšem výhody a nevýhody oboch tried. Na základe porovnania vyvodím aj záver, ktorý bude spočívať hlavne v tom, kedy siahnuť po VPJ a kedy skôr po SOJ.

Prehľadnosť kódu

Jazyky symbolických adries
JSA pracujú priamo s inštrukciami procesorov. Vo všeobecnosti sú tieto inštrukcie veľmi jednoduché a keď chceme naimplementovať zložitejšiu operáciu napríklad kopírovanie reťazcov, musíme ju naimplementovať ako postupnosť mnohých jednoduchých inštrukcií.
Vyššie programovacie jazyky
VPJ majú integrované knižnice, v ktorých sú už dopredu napísané podobné procedúry. Napríklad v jazyku C by nám stačila jednoduchá funkcia strcpy(), ktorá sa nachádza v hlavičkovom súbore string.h a problém by sme naimplementovali inštrukciou na 1 riadok. Funkcie majú väčšinou výstižný názov a kód je veľmi dobre čitateľný aj pre lajika.
Zaujímavosť
Tento problém s neprehľadnosťou a dĺžkou kódu sa pokúsili vyriešiť výrobcovia procesorov. Vymysleli CISC architektúru procesorov s veľmi obsiahlou inštrukčnou sadou. To znamená, že tie zložité funkcie, ktoré majú VPJ napísané v knižniciach boli priamo integrované do mikroprocesorov a priamo spustiteľné aj v JSA. Od tejto idey sa ale upustilo, pretože sa veľmi zvyšovali nároky na procesor, išlo to aj na úkor efektivity programov, pretože kvôli veľkým inštrukčným sadám bolo menej dostupných registrov.

Víťaz: Vyššie programovacie jazyky

Zložitosť syntaxe

Jazyky symbolických adries (JSA)
JSA väčšinou pracujú len s malým množstvom základných inštrukcií, ktoré vhodne kombinujú. Kódy sú síce dlhé ale naučenie syntaxe je veľmi jednoduché, pretože inštrukcií je málo a ich formát je pomerne jednotný.
Vyššie programovacie jazyky (VPJ)
Ako som spomenul vyššie, VPJ spolupracujú s knižničnými funkciami, ktorých je veľmi veľa. Okrem toho sa používajú aj pokročilé konštrukcie ako cykly, podmienky atď.. Keď sa to zráta dokopy, je takmer nemožné sa do detailov naučiť syntax VPJ a často krát si musíme pomáhať manuálmi.
Zaujímavosť
Určité prvky syntaxe VPJ začali postupne preberať aj JSA. Vznikali totiž assemblery vyššej úrovne, ktoré umožňovali preklad napríklad zložitejších štruktúr typu IF, FOR, WHILE atď...

 

Víťaz: Jazyky symbolických adries

Rýchlosť vykonania programu

Jazyky symbolických adries (JSA)
Keďže strojový kód je vlastne len presnou interpretáciou toho, čo napíše programátor v JSA, je predpoklad, že tento kód môže byť tak dobre napísaný, že pobeží až 20x rýchlejšie ako pri VPJ, v extrémnych prípadoch až 100x.
Vyššie programovacie jazyky (VPJ)
Za strojový kód, ktorý vykoná procesor je zodpovedný kompilátor. Kompilátor je len softvér a aj keď preloží program, takmer s určitosťou môžeme povedať, že by vzniknutý strojový kód mohol byť napísaný lepšie. Môžeme si to predstaviť ako bežný prekladač medzi jazykmi, slová sa síce preložia správne ale vety majú často divnú štruktúru.

Víťaz: Jazyky symbolických adries

Rýchlosť napísania programu

Jazyky symbolických adries (JSA)
Tu sa jasne ukazuje nevýhoda toho, že JSA používajú len zopár inštrukcií procesorov, nemajú k dispozícií žiadne knižničné funkcie a kódy sú dlhé a časovo náročné na implementáciu.
Vyššie programovacie jazyky (VPJ)
Aj napriek tomu, že existencia množstva knižničných funkcií pri VPJ, sťažuje naučenie sa syntaxe, bohate to vynahradzuje tým ako uľahčuje programovanie. Kódy sú kratšie a oveľa menej časovo náročné na implementáciu ako JSA.

Víťaz: Vyššie programovacie jazyky

Efektivita

Jazyky symbolických adries (JSA)
Efektivita súvisí s rýchlosťou vykonania programu. Okrem toho ale závisí aj od toho ako sa využíva pamäť. Na efektivitu vplýva aj to, koľko pamäte sa využije pri prekladaní programu. Assemblery spotrebujú málo pamäte, niekoľko kB.
Vyššie programovacie jazyky (VPJ)
Vyššie programovacie jazyky nevyužívajú pamäť práve najefektívnejšie. Okrem toho samotná kompilácia zaberie veľa pamäte, oveľa viac ako assemblery.
Zaujímavosť
Exitujú inteligentné kompilátory, ktoré dokážu zredukovať použitie pamäte, znížiť čas vykonávania programu, ale tieto kompilátory sú o veľa väčšie ako bežné a pri kompilácií sa vyžaduje viac pamäte.

Víťaz: Jazyky symbolických adries

Funkcionalita programov

Jazyky symbolických adries (JSA)
JSA umožňujú prístup k úplne všetkej funkcionalite procesora. Preto sa dajú využiť aj na programovanie jadra operačných systémov alebo ovládačov zariadení, kde je potrbné využiť naozaj všetkú funkcionalitu hardvéru.
Vyššie programovacie jazyky (VPJ)
Kompilátory robia mnoho vecí za programátora a VPJ nepúšťajú programátora k určitým inštrukciám procesorov.

Víťaz: Jazyky strojových inštrukcií

Prenositeľnosť programov

Jazyky symbolických adries (JSA)
JSA sú priamo závislé od inštrukčnej sady, registrov procesorov, taktiež od operačného systému, ktorý ponúka rôzne prerušenia a systémové volania využívané v programch. Z toho vyplýva, že prenositeľnosť programu stým, že kód len preložím na novej platforme alebo architektúre procesora je takmer nereálna.
Vyššie programovacie jazyky (VPJ)
Keďže samotný kód nemá nič spoločné s inštrukciami procesora alebo registrami, je prenositeľnosť bezproblémová. O všetko sa postará kompilátor daného programovacieho jazyka.

Víťaz: Vyššie programovacie jazyky

Údržba

Údržba je časovo najnáročnejšia časť vývoja softvéru. Zaberie oveľa viac času ako implementácia.
Jazyky symbolických adries (JSA)
Keďže kódy sú dlhé aj pri jednoduchých aplikáciach, pri dlhších aplikáciach by bola údržba veľmi problematická.
Vyššie programovacie jazyky (VPJ)
Kým pri údržbe kódu vo VPJ by bolo potreba zmeniť jednu inštrukciu na 1 riadok, táto istá zmena by si vyžiadala niekoľko riadkov kódu vo VPJ. Je to dôsledok toho, že VPJ využívajú knižničné funkcie a pre údržbu (hlavne veľkých aplikácií) sú určite oveľa vhodnejšie.

Víťaz: Vyššie programovacie jazyky

Nároky na vedomosti

Jazyky symbolických adries (JSA)
Tu sa kladie dôraz na vedomosti harvérové. Teda programátor musí poznať registre, ich použitie, možnosti adresovania.
Vyššie programovacie jazyky (VPJ)
Vo vyšších programovacích jazykoch harvérové záležitosti rieši kompilátor. Ale syntax VPJ je odosť zložitejšia.

Víťaz: remíza

Prínos pre programovanie

Jazyky symbolických adries (JSA)
Hardvérové znalosti, ktoré nadobudne programátor pri JSA sú všeobecne využiteľné. Programátori JSA uvažujú pred každou inštrukciou o efektivite, pamäťovej náročnosti, pretože každá inštrukcia, ktorá je vykonaná procesorom, musí byť programátorom aj napísaná.
Vyššie programovacie jazyky (VPJ)
Vo VPJ dokáže programovať mnoho ľudí. Zdalo sa, že VPJ úplne vymaže zo sveta JSA. Ale ukázalo sa, že efektivita kódov je hlavne pri veľkých aplikáciach rozhodujúca. Efektivita kódu vyplýva zo znalosti hardvéru, ktorú majú JSA programátori vo všeobecnosti lepšiu. Aj preto najlepšími programátormi vo VPJ sú programátori, ktorí ovládajú JSA.
Zaujímavosť

Víťaz: Jazyky symbolických adries

Kompromis

Ako vidíme obe triedy jazykov majú svoje výhody pri určitom využití. Preto je logické, že ich skombinovaním by sa dal dosiahnuť ideálny kompromis medzi efektivitou, prístupom k HW a prehladnosťou a krátkosťou kódu. Niektoré VPJ totiž podporujú tzv. vkladaný assembler. Reč je napríklad o C++ (Borland, Visual), v ktorom si môžeme vymedziť bloky, kde narábame s registrami AX,BX,CX,DX a prakticky využívame možnosti JSI. Nižšie uvádzam vzorový kód.


Obr.1 Vnorený JSA kód, ohraničený ako asm{...} v C kóde

Odkazy na stránky s podobným zameraním

Knaggs, Peter: ARM:Assembly language programming(strany 20-25)
http://www.arm.com/miscPDFs/9658.pdf

Thornley, David: Assemblers vs. Compilers
http://www.visi.com/~thornley/david/squirrel/squirrelasm.html

High-level vs. assembly language
http://www.cs.uiowa.edu/~ghosh/1-22-09.pdf

Slovník skratiek

  • JSA - jazyky symbolických adries
  • VPJ - vyššie programovacie jazyky
  • CPU - procesor
  • ISA - inštrukčná sada
  • ASM - assembler
  • OS - operačný systém

Diskusia