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.

      1. 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, …

        1. 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.

      1. Anonym

        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 :-)

        1. 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.

          1. 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ší.

            1. 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ář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

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