Вуду^5

Mar. 31st, 2010 05:40 pm
metaclass: (Default)
[personal profile] metaclass
Генерил кодогенератором опердень, понадобилось добавить способ описания предикатов проверки прав доступа пользователей (типа "этот пользователь видит только данные своего филиала, или же только относящиеся к налоговой инспекции в городе где этот филиал"). Ну отдельные проверки понятно - запрос типа "exists(select 1 from UserDepartments where UserID=current_user and DeptID=OperdenTable_DeptID)" но мне понадобилось их объединять в итоговый предикат отдельно описанными логическими функциями.
Не нашел ничего лучше, как вкрутить первый попавшийся в гугле под руки парсер s-выражений на F#, который был там приведен как пример использования fsyacc и fslex, затем буквально за 5 минут написал конвертор этих выражений в условия для where в sql-запросах.

Т.е., ко всей этой опердени на смеси SQL,F#,дельфи и жутких xml-метаданных еще добавилось и подмножество лиспа :)

Кстати, весь модуль опердени (2 справочника, 4 ведомости, куча проверок, внешних ключей и зависимостей от других модулей)), ради которого это все затевалось, за полдня на оном безумии сделала специально вышедшая из декрета сотрудница.

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

Date: 2010-03-31 06:28 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Там, по идее, подразумевается, что лисп приползает в систему неявно. А у меня это сознательное решение, оказавшееся, к тому же, очень удобным из-за наличия готового парсера.

Date: 2010-03-31 06:09 pm (UTC)
From: [identity profile] denisioru.livejournal.com
"Генерил кодогенератором опердень" звучит как скороговорка.

Date: 2010-03-31 06:11 pm (UTC)
From: [identity profile] deni-ok.livejournal.com
опердень кодогенерировали-кодогенерировали, кодогенерировали-кодогенерировали, кодогенерировали-кодогенерировали, да не выкодогенерировали

Date: 2010-03-31 07:00 pm (UTC)
From: [identity profile] nivanych.livejournal.com
Идея хороша.
Но, имхо, лучше будет так её реализовать -

Генерировали мы опердень, генерировали,
кодогенерилками кодогенерировали, но только
быдло-недо-выкодогенерировали.

Date: 2010-03-31 06:09 pm (UTC)
From: [identity profile] dmzlj.livejournal.com
Угу.

Date: 2010-03-31 10:07 pm (UTC)
From: [identity profile] theiced.livejournal.com
А у меня в гродно есть психиатрша знакомая. Работает в больничке с особо запущенными случаями (15км от гродно). Познакомить?

Date: 2010-04-01 09:33 am (UTC)
From: [identity profile] lastwalrus.livejournal.com
Да мы и ближе найдём если чё :)

Date: 2010-04-01 02:57 pm (UTC)
From: [identity profile] theiced.livejournal.com
Вот знакомую ту не удалось уломать на тест драйв - полежать пару дней, покушать вкусных колёсиков... Организуете? :]
From: [identity profile] geovit.livejournal.com
Но, тем не менее, теперь я понимаю, почему нормальных готовых решений с кодогенерацией опердени почти не существует. Там надо учесть столько мелочей (в модели и кодогенераторе), что это пригодно либо только для очень ограниченных решений, либо становится настолько сложным, что никто этим пользоваться не станет.
Ну можно ещё генерить модель и кодогенератор. Но это занятие для Генеральных Конструкторов.
PS. В моём быдлоадминском воображении после беглого ознакомления с переводом "Practical Common Lisp" (http://pcl.catap.ru) и разными инструкциями по выкрутасам в PowerShell, очень заманчиво выглядит генерация Common Lisp'ом админских скриптов для винды.
From: [identity profile] metaclass.livejournal.com
Модель генерируется из самой себя тем же кодогенератором. Это вообще ключевой аспект всей затеи был.

А вот в кодогенераторе сгенерить можно только маппинг "база данных моделей -> внутренние структуры" и я пока до этого не добрался, потом сделаю.
From: [identity profile] ilya-portnov.livejournal.com
Не модель. Надо чтобы опердень сама себя кодогенерировала. Будет тру-кошерная самогенерирующаяся из ничего рекурсивная опердень.

Date: 2010-04-01 06:28 am (UTC)
From: [identity profile] aamonster.livejournal.com
Циничный вопрос: а насколько благородный рэб документирует кодогенераторы для опердени? Т.е. когда его заберут в дурдом - фирма загнётся или нет? ;-)

Date: 2010-04-01 06:51 am (UTC)
From: [identity profile] metaclass.livejournal.com
оно самодокументируемое, из модели будет еще и дока в латехе генерироваться все загнется нахер.
Скажут делать обычным образом и документировать все - потребую еще больше увеличить зарплату и время на работу увеличить в 4 раза.

Date: 2010-04-01 07:11 am (UTC)
From: [identity profile] aamonster.livejournal.com
Ну, если "обычным образом" == "без кодогенерации" - то это несерьёзно в любом случае.

А в остальном - контору жалко.

Date: 2010-04-01 07:48 am (UTC)
From: [identity profile] metaclass.livejournal.com
Не соображу, в каком смысле несерьезно.

А конторе раньше нужно было думать, чтобы я делом занимался, вместо того, чтобы снимать с помощью изучения ФП и хаскеля стресс от переключения между 10 проектами разной степени тупизны.

Date: 2010-04-01 07:49 am (UTC)
From: [identity profile] aamonster.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 Oct. 11th, 2025 01:13 am
Powered by Dreamwidth Studios