"u metod ale hledání vadí obecně více, protože je často nutné prohledávat tabulek víc"
Naozaj? Vrámci objektu je možné pristupovať aj k vlastnostiam, ktoré sú súčasťou objektov prototype - a to s použitím kľúčového slova this. Situácia sa mení keď sa použije priradenie cez this a táto nová hodnota sa uloží do daného objektu a nie do niektorého nadradeného prototypu.
Názory k článku
Do hlubin implementací JavaScriptu: 2. díl - dynamičnost a výkon
DevelX (neregistrovaný)
---.net.upc.cz
6. 11. 2008 11:41
Nový
properties objektu v dynamických jazykoch
celé vlákno
6. 11. 2008 18:33
Nový
Re: properties objektu v dynamických jazykoch
celé vlákno
Asi to není z textu úplně jasné, ale slůvkem obecně jsem chtěl naznačit, že popisuju situaci obvyklou v "běžných" dynamických jazycích, tj. založených na třídách. Máte pravdu, že v JavaScriptu je to díky prototypům jinak - píšu o tom o odstavec níže.
Vuk (neregistrovaný)
---.136.broadband4.iol.cz
6. 11. 2008 20:40
Nový
Re: properties objektu v dynamických jazykoch
celé vlákno
Ale ani tak to přece neplatí. V Pythonu například (je to "bežný" dynamický jazyk?) napíšu-li `a.i', může jít o atribut instance a, nebo o atribut její třídy, nebo o atribut nadtřídy, ...
7. 11. 2008 10:03
Nový
Re: properties objektu v dynamických jazykoch
celé vlákno
To by mě nenapadlo, že Python míchá syntaxi pro atributy instancí a tříd.
Vycházel jsem ze svých znalostí Ruby a PHP, kde opravdu existuje jen jedna tabulka instančních atribůtů, která se prohledává.
Vycházel jsem ze svých znalostí Ruby a PHP, kde opravdu existuje jen jedna tabulka instančních atribůtů, která se prohledává.
yossarian (neregistrovaný)
---.ecommerce.cz
6. 11. 2008 15:35
Nový
C#?
celé vlákno
U statických jazyků jako je třeba C++, Java nebo C# je seznam metod třídy pevně určen před samotným spuštěním programu (při kompilaci)
v tom pripade c# neni staticky jazyk, neb pomoci reflection.emit a extensions umi pridavat/menit uz stavajici zkompilovane metody, klidne i za behu.
v tom pripade c# neni staticky jazyk, neb pomoci reflection.emit a extensions umi pridavat/menit uz stavajici zkompilovane metody, klidne i za behu.
6. 11. 2008 18:45
Nový
Re: C#?
celé vláknov tom pripade c# neni staticky jazyk, neb pomoci reflection.emit a extensions umi pridavat/menit uz stavajici zkompilovane metody, klidne i za behu.
Pokud vím, tak extension methods by na statičnosti nic měnit neměly - budou pravděpodobně vevnitř fungovat podobně jako nevirtuální metody.
O Reflection.Emit prakticky nic nevím, takže je možné, že nějakým způsobem statičnost jazyka narušuje.
C# znám jen zběžně, takže pokud mě zde někdo opraví/doplní, budu rád.
uživatel si přál zůstat v anonymitě
---.net.upc.cz
6. 11. 2008 22:56
Nový
Re: C#?
celé vlákno
> O Reflection.Emit prakticky nic nevím, takže je možné, že nějakým způsobem statičnost jazyka narušuje.
Narušuje, nenarušuje, v .NETu (a v Javě taky) prostě lze generovat kód za běhu aplikace, taky ho hned zavádět a vykonávat (na tomhle principu např. funguje obvyklý způsob integrace skriptů v Groovy do programů v Javě). Jak moc to mění nebo nemění "statičnost" jazyka je otázka interpretace, každopádně to má docela zajímavý vliv na optimalizace prováděné virtuálním strojem :-)
Narušuje, nenarušuje, v .NETu (a v Javě taky) prostě lze generovat kód za běhu aplikace, taky ho hned zavádět a vykonávat (na tomhle principu např. funguje obvyklý způsob integrace skriptů v Groovy do programů v Javě). Jak moc to mění nebo nemění "statičnost" jazyka je otázka interpretace, každopádně to má docela zajímavý vliv na optimalizace prováděné virtuálním strojem :-)
ladipro (neregistrovaný)
---.hsd1.wa.comcast.net
8. 11. 2008 8:24
Nový
Re: C#?
celé vlákno
Ref.Emit neumi manipulovat s existujicimi typy, takze na staticnosti nic nemeni. Stale plati, ze ve chvili, kdy se JITtuje metoda, je k dispozici plna typova informace. Podobne jako na staticnosti C nic nemeni to, ze si muzu do kusu pameti nagenerovat instrukce a pres function pointer je zavolat.
Ani feature nazyvana "Edit & Continue", ktera umoznuje delat jiste zmeny behem debuggovani bez nutnosti restartovat program, nepovoli nic nebezpecneho jako napr. pridani fieldu do typu.
Ani feature nazyvana "Edit & Continue", ktera umoznuje delat jiste zmeny behem debuggovani bez nutnosti restartovat program, nepovoli nic nebezpecneho jako napr. pridani fieldu do typu.
8. 11. 2008 16:09
Nový
Re: C#?
celé vlákno
Říkal jsem si, že tak nějak to musí být, nemá-li se zbořit svět :-)
Ladislav Thon (neregistrovaný)
---.zapcechy.adsl-llu.static.bluetone.cz
8. 11. 2008 16:36
Nový
Re: C#?
celé vlákno
> Stale plati, ze ve chvili, kdy se JITtuje metoda, je k dispozici plna typova informace.
Záleží na tom, co myslíte "plnou typovou informací" :-) JIT například z principu nemůže znát úplnou hierarchii tříd. Se "statičností" jazyka jako takového to nemá nic moc společného, ale runtime musí být mnohem dynamičtější.
Záleží na tom, co myslíte "plnou typovou informací" :-) JIT například z principu nemůže znát úplnou hierarchii tříd. Se "statičností" jazyka jako takového to nemá nic moc společného, ale runtime musí být mnohem dynamičtější.
ladipro (neregistrovaný)
---.hsd1.wa.comcast.net
8. 11. 2008 18:01
Nový
Re: C#?
celé vlákno
JIT ma vsechny informace o tride, jejiz metodu JITtuje jakozto i vsech jejich base tridach. Autor v clanku naznacil, ze virtual dispatch je slaby odvarek a rozhodne nedela jazyk dynamickym - jestli to je to, na co narazite. Nicmene, pokud se napriklad pokusite udelat call na neexistujici metodu, dostanete vyjimku pri JITovani, zadny by-name resolution za run-time se konat nebude.