многомерная система и странные вопросы
Nov. 13th, 2010 02:04 pm(редактированный лог)
основная проблема в том, что я не знаю слов, в которых можно сформулировать этот вопрос :)
грубо говоря, есть dataflow-система - граф потоков и обработчиков.
если считать, что она синхронная, то ее достаточно тривиально типизировать как функцию, которая принимает туплы и выдает туплы, или как монаду List (если я правильно понимаю). при этом у нас получается, скажем так, одномерная система
одна размерность у нас "время", в смысле, функция t -> inputState
а сам обработчик у нас типа () -> (t -> inputState) -> (t -> outputState) (как-то так)
так вот, что делать, если мы хотим разрешить изменение обработчика в процессе?
тогда у нас получается двумерная система, она же "битемпоральная" (не путать с традиционным определением битемпоральной системы, это ниже)
одна ось у нас "время", другая - "версия обработчика". иначе говоря, "данные, известные на момент реального времени Х + обработчик версии Y = результат"
для реалистичной реализации, к сожалению, нужна еще одна ось - данные поступают в виде кортежей (время поступления события, время актуальности события, событие)
так вот, хочется создать систему, которая принимает поток извещений о событиях и поток модификаций
и позволяет посмотреть "видение мира в момент реального времени Х на базе данных, поступивших на момент Y, системой версии Z"
а для того, чтобы она была проще для понимания и поддержания, в ней хочется видеть, как минимум, referential transparency,
и явный контроль side effect'ов.
так вот, все мысли которые приходят мне в голову, разбиваются о то, что эти оси дискретные и хреново дифференцируются
с pure дифференцируемыми total функциями всё как-то намного проще, а вот инстанцирование обьекта в коллекции мне рвет крышу
т.е. почему я вообще думаю про системы типов?
- версионирование кода адхок получается хреновое
- большинство существующих ЯП не очень любят модификацию системы на лету
- если делать новый ЯП (не исключающий возможности написания большинства частей системы, типа тех же обработчиков, на чем-то другом, эдакий концептуальный клей), то ему нужен теоретический бэкграунд
- а в универе нас как-то ничему такому не учили и вряд ли будут, судя по учебному плану.
вопросы, наверное, такие:
1. чего читать?
2. куда смотреть?
3. кто еще думал про такое?