Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
Do hlubin implementací JavaScriptu: 2. díl - dynamičnost a výkon

DevelX
DevelX (neregistrovaný) ---.net.upc.cz
6. 11. 2008 11:41 Nový

properties objektu v dynamických jazykoch

celé vlákno
"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.
David Majda aura:98
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
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, ...
David Majda aura:98
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á.
yossarian
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.
David Majda aura:98
6. 11. 2008 18:45 Nový

Re: C#?

celé vlákno

v 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 :-)
ladipro
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.
David Majda aura:98
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
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ší.
ladipro
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.
Zasílat nově přidané příspěvky e-mailem