Size: a a a

2020 March 05

DS

Doge Shibu in rust_offtopic
Т.е. ОО с полностью иммутабельными обьектами, ленивыми тасками для побочных эффектов и т.д. встречается достатотчно редко.
источник

P

Pavel in rust_offtopic
Doge Shibu
Ну они скорее всего имеют в виду процедурное-ОО, которые всё же много где встречается.

Чаще чем ФП-ОО.
если там есть объекты, это ещё не значит что это ооп, нужно чтоб программа ещё была на них ориентирована
источник

DS

Doge Shibu in rust_offtopic
Pavel
если там есть объекты, это ещё не значит что это ооп, нужно чтоб программа ещё была на них ориентирована
Т.е. уже любая реализация того же JPA является уже не ссылочно прозрачной.
источник

λ

λоλторт in rust_offtopic
Pavel
ну, просто некоторые это пишут как противопоставление фп-ооп, хотя я вижу только противопоставление к процедурному стилю
ООП это процедурщина с порезанными фёрст класс модулями с сабтайпингом
источник

DS

Doge Shibu in rust_offtopic
И более того, она делает даже хорошие классы грязными из-за ленивой загрузки, как пример.
источник

DS

Doge Shibu in rust_offtopic
λоλторт
ООП это процедурщина с порезанными фёрст класс модулями с сабтайпингом
А чем тебе фёрст класс модули не ООП
источник

DS

Doge Shibu in rust_offtopic
Ещё скажи, что Ocaml не ООП
источник

λ

λоλторт in rust_offtopic
Doge Shibu
Ещё скажи, что Ocaml не ООП
Окамл это ООП
источник

λ

λоλторт in rust_offtopic
Прям со всеми недостатками, разве что синтаксис поприятнее и типы получше
источник

P

Pavel in rust_offtopic
Doge Shibu
Т.е. ОО с полностью иммутабельными обьектами, ленивыми тасками для побочных эффектов и т.д. встречается достатотчно редко.
ленивые таски не обязательны потому, что тебе всё равно нужен будет результат, лучше начать получать его раньше, под капотом оно может получить его прям сходу в виде ошибки, но ты не получишь эту ошибку пока не захочешь достать результат, после чего тебе в любом случае придётся его обрабатывать или делегировать наружу, потому я считаю, что ленивые фьючи переоценены, надо ленивость -- заверни в лямбду, которую можешь обменять на фьючу в любом ближайшем экзекуторе
источник

P

Pavel in rust_offtopic
Doge Shibu
Т.е. уже любая реализация того же JPA является уже не ссылочно прозрачной.
внутри транзакции, или снаружи?
источник

P

Pavel in rust_offtopic
λоλторт
ООП это процедурщина с порезанными фёрст класс модулями с сабтайпингом
докажи
источник

DS

Doge Shibu in rust_offtopic
polunin.ai
ну и в чем разница то
Разница в том, что если десугарить эту запись как было тобой предложено, то программы в ней не будут ссылочно прозрачны, как ты и указал в примере выше.

А если десугарить по второму варианту, то это свойство будет сохранятся, т.е. есть ли мы заменим read_line_io на возвращаемое значение, то получим:
(lambda _: получение из консоли строки).bind(lambda a: a + "\n")

Что сохранит нужное нам поведение
источник

DS

Doge Shibu in rust_offtopic
Pavel
ленивые таски не обязательны потому, что тебе всё равно нужен будет результат, лучше начать получать его раньше, под капотом оно может получить его прям сходу в виде ошибки, но ты не получишь эту ошибку пока не захочешь достать результат, после чего тебе в любом случае придётся его обрабатывать или делегировать наружу, потому я считаю, что ленивые фьючи переоценены, надо ленивость -- заверни в лямбду, которую можешь обменять на фьючу в любом ближайшем экзекуторе
Проблема в том, что не ленивые таски нарушают ссылочную прозрачность.
источник

DS

Doge Shibu in rust_offtopic
Как раз тем, что запускаются при обьявлении.
источник

P

Pavel in rust_offtopic
Doge Shibu
Проблема в том, что не ленивые таски нарушают ссылочную прозрачность.
чем? ты всегда можешь заменить их на завершённые таски
источник

DS

Doge Shibu in rust_offtopic
Pavel
чем? ты всегда можешь заменить их на завершённые таски
Вот пример этого я прям выше и кидал:

https://imgur.com/S19Nr4a.png

Вот тут Future - это не ленивый таск, который запускается сразу.

Из-за этого мы можем получить проблемы даже при малейших изменениях кода, как в примерах, или поведение с неявно непредсказуемым порядком действий.
источник

P

Pavel in rust_offtopic
ну и допустим я получил файл по сети и захотел часть его отправить в бекап, а часть -- распарсить и записать в базу, чтоб размазать нагрузку на сеть я хочу начать бекап сразу, а не делать его одновременно с записью в базу, чтоб не держать долго транзакцию через медленную сеть
источник

P

Pavel in rust_offtopic
Doge Shibu
Вот пример этого я прям выше и кидал:

https://imgur.com/S19Nr4a.png

Вот тут Future - это не ленивый таск, который запускается сразу.

Из-за этого мы можем получить проблемы даже при малейших изменениях кода, как в примерах, или поведение с неявно непредсказуемым порядком действий.
ну я угадал не подглядывая, но не знаю что мне с этим делать
источник

λ

λоλторт in rust_offtopic
Pavel
чем? ты всегда можешь заменить их на завершённые таски
Очень легко понаблюдать "нечистоту" просто заменяя в одни таски на функции из юнита, а другие не заменяя
источник