Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!


Kompiliuojamos kalbos

Iš Pipedijos - durniausios enciklopedijos.
20:36, 26 sausio 2023 versija, sukurta Pikachu (Aptarimas | indėlis) (Naujas puslapis: '''Kompiliuojama kalba''' - tai tokia programavimo kalba, kuri gali būti visiškai pilnavertiškai išverčiama į mašininį kodą taip, kad neliktų interpretuojamų fragmentų. Kitaip tariant, kompiliuojama kalba parašytą programą galima automatinėmis priemonėmis išversti į logiškai tapatų asemblerio kodą. Automatiškai išversti programą į kokį nors mašininį kodą ne visada paprasta, nes pvz., koks nors kintamasis...)
(skirt) ← Ankstesnė versija | Dabartinė versija (skirt) | Vėlesnė versija → (skirt)
Jump to navigation Jump to search

Kompiliuojama kalba - tai tokia programavimo kalba, kuri gali būti visiškai pilnavertiškai išverčiama į mašininį kodą taip, kad neliktų interpretuojamų fragmentų. Kitaip tariant, kompiliuojama kalba parašytą programą galima automatinėmis priemonėmis išversti į logiškai tapatų asemblerio kodą.

Automatiškai išversti programą į kokį nors mašininį kodą ne visada paprasta, nes pvz., koks nors kintamasis vienoje vietoje gali būti naudojamas kaip skaičius, kitoje - kaip tekstas, o trečioje - kaip dar kas nors. Gali būti sunkumų ir verčiant programos kodą, nes pvz., kokios nors kalbos konstrukcijos gali tiesiog neturėti išverčiamo ekvivalento.

Kaip pvz., itin sunkus, visiškai nekompiliuojamas atvejis yra "eval" tipo funkcija, kuri leidžia įvykdyti ta pačia kalba parašytą kodą. Jei kodas yra iš anksto neapibrėžtas, o generuojamas programos vykdymo metu, tai kompiliatorius iš principo negali žinoti, koks tenai bus kodas, o tai reiškia, kad negali ir sukompiliuoti jo į mašininį kodą. Kitaip tariant, toksai fragmentas lieka nekompiliuojamu, o tiktai interpretuojamu.

Kadangi kompiliavimui keliama daug įvairių reikalavimų, kompiliuojamos kalbos paprastai turi daug visokių apribojimų ir smarkiai griežtesnę sintaksę. Šiais laikais klasikinėmis kompiliuojamomis kalbomis laikomos Algol tipo kalbos, kurios išsprendė daugelį ankstesnių programavimo kalbų problemų. Nors kompiliuojamų kalbų buvo ir iki tol, visgi Algol ištaisė tiek bėdų, kad faktiškai viskas, kas kompiliuojama, istoriškai dabar jau siejasi su šia kalba.

Iš Algol išaugo dvi esminės kompiliuojamų kalbų grupės - Pascal, kuri dar pertaisė Algol idėjas taip, kad gavosi vienu perėjimu kompiliuojama kalba, o taip pat C kalba, kuri buvo tyčia pakankamai supaprastinta, kad nors ir buvo kompiliuojama dviem perėjimais, kompiliatoriai būdavo paprasti. Šių dviejų kalbų įtaka nulėmė daugumos vėlesnių kompiliuojamų, o taip pat ir daugelio nekompiliuojamų kalbų gramatiką.

Kompiliuojamos kalbos yra daug pranašensės už interpretuojamas kalbas, nes jomis parašytos programos po kompiliacijos gali būti vykdomos kaip tikros mašininės programos. Kitaip tariant, kompiliatorius vieną kartą gerokai padirbėjo, išvertė programą į realų mašininį kodą ir tada jau programa dirba dideliu greičiu. Praktiškai tai reiškia, kad netgi neefekytivai ir menkai optimizuojant kompiliuotos programos dirba bent 10-30 kartų greičiau už greičiausias interpretuojamas programas. Dažniausiai greičių skirtumas būna dar didesnis, iki šimtų ar tūkstnačių kartų.

Tiesa, šitoks greičių skirtumas būna su tam tikromis išlygomis: interpretuojamose programose naudojamos interpretatorių funkcijos dažniai būna kompiliuotos, tad jų vykdymo greitis nesiskiria nuo kompiliuotos programos. Taigi, toksai greičio palyginimas tinka tiktai būtent pačiam interpretuojamam ir kompiliuojamam kodui, o ne iškviečiamoms funkcijoms palyginti. Jei esminę vykdomo kodo dalį sudaro iškviečiamos funkcijos, kompiliuojamų ir interpretuojamų programų greitis gali likti praktiškai vienodas.

Esminis kompiliuojamų kalbų trūkumas - jų reiklumas gramatikai. Šiomis kalbomis negalima rašyti belenkaip, tikintis, kad visvien kažkaip kažkas suveiks. Klaidos čia lemia daug, o kai kada būna ir nepastebimos, išlendančios tik ilgiau ta kalba parašytą programą naudojant. Taigi, toli gražu ne visi programuotojai šias kalbas mėgsta ir toli gražu ne visiems uždaviniams šios kalbos gerai tinka.