Andy Melnikov (nponeccop) wrote,
Andy Melnikov

RealWorld -- это самый настоящий физический мир

vag_vagoff подкинул интересную цитату из списка рассылки Clean:
You're talking about the physical IO and the world value as if they were different things, but they're not. The program really does compute a new world value. Rather than being stored in a register or memory location, the world value is stored in the physical world. In fact the world value _is_ the physical world. The implementation does the standard update-in-place optimization on this value, so that rather than having to create a new universe to compute a new world value, it can simply update the value of the existing physical world.

Of course the physical world can be a little bit difficult to reason about, so it's handy to have a simpler abstract model, like the one I discussed in my earlier posts. But the way the real implementations actually work is that the world value is represented as the physical world.
То есть, getChar :: World -> (Char, World) вообще не содержит скрытых эффектов, т.е. чистая функция, т.к. модифицированная вселенная честно возвращается, а старая вселенная честно уничтожается сборщиком мусора, как любой использованный аргумент.

Из этого и материалов предыдущего поста следует, что в Хаскеле сайд-эффектов нет вообще, и всё не только ссылочно прозрачно, но и чисто.

  • Post a new comment


    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.