metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2008-12-13 01:25 am

ORM

Чтение споров про ORM приводит меня в дикое уныние. Такое ощущение, что все мегагуру-разработчики языков программирования никогда сами не писали DB-centric applications и поэтому ни один язык общего назначения для ORM не подходит в принципе.
Единственное, что мне приходит в голову в этом плане - это язык, у которого докомпиляция бы производилась уже в рунтайме, с метаданными из живой базы. Или же чтобы код автоматически генерился и компилировался при разработке тоже из метаданных базы, а в рунтайме производилось сравнение метаданных на которых прога компилировалась и на которых ее запускают.
На данный момент из похожего - разве что Nemerle с его метапрограммированием на макросах, но это ж экспериментальное шыло, без развитой userbase.

[identity profile] max-posedon.livejournal.com 2008-12-13 05:48 pm (UTC)(link)
в Ruby (используя activerecord) это Table.count(:conditions => ["field > ?", 5])

[identity profile] slonopotamus.livejournal.com 2008-12-13 05:57 pm (UTC)(link)
Не, не то. Условие для фильтрации - нормальная лямбда. Объект, получающийся после фильтрации - полноценная коллекция. По которой можно итерироваться, у которой можно спрашивать размер. Зачем для работы с таблицой и работы со списком tuple'ов иметь разный api? Пусть будет одинаковым.

[identity profile] gds.livejournal.com 2008-12-13 09:02 pm (UTC)(link)
ну придумайте, кто мешает; а если будет так, что условием _действительно_ сможет служить "нормальная лямбда", и всё это будет эффективно работать (хотя бы транслироваться в эффективный sql) -- памятник поставят, и даже не потомки, а современники.

[identity profile] max-posedon.livejournal.com 2008-12-13 09:34 pm (UTC)(link)
А можете привести маленький test case, чего ИМЕННО вы бы хотеле на простых примерах, что-то у меня ощущения, что вам пора искать рабочих, на паятник 37signals .)
Я бы попробывал доказать, что ruby+activrecord проходит этот тест.

[identity profile] gds.livejournal.com 2008-12-14 10:38 am (UTC)(link)
интересует трансляция произвольных чистых функций в sql, без client-side фильтрации. Так как к чистым лямбдам относится и комбинатор для построения рекурсии, сюда же относятся произвольные рекурсивные функции. Думаю, теперь пример не особо нужен.
Однако могу на слово поверить, что упомянутая комбинация проходит тест посредством в том числе фильтрации выборки на клиенте после получения какого-либо результата от БД.

[identity profile] max-posedon.livejournal.com 2008-12-13 09:32 pm (UTC)(link)
1. Table.count(:conditions => ["field >?", 5]).size полный аналог того что у вас:
вместо hash-а тут может быть ляvбда(proc-объект в ruby) которая должна вернуть хэш
и да, резулльиатом Table.find(:conditions => ["field > ?", 5]) является коллекция.
В общем если интересно, можете почернуть документацию по activerecord, там действительно всё очень вкусно, `лямдануто` и отлично.

2. а это можно использывать в любом haskell app? или чёткая привязка к happs?


[identity profile] slonopotamus.livejournal.com 2008-12-14 08:25 am (UTC)(link)
1. Нате вам список чисел: [1..10]. Отфильтруйте те, которые больше 5 и посчитайте размер. После чего возьмите таблицу с полем с числами от 1 до 10. Отфильтруйте те, которые больше 5 и посчитайте размер. Подумайте, почему вам приходится использовать настолько разный api.

2. Я пока не смог понять. У них совершенно нет документации, а посможив это на моё чисто теоретическое знание хаскела получается не очень внятно. Думаю что к веб-части оно никак не привязано.

[identity profile] metaclass.livejournal.com 2008-12-14 10:55 am (UTC)(link)
Это client-side?
Вообще идея хорошая, конечно, но генерить из этого серверные запросы было бы еще веселее. В Микрософт для этих целей делали Linq2SQL, но похоже, они его загубили в итоге.