metaclass: (Default)
[personal profile] metaclass
А вот скажите, существует ли где-нибудь в академических эмпиреях компутер сайенс такая вещь, как эволюционирующие типы?

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

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

Date: 2009-11-27 07:06 pm (UTC)
From: [identity profile] sergiej.livejournal.com
Делается довольно просто в жабе.
В одном проекте у нас были динамические функции. Технологии Aspect Reflections.
Типа "объект" это лифчик, у него функция так-же называется но в конкретный момент (и на конкретный период, если надо) она начинает делать что-то другое.
Выглядело магически но работало.

Date: 2009-11-28 10:05 am (UTC)
From: [identity profile] mudasobwa.livejournal.com
Аспектное программирование не привязано к языку никоим образом.

Аспекты — рулят рулем, это правда.

Date: 2009-11-29 01:53 pm (UTC)
From: [identity profile] sergiej.livejournal.com
А что я говорил что только в жабе? Извиняюсь если это так прозвучало.

Date: 2009-11-27 07:17 pm (UTC)
From: [identity profile] volodymir-k.livejournal.com
Хм, хотел ответить "нет", но Гугл знает
http://www.mtholyoke.edu/~blerner/evolution/evolution.html
http://www.ics.uci.edu/~arcadia/system_pages/tess.html
http://portal.acm.org/citation.cfm?id=680027

На мой взгляд, все равно это миграция, реимплементация скорее со сменой платформы, и надо полное тестирование фич.

Date: 2009-11-27 07:37 pm (UTC)
From: [identity profile] freiksenet.livejournal.com
Второй пост вижу выражение "опердень". Что это значит?

Date: 2009-11-27 07:44 pm (UTC)
From: [identity profile] metaclass.livejournal.com
"Операционный день" - условное обозначение для всех бухгалтерских, складских и прочих программ, которые на 99% состоят из ввода разнообразных первичных данных и вывода печатных отчетов. Из сокращения превратилось в имя собственное в процессе срача на тему функциональных языков у [livejournal.com profile] plumqqz
Я этим классом программ занимаюсь лет 13 уже, и конца края этому не видно :)

Date: 2009-11-27 07:47 pm (UTC)
From: [identity profile] freiksenet.livejournal.com
Сочувствую )

Спасибо за объяснение )

Date: 2009-11-27 09:39 pm (UTC)
From: [identity profile] alexott.livejournal.com
оно имя собственное уже много лет :-)

Date: 2009-11-27 07:52 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Протестую! В правильной системе размер лифчика зависит от фазы менструального цикла. ;)

Date: 2009-11-27 09:33 pm (UTC)
From: [identity profile] clayrat.livejournal.com
Если писать всё на "лиспе" (чем-нибудь достаточно шустром интерпретируемом и достаточно абстрактном), и повесить внутрь шустрого рантайма, то реализумо вполне, думаю.

Date: 2009-11-27 11:39 pm (UTC)
From: [identity profile] demon-gloom.livejournal.com
Вопрос не в "на чем?". Вопрос в "как?". Меня кстати тоже интересует.

Date: 2009-11-28 09:13 am (UTC)
From: [identity profile] theiced.livejournal.com
Ну чо - мастер функа, которая в зависимости от фазы луны вызывает нужный вариант (грубо). Как реализовать - в зависимости от платформы. Будь то элегантное решение в лиспах или там жабские аспекты или кошмар с `class RasschetProvodokSTretjeyFazyLunyPoChetvertuju17800GodaEraOpezdola` с мастер классом.

С данными вот сложнее. Если идёт ввод `задним числом` то надо дёрнуть все последующие `конвертации`. Если данные непротиворечивы - то всё просто, а если противоречивы - то две копии хранить, хуле.

Date: 2009-11-28 09:15 am (UTC)
From: [identity profile] theiced.livejournal.com
И да - счастье если юзеры спят по ночам. А вот если остановка системы на 5 минут == куча геммора и согласовний - то пиздец совсем.

Date: 2009-11-28 09:26 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да, с данными - нужно бранчи делать и мержить их, т.е. разницу в текущем периоде прокладывать.

Date: 2009-11-29 02:03 pm (UTC)
From: [identity profile] sergiej.livejournal.com
Это как-то негибко. Если данные обрабатывались/должны обрабатываться разными методами, то признак конкретной версии метода лучше держать при самих данных.

Date: 2009-11-30 07:40 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Можно попробовать сделать по мотивам Эрланга. Там есть версионность обновления и замена функционала на лету. Версионность сделана так, что хранится и старая и новая версия софта, и если новая ломается, то можно откатиться к старой. В сборке указывается что куда заменять при апгрейде и при даунгрейде.
А для обновления на лету передаются новые обработчики для основных циклов каждой задачи. В новом обработчике можно создать новые записи в базе и никакой миграции не понадобится.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 9th, 2025 09:33 pm
Powered by Dreamwidth Studios