Pěkný seriál info - u Pythonu bych, ale udělal pár změn. V první řadě většina uživatelů Pythonu ví, že while je asi ta funkce, která se používá opravdu, když je potřeba. Je prostě a jednoduše drahá.
často jí lze jednoduše vyměnit za for nebo nějaký vhodný generátor, map, nebo range funkce.
No me to napriklad docela prekvapilo, PROC je tak draha, v knizkach o Pythonu (treba mam stazeny ty z knihovnicky Rootu) o tom nepadlo ani slovo (a ano, je jasny ze for-each nebo list comprehension, je vetsinou elegantnejsi, ale i tak, pitomy "while" snad bude reseny dvema skoky ne?)
Jo a rypnu si trosicku - neni to funkce :)))
Díky za článek.
<q>... skok lze totiž provést pouze v rámci těla jedné metody, není tedy možné skočit na libovolné místo v bajtkódu, což ostatně platí i pro všechny další VM.</q>
Takže všechny tyhle VM dobrovolně rezignují na optimalizaci tail callů jinam, nebo mi něco uniká? Nebo to optimalizuje až JIT podle známě sekvence?
Co mně dál zaujalo je že z bajtkódu clispu si vybavuju instrukci pro table-driven skok podle hodnoty; to (nebo něco podobného) tu není, nebo to jen není zmíněno?
Nejenom na optimalizaci tail callů mimo vlastní funkci/metodu, ale třeba JVM nedokáže optimalizovat ani na tail call v rámci jedné metody, tj. překlad do normální smyčky bez použití zásobníku. Pro samotnou Javu to až takový problém není, ta je FP na hony vzdálena :-) ale pro jazyky postavené nad JVM se už vymýšlí různé vychytávky, jak to obejít (přes GOTO).
Články jsou to hezké a rád si jejich čtením krátím dlouhé chvíle. Napadlo mne však, že jsou určené pro dost specifickou skupinu čtenářů a že by se toho dalo využít:
Nechtěl by mi někdo pomoci s překladem z bytekódu do JavaScriptu? Je to sice trochu naruby, ale třeba právě překlad skoků do tradičních strukturovaných konstrukcí je zrovna něco, na čem se dá vcelku vyblbnout: http://wiki.apidesign.org/wiki/Bck2BrwsrFlow
Chtěl bych znovu dosáhnout WORA (či WODA, write once display anywhere). Něco s čím Java začínala a postupně poztrácela. Mělo by to fungovat asi takto:
http://wiki.apidesign.org/wiki/DukeScriptInNetBeans
aplikace se napíše jednou a pak se spustí "všude".