Hlavní navigace

Názor ke zprávičce Všechny velké prohlížeče už podporují WebAssembly od Lael Ophir - To jen ten nedostatek vzdělání :( Deterministický algoritmus má...

  • Aktualita je stará, nové názory již nelze přidávat.
  • 15. 11. 2017 16:38

    Lael Ophir

    To jen ten nedostatek vzdělání :(

    Deterministický algoritmus má při stejném vstupu vždy stejný výstup. Příkladem může být nahrazení písmene "A" za písmeno "B" v daném textu. Nedeterministický algoritmus je například takový, který náhodně (i když dělat cokoliv skutečně náhodně je u počítačů trochu problém) vybere písmeno "A" v daném textu, a nahradí ho za písmeno "B".
    https://cs.wikipedia.org/wiki/Deterministick%C3%BD_algoritmus

    Když vezmete daný bytecode a proženete ho daným dekompilátorem, tak bude výsledek vždy stejný. Je to tedy deterministický proces.

    To máte zřejmě na mysli je problém analýzy chování programu. Strojový kód i řada jazyků umožňují konstrukce, u kterých se obtížně dokazuje, že nějaké věci nedělají. Příkladem může být kód, který modifikuje jiné části kódu (dopředná modifikace). Když chcete zjistit jestli kód nevolá řekněme funkci pro formátování disku, tak ji v kódu nenajdete, ale ona se tam může dostat v průběhu provádění programu, což se analýzou kódu zjišťuje velmi špatně. Řeší se to sandboxingem, kde se kontrolují akce prováděné programem během jeho provádění. Další možnost je použít nějaký jazyk, který neumožňuje použít nebezpečné konstrukce. Typicky je to C# a java, méně typicky různá rozšíření jazyka C. A i bytecode bývá typicky navržený tak aby neumožňoval nebezpečné konstrukce, a aby se dal relativně snadno analyzovat. Nezapomínejte také, že z funkčního hlediska je bytecode shodný se zdrojákem (v tom je princip překladu).