многомерная система и странные вопросы
Nov. 13th, 2010 02:04 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
(редактированный лог)
основная проблема в том, что я не знаю слов, в которых можно сформулировать этот вопрос :)
грубо говоря, есть dataflow-система - граф потоков и обработчиков.
если считать, что она синхронная, то ее достаточно тривиально типизировать как функцию, которая принимает туплы и выдает туплы, или как монаду List (если я правильно понимаю). при этом у нас получается, скажем так, одномерная система
одна размерность у нас "время", в смысле, функция t -> inputState
а сам обработчик у нас типа () -> (t -> inputState) -> (t -> outputState) (как-то так)
так вот, что делать, если мы хотим разрешить изменение обработчика в процессе?
тогда у нас получается двумерная система, она же "битемпоральная" (не путать с традиционным определением битемпоральной системы, это ниже)
одна ось у нас "время", другая - "версия обработчика". иначе говоря, "данные, известные на момент реального времени Х + обработчик версии Y = результат"
для реалистичной реализации, к сожалению, нужна еще одна ось - данные поступают в виде кортежей (время поступления события, время актуальности события, событие)
так вот, хочется создать систему, которая принимает поток извещений о событиях и поток модификаций
и позволяет посмотреть "видение мира в момент реального времени Х на базе данных, поступивших на момент Y, системой версии Z"
а для того, чтобы она была проще для понимания и поддержания, в ней хочется видеть, как минимум, referential transparency,
и явный контроль side effect'ов.
так вот, все мысли которые приходят мне в голову, разбиваются о то, что эти оси дискретные и хреново дифференцируются
с pure дифференцируемыми total функциями всё как-то намного проще, а вот инстанцирование обьекта в коллекции мне рвет крышу
т.е. почему я вообще думаю про системы типов?
- версионирование кода адхок получается хреновое
- большинство существующих ЯП не очень любят модификацию системы на лету
- если делать новый ЯП (не исключающий возможности написания большинства частей системы, типа тех же обработчиков, на чем-то другом, эдакий концептуальный клей), то ему нужен теоретический бэкграунд
- а в универе нас как-то ничему такому не учили и вряд ли будут, судя по учебному плану.
вопросы, наверное, такие:
1. чего читать?
2. куда смотреть?
3. кто еще думал про такое?
Rx
Date: 2010-11-13 12:11 pm (UTC)Re: Rx
Date: 2010-11-13 12:17 pm (UTC)no subject
Date: 2010-11-13 10:45 pm (UTC)no subject
Date: 2010-11-14 07:57 am (UTC)no subject
Date: 2010-11-15 08:36 am (UTC)Lisp очень любит модификацию кода на лету.
Честно говоря, не вижу новизны.
Меня, в свое время, тоже не устраивали существующие языки програмирования и я собирал новые идеи для нового языка. С тех пор выжили только пару идей: развитие программы последовательным добавлением кода и эволюция кода (с некоторымми дополнениями).
Хочу сказать, что если не видишь сил и возможностей развивать и углублять свои идеи, то и не нужно относится к ним слишком серьезно :). Жизнь, реальность и мысли развиваются по своим законам :).
no subject
Date: 2010-11-15 10:42 am (UTC)Новизны (концептуальной) тут нет. SVN+Rx описывают ровно это самое. Не хватает только реалтаймовости и рефлексии.
no subject
Date: 2010-11-15 10:43 am (UTC)