Size: a a a

2020 August 10

NL

Nick Linker in rust_offtopic
Y S
По циклам - а как же vbs?
А, таки позволяет. Ну костыль есть, ладно.
источник

Ct

Casual tears in rust_offtopic
Nick Linker
Возьми на вооружение следующую интуицию: FRP это как Excel.
У тебя в Эксельке ячейки зависят друг от друга, иногда даже образуют циклы (Мелкософтовский Эксель это не позволяет, но в принципе почему бы и не разрешить).

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

Есть 2 главных стратегии при изменении одной из ячеек;

1. Пересчитывать весь граф зависимых ячеек транзитивно. Можно соптимизировать, когда мы точно знаем, что значение ячейки не изменится, и тем самым сэкономить на дальнейших обновлениях. (это push модель)

2. Просто класть замыкания в зависимые ячейки. Тогда если снаружи придёт запрос "дай мне значение ячейки X421", шестерёнки начинают крутиться и весь граф всех данных, которые влияют на данное значение начинает вычисляться. Это очень близко к ленивым вычислениям в Хаскеле. (это pull модель)

Ну и в принципе вот и всё FRP, остальные сложности в деталях обработки реактивных потоков значений.
О, замечательное объяснение. Спасибо.
источник

CD

Constantine Drozdov in rust_offtopic
Kai Ren
А чё ты изначально то хотел сказать?
Говорю же, что это все замечательно работает на не очень сложных примерах благодаря тому, что очень эффективно отсекает бесполезные ветки расчета
источник

KR

Kai Ren in rust_offtopic
Nick Linker
Возьми на вооружение следующую интуицию: FRP это как Excel.
У тебя в Эксельке ячейки зависят друг от друга, иногда даже образуют циклы (Мелкософтовский Эксель это не позволяет, но в принципе почему бы и не разрешить).

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

Есть 2 главных стратегии при изменении одной из ячеек;

1. Пересчитывать весь граф зависимых ячеек транзитивно. Можно соптимизировать, когда мы точно знаем, что значение ячейки не изменится, и тем самым сэкономить на дальнейших обновлениях. (это push модель)

2. Просто класть замыкания в зависимые ячейки. Тогда если снаружи придёт запрос "дай мне значение ячейки X421", шестерёнки начинают крутиться и весь граф всех данных, которые влияют на данное значение начинает вычисляться. Это очень близко к ленивым вычислениям в Хаскеле. (это pull модель)

Ну и в принципе вот и всё FRP, остальные сложности в деталях обработки реактивных потоков значений.
Так при 2 подходе мы тоже можем не пересчитывать, если не надо. Дедупы же, дедупы повсюду)
источник

CD

Constantine Drozdov in rust_offtopic
Nick Linker
Возьми на вооружение следующую интуицию: FRP это как Excel.
У тебя в Эксельке ячейки зависят друг от друга, иногда даже образуют циклы (Мелкософтовский Эксель это не позволяет, но в принципе почему бы и не разрешить).

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

Есть 2 главных стратегии при изменении одной из ячеек;

1. Пересчитывать весь граф зависимых ячеек транзитивно. Можно соптимизировать, когда мы точно знаем, что значение ячейки не изменится, и тем самым сэкономить на дальнейших обновлениях. (это push модель)

2. Просто класть замыкания в зависимые ячейки. Тогда если снаружи придёт запрос "дай мне значение ячейки X421", шестерёнки начинают крутиться и весь граф всех данных, которые влияют на данное значение начинает вычисляться. Это очень близко к ленивым вычислениям в Хаскеле. (это pull модель)

Ну и в принципе вот и всё FRP, остальные сложности в деталях обработки реактивных потоков значений.
Ну тут остается заметить, что reactive - типичная монадка)
источник

CD

Constantine Drozdov in rust_offtopic
Так что никаких деталей снаружи, просто lift-им чистые функции (записаны в ячейках экселя), детали внутри
источник

CD

Constantine Drozdov in rust_offtopic
Nick Linker
Возьми на вооружение следующую интуицию: FRP это как Excel.
У тебя в Эксельке ячейки зависят друг от друга, иногда даже образуют циклы (Мелкософтовский Эксель это не позволяет, но в принципе почему бы и не разрешить).

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

Есть 2 главных стратегии при изменении одной из ячеек;

1. Пересчитывать весь граф зависимых ячеек транзитивно. Можно соптимизировать, когда мы точно знаем, что значение ячейки не изменится, и тем самым сэкономить на дальнейших обновлениях. (это push модель)

2. Просто класть замыкания в зависимые ячейки. Тогда если снаружи придёт запрос "дай мне значение ячейки X421", шестерёнки начинают крутиться и весь граф всех данных, которые влияют на данное значение начинает вычисляться. Это очень близко к ленивым вычислениям в Хаскеле. (это pull модель)

Ну и в принципе вот и всё FRP, остальные сложности в деталях обработки реактивных потоков значений.
Там еще есть развилка допускается ли зацикливание вычислителя
источник

NL

Nick Linker in rust_offtopic
Kai Ren
Так при 2 подходе мы тоже можем не пересчитывать, если не надо. Дедупы же, дедупы повсюду)
➕, можем
источник

CD

Constantine Drozdov in rust_offtopic
Вроде бы вопрос зацикливания эквивалентен вопросу, является ли размножитель результата reactive сам по себе reinitializable
источник

KR

Kai Ren in rust_offtopic
Constantine Drozdov
Ну тут остается заметить, что reactive - типичная монадка)
Да, но, во-первых, это всего лишь удобная форма записи. Во-вторых же, монадический интерфейс может существовать и без монадок, что Раст и показывает. Там тоже фрп сигналы просто лифтятся туды-сюды, хотя монада не выразима.
источник

CD

Constantine Drozdov in rust_offtopic
Kai Ren
Да, но, во-первых, это всего лишь удобная форма записи. Во-вторых же, монадический интерфейс может существовать и без монадок, что Раст и показывает. Там тоже фрп сигналы просто лифтятся туды-сюды, хотя монада не выразима.
Забавно, а в чем проблема с выражением монады
источник

NL

Nick Linker in rust_offtopic
Constantine Drozdov
Ну тут остается заметить, что reactive - типичная монадка)
Её можно делать монадкой, но гораздо полезнее оставить аппликативным функтором, чтобы иметь возможность распараллеливаться без явного указания как и где со стороны пользователя, а также обеспечить возможность сворачивать результаты всем скопом, а не один за одним, тем самым тоже сохранив возможность что-нибудь пооптимизировать.
источник

KR

Kai Ren in rust_offtopic
Constantine Drozdov
Забавно, а в чем проблема с выражением монады
в хкт же проблема
источник

KR

Kai Ren in rust_offtopic
Constantine Drozdov
Забавно, а в чем проблема с выражением монады
источник

CD

Constantine Drozdov in rust_offtopic
Nick Linker
Её можно делать монадкой, но гораздо полезнее оставить аппликативным функтором, чтобы иметь возможность распараллеливаться без явного указания как и где со стороны пользователя, а также обеспечить возможность сворачивать результаты всем скопом, а не один за одним, тем самым тоже сохранив возможность что-нибудь пооптимизировать.
Хм... в плюсах я просто пишу прямо таки как монаду синтаксически, и мне очень надо именно m a -> (a -> m b) -> m b
источник

CD

Constantine Drozdov in rust_offtopic
Это связано с тем, что условный комбобокс может порождать локализуемую строку по номеру
источник

CD

Constantine Drozdov in rust_offtopic
Там в менюшках еще было, когда пункт сам по себе реактивен и надо прочитать шорткат
источник

CD

Constantine Drozdov in rust_offtopic
Ну да, у меня возникали вопросы, что "вызываемое" с точки зрения плюсов не содержит сведений о возвращаемом значении и вроде бы это важно, потому что можно lift-ить auto f(auto, auto)
источник

CD

Constantine Drozdov in rust_offtopic
Собственно примерно отсюда и возникал вопрос - зачем система трейтов из хаскеля, а не перегрузок + концептов из плюсов
источник

DS

Doge Shibu in rust_offtopic
Т-34 85
@DogeShibu ты с этим согласен?
В эрланге очень много других тонких и хитрых моментов, которые хороши.

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