Толочь воду в ступе

Apr 15, 2011 00:43

Пост навеян свежим ПФП. Статья про circumflex, вот этим вот:

// Выбрать все города Швейцарии, вернуть Seq[City]:
SELECT (ci.*) FROM (ci JOIN co) WHERE (co.code LIKE ”ch”)
ORDER_BY (ci.name ASC) listСтоило ли огород городить, если на выходе всё равно получается нечто, что ( Read more... )

article, typing, orm, common lisp, macros, sql, dsl, lisp, metaprogramming, pfp

Leave a comment

thedeemon April 15 2011, 05:54:41 UTC
Хм. Я так понимаю, есть три сущности: 1) код на языке Х, 2) SQL запросы и 3) база. В одном случае нам гарантируют консистентность 1 и 2, а в другом обеспечивается согласованность 1-2-3 в момент сборки, но в рантайме согласованность 2 и 3 все равно никто не гарантирует, т.к. база может меняться. К вопросу статической или динамической типизации это вообще не относится. Никто не мешает в статическом случае добавить проверку соотвествия 1-2 и 3 в момент сборки или, что еще лучше, в момент запуска программы.

Reply

swizard April 15 2011, 07:43:25 UTC
> но в рантайме согласованность 2 и 3 все равно никто не гарантирует, т.к. база может меняться

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

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

Reply

rastafarra April 15 2011, 07:45:38 UTC
> править проект надо во всех местах руками.

а все места --- это какие?

Reply

swizard April 15 2011, 07:50:09 UTC
Где выполняются типизированные запросы к бд и из результатов конструируются объекты языка

Reply

rastafarra April 15 2011, 08:19:36 UTC
это вроде собрано обычно и лазить "по всем местам" --- это не так далеко, не?

Reply

swizard April 15 2011, 08:47:22 UTC
Не

Reply

thedeemon April 15 2011, 10:18:42 UTC
>отловить ошибку и (если изменения были минорными) прямо в рантайме перекомпилировать необходимые классы и методы.

Это нужно уж совсем минорные изменения и сильно умную программу.

>А вот кодогенератор не только гарантирует консистентность, он еще и берет на себя эту рутину.

Да, метапрограммирование/кодогенерация тут рулят, с этим не спорю. Просто к вопросу типизации это не относится. Ребе метакласс вон на статически типизированнх языках так генерит себе свои опердени.

Reply

swizard April 15 2011, 11:07:32 UTC
Да я разве что говорю, генерить опердень можно и на шелл-скриптах :) Это как раз правильный подход для обеспечения консистентности. А неправильный -- это типизировать SQL-запрос.

Reply

rigidus June 23 2011, 19:58:25 UTC
Спасибо за пост и комменты - я взял на вооружение этот подход и теперь очень доволен - меньше времени сижу за оперденью - больше времени катаюсь на мотоцикле :)
Спасибо!

Reply


Leave a comment

Up