c++ architecture

Delovanje C++

C++ je preveden jezik. V bistvu se celoten program prevede pred izvajanjem. Zaradi tega C++ ne more imeti dinamičnih tipov spremenljivk, ker se ne morejo dinamično med izvajanjem spreminjati. Sam proces prevajanja ima 3 korake. Najprej je predprocesor, ki vbistvu samo ureja tekst. Vse kar je označeno z # popravi. Potem je na vrsti prevajalnik, ki prevede kodo v Assembly. To so vbistu že ničle in enice o katerih govorimo. Assembly je skupek funkcij, ki jih procesor računalnika že pozna. Nazadnje je na vrsti linker, ki vse prevedene datoteke poveže v eno, ki jo lahko poženemo (.exe).

python architecture

Delovanje Pythona

Python je tolmačen (angl: interpreted) jezik, kar pomeni da prevajanje v ničle in enice poteka sproti z izvajanjem programa. Pred tem se sicer že prevede v "Python byte code", na kakršen način deluje tudi mnogo hitrejši jezik Java, vendar ga v času izvajanja vpočasnjuje preverjanje tipov spremenljivk ostalih elementov, ki jih ni že prej.

Delovanje lahko pospešimo z uporabo razširitev Pythona kot so Numba, Numpy, Cython in drugih. Te uporabljajo različne trike, za pospešitev tolmačenja: npr. Cython uporablja že prevedene funkcije napisane v C-ju, Numba pa shrani že prevedene funkcije, da jih pri poznejši uporabi ni potrebno prevesti.

Kljub vsem tem optimizacijam, ki jih lahko izvedemo, je Python še zmeraj več stokrat počasnejši.

compiler vs interpreter

Jure Steiner 2024