Re[97]: Тормознутость и кривость linq
От: · Великобритания  
Дата: 30.04.16 20:08
Оценка:
Здравствуйте, alex_public, Вы писали:

_>>>Подобный код можно принять за базу, относительно которой рассчитывать накладные расходы. Причём это на любом языке. А вот потом уже на некоторых языках мы можем попытаться записать тоже самое удобнее, но чтобы при этом не добавлять тормозов.

_>·>Неверно при условии "на любом языке". За базу надо брать код в маш-кодах.
_>Ты похоже не осознаёшь масштабы временных задержек, о которых говоришь. Даже самый тормознутые мейнстрим языки (Python и PHP) выполнят указанный пример на порядки быстрее времени обработки запроса в СУБД. Т.е. разница между языками вообще тут не принципиальна.
Нет, я свожу к абсурду твою точку зрения. Хотя ты опять сам справляешься лучше. Вот сейчас сказал, что PHP тормоза не оказывают ощутимое влияние в случае работы с СУБД, а linq рефлексия (которой как выяснилось нет) вдруг стала источником тормозов?

_>·>А почему ты всё время говоришь что в linq используется рефлексия? Можно поподробнее где она там используется и для чего? Мои скромные познания .net говорят, что там используется expression tree, который компилируется на ходу в IL, а потом даже может JIT-ится в маш-коды, склеивающие текст запроса.

_>Ты похоже путаешь просто linq и linq2database. В первом случае у нас действительно исполняется само выражение. А во втором случае совсем другая схема — выражение используется по сути как набор данных (дерево) из которых генерируется sql текст.
Ок. Допустим. И причём тут рефлексия?
И чем принципиально этот набор данных отличается от такого if(categoryName) q.where.add(Category.name.like(*categoryName+"%"))?

_>>>Возможны ли какие-то решения близкие к linq (т.е. со статической проверкой sql кода, а не в виде sql строк), но без накладных расходов в рантайме.

_>·>Ты не показал решений без каких-либо накладных расходов в рантайме (Нулевой Оверхед™), или я что-то не знаю и супер-мета-пупер-языки query+=" and ..." умеют выполнять в компайл-тайме? Хочется услышать что конкретно ты называешь накладными расходами.
_>Эм, тебе надо в тысячный раз повторить, что это как раз и рассматривается за базис от которого отсчитываются накладные расходы? ) Но кстати даже если бы и рассчитывать от формально заданной на этапе компиляции строки, то всё равно почти ничего не изменилось бы. Подобный код склейки строк выполняется за пренебрежимо малое время в сравнение с выполнением даже самого быстрого запроса в РСУБД.
И чем этот базис отличается от linq-овского? Что конкретно делает linq такое, что создаёт этот самый оверхед?

_>·>Можно пожалуйста объяснить и показать какая там происходит мета-магия?

_>·>Твоё query.where.add() как я понимаю строит дерево выражения (ничего не напоминает?) из контейнеров и палок, которое потом интерпретируется для склейки текста запроса. Можно пояснить за счёт чего интерпретация работает быстрее маш-кодов?
_>Нет, дерево выражений строится на этапе компиляции. Но отдельные его элементы могут быть доступны для модификации. )
Как и в linq по сути. В чём отличие-то?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 30.04.2016 20:12 · . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.