> No pravda pokud je vynalozene usily nekonecne tak jiste neni problem ani > extremni varianta ze podle projevu to napisete znovu.
No v případě Pythoního byte kódu je potřeba celkem malé úsilí. Věřte mi. > Nikdy jsem to nezkoumal ale predpokladam ze compilator se hlavne snazi > optimalizovat a urychlit zpracovani. Nejedna se tedy jen o nejake > zakodovani do necitelne formy. Zase další utopista. Zase další, co nohama není na zemi a pluje kdesi ve virtuální realitě. Tak znovu už po tisícté: Optimalizace stojí čas, čas a zase čas! Když kompilátor překládá třeba moje C++ zdrojáky, tak větší programy na velmi výkonném počítači do release (tedy optimalizované) verze je schopen překládat mnoho minut až hodin. Selským rozumem přijdete na to, že nastartujete Python a program jede - tedy ČASU NA OPTIMALIZACI PYTHON MOC NEMÁ. Je to odvěká bolístka všech interpretovaných programů, které cokoli optimalizují/kompilují za běhu programu - chybí jim ČAS na pořádnou optimalizaci, takže se optimalizuje naprosto minimálně, občas velmi často vůbec. Druhá věc je, že dobrá optimalizace je VELMI SLOŽITÝ SW PROBLÉM. Pro představu ve stávajících kompilátorech je 99% všeho kódu optimalizační jednotka. Je to to absolutně nejdůležitější, nejsložitější, nejnamakanější a to nejvíce machrovina, co můžete v sw napsat. Je tisíckrát jednodušší napsat jádro skvělého operačního systém, nebo třeba celý dokonalý interpretr Pythonu, ale je velmi až nechutně složité napsat dobrý neřku-li vynikající optimalizátor - je to IMHO ta nejvyšší meta jak dokázat svoje kvality jako programátor. Třetí a velmi podstatná věc je, že optimalizátory přímo magicky přitahují ty nejhorší možné druhy chyb. Samotný optimalizátor díky své složitosti a implementaci mnoha velmi sofistikovaných triků je vůbec problém odladit, ale musíte si uvědomit, že jakákoli chyba, která zůstane v optimalizátoru vlastně potencionálně způsobuje chybný běh a chybnou interpretaci všech programů v tomto jazyce/prostředí spuštěném. Proto se na spolehlivost optimalizátorů kladou obrovské názroky a většinou se raději udělá horší optimalizátor, než aby byl nespolehlivý. Chronicky nespolehlivé jsou třeba kompilátory firmy Borland, kde v případě chyby není občas od věci se podívat do strojáku, zda kompilátor skuečně přeložil co je ve zdrojovém kódu. Tedy čtvrtá věc - Python s dobrým optimalizátorem by měl asi tak stokrát až tisíckrát více řádek zdrojového kódu, než je nyní a jeho vývoj by stál příslušný násobek času. Vzhledem k tomu, že autor Pythonu stále řeší gramatické stromy a vnitřní reprezentaci syntaktického stromu - alespoň tak to pamatuji, když jsem dění v Pythonu sledoval - a vzhledem k tomu, že zdrojové kódu interpretetu Pythonu jsem studoval - mohu prohlásit, že optimalizace v Pythonu se blíží nula, není prakticky žádná. > Ale z kodu se odstrani vsechny nepotrebnosti jako jsou treba komentare, > nazvy promenych, bloky ktere nemuzou nikdy nastat (if(0==1):). Pokud alespoň pár hodin jste programoval v Pythonu a napsal v něm minimálně "Hello world program", tak jistě víte, že názvy proměnných jsou ve skutečnosti jen jména v prostoru jmen, a že vzhledem k povaze Pythonu dost dobře nelze odstraňovat jména proměnných a je dost ztížené i jejich falšování. Protože těžko vysvětlíte nadřazenému modulu, že se k proměnné pod pravým názvem jaksi nemohou dostat. Jinak odstraňování bloků, které nikdy nemohou nastat je možné, ale předpokládá to dost značnou inteligenci optimalizátoru - a pak platí ty věci co jsem psal o optimalizaci viz výše. > Optimalizator by mohl ke stejnymu kusu bytekodu dojit vice cestama. > Napriklad ruzne moznosti pro vytvoreni cyklu ktere ve vysledku mohou byt > zkompilovany stejne. Ano, to teoreticky mohl. Ale prosím, projděte si Python, jeho možnosti a bude Vám to jasné. Python moc záludností pro byte kód neskrývá, prakticky žádnou. > Takze to co dostanete dekompilaci se vasemu puvodnimu zdrojaku podoba, > stejne se to chova ale vas puvodni zdrojak to neni. Ne, původní zdroják to není, ale bude velice velice věrně odrážet původní zdroják. Zvláště v Pythonu dokonce i do takových detailů jako je třeba dodržení řádek zdrojového kódu (protože nucené odsazení a protože i v byte kódu jsou informace o řádkách zdrojového kódu a další věci). V podstatě po dekompilaci byte kódu získám velmi dobrý zdrojový kód, který mohu dále použít pro další vývoj programu a který se bude maximálně podobat originálnímu zdrojáku. Na 99,9% bude stejný s mírnými odchylkami. Názvy proměnných, objektů, funkcí, stejné konstrukce, naprosto stejné algoritmy jako originální zdroják., Odchylky budou naprosto nepodstatné. > Nebo opravdu compilator jen zakoduje zdrojak do strojove lepe citelneho > tvaru nad kterym uz nemusi provadet syntaktickou analyzu? V podstatě jste velmi blízko skutečnosti :-) Miloslav Ponkrác _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
