[python] Compile-time vs. run-time (bylo Nesrozumitelne prirazovaci prikazy...)

Petr Prikryl PrikrylP na skil.cz
Pondělí Červenec 9 15:24:15 CEST 2007


Petra Javornicka
> Petr Prikryl
> > V Pythonu se v čistém slova smyslu nic nedělá v compile-time.
> > Všechno jede spíš v run-time. Jde jen o to jestli dříve (při
> 
> Ja bych v cistem slova smyslu rekla, ze se to preklada, protoze vznika
> nejaky p-kod, ne? A kdyz se neco preklada, tak je to v compile-time,
> ne?

Odpovím nejdříve příkladem:
=====================================================
# Tady uz se provede prvni prikaz a o existenci f1() se vubec nevi.
print dir()    

# Teprve tady vznika f1(), neprovadi se, jen se generuje jeji kod.
def f1():
    print 'f1'

print dir()     # Tady se uz o f1() vi.    
f1()            # f1() se spousti, ale o f2() se jeste nevi.
f = f1          # f1() si zpristupnujeme pres jmeno f,
print dir()     # ktere se objevuje v prostoru jmen
f()             # a f() se hned spousti.

# Teprve tady vnika funkce f2()
def f2():
    print 'f2'
    
print dir()    # Teprve tady se o f2() vi.
f1()    
f()
f2()
=====================================================

Po spuštění to vypadá takto:

=====================================================
c:\tmp>python e.py
['__builtins__', '__doc__', '__file__', '__name__']
['__builtins__', '__doc__', '__file__', '__name__', 'f1']
f1
['__builtins__', '__doc__', '__file__', '__name__', 'f', 'f1']
f1
['__builtins__', '__doc__', '__file__', '__name__', 'f', 'f1', 'f2']
f1
f1
f2
=====================================================

Prakticky vzato, interpretační a kompilační překladače
se liší jen ve způsobu implementace. Nakonec se vždycky
provádějí strojové instrukce, které odpovídají zdrojovému
textu. Ryzí interpretry, které vůbec neprovádějí překlad
do nějakého mezikódu, jsou buď určeny na výpočetně 
jednoduché věci (shell, cmd), nebo jsou historicky cenné 
(někdy obojí ;)

S rychlejšími počítači a s vývojem technik překladu
se objevují hybridní přístupy (Java s Just In Time 
překladačem, C#).

Technicky a pragmaticky se za kompilované jazyky
pokládají ty, které dokáží vyprodukovat spustitelný
strojový kód v době překladu, se vším všudy, včetně
typové kontroly. Kompilované jazyky tím pádem
poskytují maximální možný výkon (pokud překladač
zná detaily cílové architektury, procesoru...).

Interpretované jazyky umožňují psaní programů, které
generují nebo upravují svůj vlastní kód za běhu.

pepr

P.S. Při citaci jména umazávej e-mailovou adresu, prosím.
     Jinak budu chodit domů s kapsama plnýma Viagry a 
     šeky z výherních loterií ;)


Další informace o konferenci Python