Size: a a a

Scala User Group

2020 January 24

Oℕ

Oleg ℕizhnik in Scala User Group
и это вполне реально
источник

V

Vasiliy in Scala User Group
я так понял, что примером будет что-то типа IO(readByteFrom("/dev/random")), и результат выполнения двух таких ио будет разным
источник

AY

Aleksey Yakushev in Scala User Group
ну да, на этапе компиляции возможно, что всё ок и есть ссылочная целостность. Или речь как раз про это? А вот когда запустили, и пошло реальное выполнение, процедура в бд для одинаковых входных в разное время вернет разные результаты.  Правильно ли понимаю, что вся речь про ссылочную целостность именно на  этапе компиляциии?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Vasiliy
я так понял, что примером будет что-то типа IO(readByteFrom("/dev/random")), и результат выполнения двух таких ио будет разным
нет
источник

Oℕ

Oleg ℕizhnik in Scala User Group
не на этапе компиляции
источник

Oℕ

Oleg ℕizhnik in Scala User Group
при чём тут этап компиляции
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Vasiliy
я так понял, что примером будет что-то типа IO(readByteFrom("/dev/random")), и результат выполнения двух таких ио будет разным
выполнения одного и того же ИО будет разным в зависимости от исходного состояния системы, при одинаковых состояниях системы, результат и эффекты исполнения одинаковых IO будет одинаковым
источник

λ

λoλdog in Scala User Group
Видимо есть недопонимание, что такое IO
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Aleksey Yakushev
ну да, на этапе компиляции возможно, что всё ок и есть ссылочная целостность. Или речь как раз про это? А вот когда запустили, и пошло реальное выполнение, процедура в бд для одинаковых входных в разное время вернет разные результаты.  Правильно ли понимаю, что вся речь про ссылочную целостность именно на  этапе компиляциии?
ссылочная прозрачность (не целостность) - это динамическое свойство формальной системы
источник

Oℕ

Oleg ℕizhnik in Scala User Group
поэтому нет, это относится именно к тому, как эти значения будут конструироваться
источник

Oℕ

Oleg ℕizhnik in Scala User Group
динамическое - значит важна семантика, в нашем случае - исполнение
источник

AY

Aleksey Yakushev in Scala User Group
В данном контексте "ссылочная прозрачность" == некое вычисление заменяем его результатом и общий смысл программы не меняется?
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Aleksey Yakushev
В данном контексте "ссылочная прозрачность" == некое вычисление заменяем его результатом и общий смысл программы не меняется?
почти, но это скорее описание на естественном языке, чем строгая формулировка.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
скажем так
writeUser(user: User): IO[Unit]
источник

Oℕ

Oleg ℕizhnik in Scala User Group
val write = writeUser(user) 
write *> write


сконструирует значение эквивалентное
writeUser(user) *> writeUser(user)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
эти два значения совершенно реально произведут одинаковое воздействие на систему в каком-то состоянии
источник

D

Dreamerinnoise in Scala User Group
Vasiliy
я так понял, что примером будет что-то типа IO(readByteFrom("/dev/random")), и результат выполнения двух таких ио будет разным
Если взять две одинаковые вселенные и в них выполнить, то будет одинаковый результат
источник

Oℕ

Oleg ℕizhnik in Scala User Group
таким образом значения типа IO[Unit] и вообще IO[A] не менее проблемны, чем строки или числа
источник

V

Vasiliy in Scala User Group
Dreamerinnoise
Если взять две одинаковые вселенные и в них выполнить, то будет одинаковый результат
да, всё так, я попытался упростить смысл примера вопрошающего.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
поэтому проблема процедурного подхода в том, что композиция - в нём означает интерпретацию\выполнение
источник