Re[91]: Тормознутость и кривость linq
От: · Великобритания  
Дата: 27.04.16 21:03
Оценка:
Здравствуйте, 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 привносит оверхед в рантайм" и выше по топику.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.