Здравствуйте, netch80, Вы писали:
N>·>Ты сам шутишь, с шашкой наголо на танки.
N>Так вся разница пока в том, что эта шашка ещё не доросла до гаубицы.
N>Пару лет развития и вообще в Большую Берту превратится...
В смысле в аналог linq? И в чём прикол точить эту шашку два года, когда есть готовая.
N>·> Давай-ка добавь хотя бы ещё два параметра, посмеёмся вместе:
N>Именно в этих — проблемы нет (если ты ничего не скрыл).
N>Просто кусок марудной работы, в которой очень легко сделать тупую ошибку.
Ну собственно да, код становится страшным, нудным, трудно-тестируемым и сложным в поддержке. alex_public это и не понимает, так же как с call-site не понимал, я решил ему и это разжевать.
N>>>Сразу дисклеймер: нет, я не поддерживаю позицию alex_public, что это всё лучше делать так вручную — хотя бы потому, что я банально ленив (той ленью, которая достоинство программиста), и в первую очередь побежал бы за готовым средством. Но и рассказ про 1024 варианта, мягко говоря, неадекватен.
N>·>Да к тому же ты не compile-time генерацию предложил, твой питонный код источник жутких тормозов, т.к. не обладает Нулевым Оверхедом™.
N>Питон — это потому, что мне легче на нём быстро формулировать. Мог быть любой другой язык.
Так собственно linq это и делает у себя внутрях по сути во время runtime, а alex_public говорил что это тормоза — используйте compile time.
N>Ты не понял другое (может, я криво объяснил). Я не верю, что компилятор сам соптимизирует это в compile time в готовые выражения — для этого он должен сгенерировать 1024 ветки. Обычно компиляторы так не поступают
Тут alex_public обещал в compile_time все запросы генерить, читай выше.
N>Показанный код был для метагенератора исходника. (А, теперь понимаю — надо было не if categoryFilter is not None, а if generatingWith('categoryFilter') или как-то похоже.) Вот если это сгенерировано — то уже компилятору деваться некуда.
Зачем ещё исходники генерить? Вот linq использует expression tree и генерацию runtime, как я понимаю.
N>А в случае безвариантно заданного вида запроса и целевого движка — да, можно сделать такой набор шаблонов, чтобы он генерировал запрос ещё при компиляции. Но мне бы не понравился выходной бинарь с, например, 1024*12 веток кода... как-то это противоестественно. Несмотря на то, что "Нулевой Оверхед", который ты вспомнил (чьё?), похоже,таки будет.
Ты не читаешь что-ли топик? Я ж вообще-то alex_public отвечал, например тут
Тормознутость и кривость linq читай "linq привносит оверхед в рантайм" и выше по топику.