VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:6/95
RoΦnφk:1995
Rubrika/kategorie: Co (ne)najdete ve slovnφku

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek

Ji°φ Peterka

Compiler vs. interpreter

P°ed Φasem se mi dostal do rukou zcela nov² v²kladov² slovnφk v²poΦetnφ techniky, navφc p∙vodnφ tuzemskΘ (p°esn∞ji moravskΘ) provenience. Pln tou₧ebnΘho oΦekßvßnφ jsem jφm zaΦal listovat, ale ji₧ pom∞rn∞ zßhy jsem nestaΦil vychßzet z ·divu. Mφsty jsem dokonce zaΦal pochybovat o tom, zda snφm Φi bdφm, a zda jsem ztratil soudnost jß, nebo auto°i.

Nap°φklad pod heslem interpreter (Φesky interpret) jsem se doΦetl, ₧e jde o äprogram, kter² p°eklßdß a spouÜtφ programy v interpretovan²ch jazycφch". Naproti tomu pod heslem compiler (Φesky kompilßtor, p°ekladaΦ) jsem se dozv∞d∞l, ₧e "Programovacφ jazyky jako C++, Pascal, Modula a dalÜφ jsou navr₧eny jako kompilßtory .....", a pod heslem compile (Φesky p°eklad, kompilace) jsem narazil na skuteΦnou perlu: äZatφmco kompilovanΘ p°φkazy jsou u₧ivatelem zadßvßny obvykle v textovΘ form∞, v²sledkem kompilace je soubor obsahujφcφ strojovΘ instrukce v neΦitelnΘ podob∞". JeÜt∞ ₧e to auto°i alespo≥ dodateΦn∞ trochu zaretuÜovali tvrzenφm, ₧e ät∞mto instrukcφm vÜak ji₧ rozumφ poΦφtaΦ, tedy zkompilovan² soubor lze spustit jako samostatn² program".

Nakonec jsem ale p°eci jen pochopil, v Φem je zakopßn pes. V tom, jak auto°i chßpou proces interpretace zdrojovΘho jazyka - ve v²kladu jinΘho hesla (interpreted language, tj. interpretovan² jazyk) toti₧ uvßdφ, ₧e jde o takov² jazyk, äjeho₧ zdrojov² k≤d je p°i ka₧dΘm svΘm provßd∞nφ p°φkaz po p°φkazu p°eklßdßn do spustitelnΘho k≤du". P°i takovΘmto pohledu na v∞c se pak nelze divit, co jim vyÜlo pod heslem interpreter. SkuteΦnß podstata interpretace je ovÜem zalo₧ena na tom, ₧e tomu tak nenφ.

Pro sprßvnΘ pochopenφ rozdφlu mezi p°ekladem (kompilacφ) na jednΘ stran∞, a interpretacφ na stran∞ druhΘ je vhodnΘ zaΦφt u ot°elΘho konstatovßnφ, ₧e ka₧d² poΦφtaΦ je schopen vykonßvat prßv∞ a pouze svΘ strojovΘ instrukce. Tedy takovΘ strojovΘ instrukce, kterΘ tvo°φ jeho instrukΦnφ soubor, navφc specifick² nikoli pro poΦφtaΦ jako takov², ale pro pou₧it² procesor (resp. mikroprocesor). P°edstava, ₧e urΦit² poΦφtaΦ je schopen vykonßvat programy, napsanΘ nap°φklad v Pascalu, v C, C++ Φi v jinΘm programovacφm jazyku je pak iluzφ, kterou lze vytvo°it v zßsad∞ dv∞ma zp∙soby: ╖ prvnφ spoΦφvß v tom, ₧e zdrojov² text ve vyÜÜφm programovacφm jazyku se jednorßzov∞ p°evede na program, slo₧en² v²hradn∞ ze strojov²ch instrukcφ danΘho poΦφtaΦe. Takov²to program pak ji₧ ä₧ije samostatn²m ₧ivotem", je nezßvisl² na svΘm zdrojovΘm tvaru, a m∙₧e b²t samostatn∞ spouÜt∞n (a to i opakovan∞). Kdy₧ je pak pot°eba vykonat Φinnosti, kv∙li kter²m byl p∙vodnφ program ve vyÜÜφm programovacφm jazyku napsßn, je mφsto n∞j spuÜt∞n p°φsluÜn² p°elo₧en² program. Tato varianta odpovφdß p°ekladu (kompilaci). ╖ druhß varianta spoΦφvß v tom, ₧e zdrojov² text se nebude p°eklßdat do ₧ßdnΘho jinΘho tvaru, a tudφ₧ ani do takovΘho tvaru, kter² by bylo mo₧nΘ spustit. Mφsto toho se poΦφtß s existencφ jinΘho programu (ve spustitelnΘm tvaru, tj. slo₧enΘho v²hradn∞ ze strojov²ch instrukcφ), tzv. intrepretu. Kdy₧ je pak pot°eba vykonat Φinnosti, kv∙li kter²m byl p∙vodnφ program ve vyÜÜφm programovacφm jazyku napsßn, je ve skuteΦnosti spuÜt∞n zmφn∞n² interpret - jako vstupnφ data se mu p°itom äp°edhodφ" zdrojov² text dotyΦnΘho programu ve vyÜÜφm programovacφm jazyku. Interpret postupn∞ naΦφtß jeho jednotlivΘ Φßsti (p°φkazy), a okam₧it∞ zajiÜ¥uje provedenφ takov²ch akcφ, jakΘ tyto p°φkazy reprezentujφ. Tato varianta odpovφdß interpretaci.

Pro jeÜt∞ nßzorn∞jÜφ vymezenφ rozdφlu mezi interpretacφ a kompilacφ by bylo mo₧nΘ pou₧φt analogii s jizdou taxφkem. Kdy₧ do n∞j nastoupφte, m∙₧ete °idiΦe po₧ßdat, aby vßs nejprve odvezl nap°. na VßclavskΘ nßm∞stφ, pak na Starom∞stskΘ nßm∞stφ, pak na VyÜehrad apod. Nebo mu m∙₧ete postupn∞ °φkat, ₧e mß jet rovn∞, pak ₧e mß zahnout doleva, pak zase doprava atd. Prvnφ p°φpad odpovφdß svojφ logikou interpretaci programu ve vyÜÜφm programovacφm jazyku, zatφmco druh² p°φpad naopak odpovφdß kompilaci - v prvnφm p°φpad∞ specifikujete pouze Φeho chcete dosßhnout, a ponechßvßte na n∞kom jinΘm (na interpretu), aby vßmi po₧adovanΘ akce realizoval takov²m zp∙sobem, jak² pova₧uje za nejvhodn∞jÜφ. Druh² p°φpad pak odpovφdß tomu, ₧e si sv∙j zßm∞r (projet se kolem p°φsluÜn²ch pam∞tihodnostφ) n∞kde p°edem rozpracujete (p°elo₧φte) do konkrΘtnφho itinerß°e, a pak postupn∞ navigujete vozidlo taxislu₧by konkrΘtnφmi ulicemi, uliΦkami atd.

V p°φpad∞ interpretace tedy nedochßzφ k ₧ßdnΘmu p°ekladu, p°evodu Φi jinΘ transformaci, a interpret (interpretujφcφ program) ani nep°eklßdß, ani nespouÜtφ programy v interpretovan²ch jazycφch. Mφsto toho jednotlivΘ p°φkazy vyÜÜφho programovacφho jazyka interpretuje, neboli ävyklßdß si jejich v²znam", a podle toho pak zajiÜ¥uje provedenφ toho, co tyto p°φkazy znamenajφ. V²hodou je skuteΦnost, ₧e takov²to postup m∙₧e b²t rychlejÜφ, ne₧ skuteΦnß transformace (p°eklad) zdrojovΘho programu do tvaru spustitelnΘho programu. Na druhΘ stran∞ vytvo°enφ spustitelnΘho programu p°ekladem zdrojovΘho programu je v²hodn∞jÜφ v p°φpad∞, kdy lze oΦekßvat opakovanΘ spouÜt∞nφ p°elo₧enΘho programu - re₧ie na p°eklad je toti₧ jednorßzovß, zatφmco re₧ie spojenß s interpretacφ se uplat≥uje pr∙b∞₧n∞, p°i ka₧dΘm b∞hu interpretovanΘho programu.

Zdaleka ne v₧dy je ale mo₧nΘ vybφrat mezi interpretacφ a kompilacφ - mφt k dispozici ob∞ mo₧nosti je naopak dosti singulßrnφ p°φpad, kter² p°ipadß v ·vahu jen u n∞kter²ch specifick²ch programovacφch jazyk∙ typu Basicu apod. V∞tÜina ostatnφch jazyk∙ p°edpoklßdß a p°ipouÜtφ bu∩to jen kompilaci, nebo naopak jen interpretaci. V tomto smyslu je pak t°eba opravit dalÜφ neÜ¥astn² v²rok, citovan² v ·vodu - o tom, ₧e jazyky Pascal, C++ a Modula jsou navr₧eny jako kompilßtory.


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm