Насколько я видел имплементации РП, циклические зависимости не любят. Но они нередко бывают не только удобны, но и полезны. Классический пример:
даны формулы:
cell a = constant(0)
cell b = a + 10
обычно используют так:
a.set(5)
assert b == 15
А вот что я хочу ещё и так:
b.set(30)
assert a == 20
Понятное дело тут очень много хитростей, например операции должны быть обратимы. Иначе будут неоднозначности. Особенно интересно когда несколько полей зависят друг от друга.
и юзер может вводить как хочет, начиная с любого поля.
Если писать так в лоб, то будет столько скрытых косяков (например, что если пробелы будут в firstName), что лучше так не писать вовсе.
Какие есть наработки в этой области? Как это дело выражать красиво? Как например, верифицировать непротиворечивость формул? Как дебажить, тестить? Как определить — можно ли использовать такую формулу или надо что-то другое придумать?
Здравствуйте, ., Вы писали:
.>Какие есть наработки в этой области? Как это дело выражать красиво? Как например, верифицировать непротиворечивость формул? Как дебажить, тестить? Как определить — можно ли использовать такую формулу или надо что-то другое придумать?
Линзы, однако. Т.е. собирать формулы из линз, для которых обратимость гарантирована.
Здравствуйте, Cyberax, Вы писали:
C> .>Какие есть наработки в этой области? Как это дело выражать красиво? Как например, верифицировать непротиворечивость формул? Как дебажить, тестить? Как определить — можно ли использовать такую формулу или надо что-то другое придумать? C> Линзы, однако. Т.е. собирать формулы из линз, для которых обратимость гарантирована.
С другой стороны исключительная обратимость не всегда нужна. С тем же примером fullname например, можно описать так, что если в fullname вводится имя без пробела, то высветить ошибку, а не тупо запрещать такие конструкции на этапе кодинга.
C> http://www.wpi.edu/Pubs/ETD/Available/etd-042908-133033/unrestricted/cking.pdf
Да, вспоминаетя что-то такое. Статья 5-летней давности. А что-нибудь практическое у кого-нибудь получилось?
Здравствуйте, ., Вы писали:
C>> Линзы, однако. Т.е. собирать формулы из линз, для которых обратимость гарантирована. .>С другой стороны исключительная обратимость не всегда нужна. С тем же примером fullname например, можно описать так, что если в fullname вводится имя без пробела, то высветить ошибку, а не тупо запрещать такие конструкции на этапе кодинга.
Ну так линзами это прекрасно описывается, при неправильных входных данных для линзы просто по всему зависимому графу распространяется ошибочное состояние.
C>> http://www.wpi.edu/Pubs/ETD/Available/etd-042908-133033/unrestricted/cking.pdf .>Да, вспоминаетя что-то такое. Статья 5-летней давности. А что-нибудь практическое у кого-нибудь получилось?
Backbone.js
Здравствуйте, Cyberax, Вы писали:
C> Ну так линзами это прекрасно описывается, при неправильных входных данных для линзы просто по всему зависимому графу распространяется ошибочное состояние.
Осталось выразить в коде, надеюсь... В общем надо хорошенько прочитать статью.
C> .>Да, вспоминаетя что-то такое. Статья 5-летней давности. А что-нибудь практическое у кого-нибудь получилось? C> Backbone.js
Так это обычная событийная модель, тысячи их, ничего из reactive programming:
изменение data будет вызывать перерасчёт display только если enabled=true.
В событийной модели приходится писать динамическое подписывание|отписывание слушателей и бороться с утечками.
В том же python trellis как я понял это было реализовано...
Здравствуйте, ., Вы писали:
C>> Ну так линзами это прекрасно описывается, при неправильных входных данных для линзы просто по всему зависимому графу распространяется ошибочное состояние. .>Осталось выразить в коде, надеюсь... В общем надо хорошенько прочитать статью.
А, вспомнил. Ещё Elm есть: http://elm-lang.org/edit/examples/Intermediate/Physics.elm
Здравствуйте, Cyberax, Вы писали:
.>>Да, вспоминаетя что-то такое. Статья 5-летней давности. А что-нибудь практическое у кого-нибудь получилось? C>Backbone.js