11 komentářů k článku Do hlubin implementací JavaScriptu: 2. díl – dynamičnost a výkon:

  1. DevelX

    properties objektu v dynamických jazykoch
    "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.

    1. David MajdaAutor příspěvku

      Re: properties objektu v dynamických jazykoch
      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.

    2. Vuk

      Re: properties objektu v dynamických jazykoch
      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, …

    3. David MajdaAutor příspěvku

      Re: properties objektu v dynamických jazykoch
      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á.

  2. yossarian

    C#?
    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.

    1. David MajdaAutor příspěvku

      Re: C#?

      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.

    2. Anonymní

      Re: C#?
      > 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 :-)

    3. ladipro

      Re: C#?
      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.

    4. David MajdaAutor příspěvku

      Re: C#?
      Říkal jsem si, že tak nějak to musí být, nemá-li se zbořit svět :-)

    5. Ladislav Thon

      Re: C#?
      > 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ší.

    6. ladipro

      Re: C#?
      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.

Napsat komentář

Přihlásit pomocí:

facebookFacebook twitterTwitter

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Můžete používat následující HTML značky a atributy: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Zdroj: http://www.zdrojak.cz/?p=2854