?

Log in

No account? Create an account

Previous Entry | Next Entry

rabotka2
Я безуспешно бьюсь над логической праблемкой, что невозможно *эффективно* решить последовательность при произвольном порядке вызова функций. То есть или эффективно но непроизвольно, или неэффективно и произвольно, или FSM (довольно эффективно и достаточно произвольно, но при этом весьма хрупко).

Я в принципе всеми руками за FSM, но код пишецца в основном не стоко для процессора, скоко для аудитории состоящей из тупых дядек, которые после этого будут там ковыряцца и вставлять туда баги. В идеальной ситуации в код вставить баг должно быть невозможно. А FSM сломать очень легко. Более того, логику FSM редко кто будет продолжать, начнут опять заполнять все кодом-вермишелью ну и вообще, современные Люди стараюцца прикладывать умственные усилия *только* за очень большие деньги, "а так не будут".

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

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

Ну представьте сибе. Есть такой бинарный формат, довольно старый, но хорошо продуманный, XDR. Его разработали в свое время в Sun Microsystems, нечто похожее на Google Protocol Buffers, только без привязки к конкретным типам. Такое, абстрактное. На основе этого протокола квонты разработали иерархическую структуру, в которой есть все основные виды типов, массивы, всякая такая лабуда. И с помощью этого вычисляют всякие сложные штуки, типа кривой падения коэффициента инфляции т.д. То есть репрезентацию можно понять *только* прочтя все дерево структуры, ну примерно как в XML DOM. А поскольку это привязано к market data, такое дерево может занимать несколько гигов. А я хочу чтоб было как SAX, но вот нет способа, чтобы эффективно писать event listeners для него, без того чтобы это было или очень хрупким, или очень непонятным, или надежным и понятным, но дико неэффективным.

Умные Люди скажут: Саш, генерация кода твой товарищ в этом деле. Да, я могу такое написать. Но это будет "брутал форс", чем это кончаецца я тоже хорошо знаю. Вот недавно попыталась открыть автоматически сгенерированный soap stub - и довольно долго пыталась понять, почему он не открываецца ни в эклипсе, ни в интеллиДж, ни в vi. Ну потому что там 400 *тысяч* строк, в одном классе. Во как.

Ладно, я еще подумаю, но пока хороших идей нет - мне надо, чтобы при чтении бесконечного бинарного потока вызывались функции начниМассив(), пополниМассивЭлементом(n), закончиМассив(), начниХэшМап() и т.д., и чтобы не было привязки к очередности, типа все эти компоненты могут появляцца в любом порядке, но чтобы в конце была кнопочка "Всё!", к моменту ее нажатия все *уже* должно быть преобразовано в fully populated domain specific objects, которые будут каждый раз разные в зависимости от контекста, то есть в одном случае мы читаем яблоки, в другом груши, при этом без ошибок. Ну трудно это написать без того, чтобы каждый шаг сверялся со всеми возможными неправильными комбинациями шагов, где даже само количество этих шагов заранее неизвестно, не то что их последовательность, и чтоб без линеарной деградации. Такое можно писать надежно токо когда оно закрыто от посторонних глаз, типа инкапсулированно, а тут надо чтобы это кто угодно пополнять мог.

Не знаю что делать. Пойду "окуклюсь"...


Comments

( 2 comments — Leave a comment )
golosptic wrote:
12th Aug, 2015 22:22 (UTC)
эмм...
Реализацию на Prolog, конечно же, не предлагать? ;-)
nasha_sasha wrote:
12th Aug, 2015 22:37 (UTC)
Я в прологе не умею )
( 2 comments — Leave a comment )