Пост навеян свежим
ПФП. Статья про circumflex, вот этим вот:
// Выбрать все города Швейцарии, вернуть Seq[City]:
SELECT (ci.*) FROM (ci JOIN co) WHERE (co.code LIKE ”ch”)
ORDER_BY (ci.name ASC) listСтоило ли огород городить, если на выходе всё равно получается нечто, что
(
Read more... )
Реквестирую наглядных примеров, в которых статически типизированные запросы ломаются, а динамически типизированные нет.
И где же конфликт со статической типизацией в отображении кода модели в схему БД? Через reflection вполне можно реализовать (и реализуют) автоматическую миграцию схемы.
Reply
> статически типизированные запросы ломаются,
> а динамически типизированные нет
В такой формулировке, это невозможно даже теоретически - динамическая типизация, это частный случай даже самой примитивной статической.
Reply
Reply
Соорудить, всего лишь, параметрический полиморфизм с Hindley-Milner'ом, навроде ML'евой системы типов, это уже не элементарная задача, хотя и вполне доступная подготовленному человеку.
В то время, как динамические типы способен соорудить любой студент хоть на сишечке. Ну, с поправкой - качественно лямбды не любой соорудит - к сожалению, образование 95% студентов по "компьютерным" специальностям этого не позволяет.
Так что, "частнослучайенность" этих понятий качественно различная.
Reply
С каких пор реализация тривиального, прекрасно описанного в литературе алгоритма на 100 строчек, стала чем-то неэлементарным? Это разве что на лабораторную работу для второго курса тянет, не больше.
> В то время, как динамические типы способен соорудить любой студент хоть на сишечке.
С одной поправкой - все это будет криво, глючно и тормознуто. А вот сделать так, чтобы оно работало нормально - это уже действительно сложная задача, не какой-нибудь протухший хиндли-милнер.
Reply
Reply
http://sbcl-internals.cliki.net/tag%20bit
http://planet.sbcl.org/
http://insidelisp.blogspot.com/
Reply
Reply
Reply
Reply
> С одной поправкой - все это будет криво, глючно и тормознуто.
Ну а таки интересно, если без лямбд, то где там препятствия??
Даже и оптимизация получается почти примитивной.
Reply
Да ладно, "SELECT *" явно сломается в рантайме, если в класс добавить поле не в конец, а в середину :)
> И где же конфликт со статической типизацией в отображении кода модели в схему БД? Через reflection вполне можно реализовать (и реализуют) автоматическую миграцию схемы.
Миграцию схемы можно хоть отдельным перловым скприптом сделать, я же показал, как это можно делать на компиляции.
Да и потом, идея поста -- это не только обнаружение неконсистентности, а еще и автоматизация последующего рефакторинга.
Reply
Reply
Ну так сломается, если удалить поле.
> Статическая типизация мешает делать миграцию на этапе компиляции? Мне кажется, вы исходите из неверной предпосылки, что кодогенерация и метапрограммирование есть только в языках с динамической типизацией, а это не так.
Да нет же, у меня была другая предпосылка.
Пост же про то, что бессмысленно пытаться следить за консистентностью типизацией запросов, ее гораздо проще достичь кодогенерацией, которая параллельно дает еще кучу приятных бонусов.
Reply
Leave a comment