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

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

·>Неверно при условии "на любом языке". За базу надо брать код в маш-кодах.

Ты похоже не осознаёшь масштабы временных задержек, о которых говоришь. Даже самый тормознутые мейнстрим языки (Python и PHP) выполнят указанный пример на порядки быстрее времени обработки запроса в СУБД. Т.е. разница между языками вообще тут не принципиальна.

_>>Да это практически мгновенные операции на фоне времени исполнения самого запроса. А вот тормоза linq (происходящие от рефлексии) вполне себе сравнимы и даже частенько превосходят время исполнения запроса.

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

Ты похоже путаешь просто linq и linq2database. В первом случае у нас действительно исполняется само выражение. А во втором случае совсем другая схема — выражение используется по сути как набор данных (дерево) из которых генерируется sql текст.

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

·>Ты не показал решений без каких-либо накладных расходов в рантайме (Нулевой Оверхед™), или я что-то не знаю и супер-мета-пупер-языки query+=" and ..." умеют выполнять в компайл-тайме? Хочется услышать что конкретно ты называешь накладными расходами.

Эм, тебе надо в тысячный раз повторить, что это как раз и рассматривается за базис от которого отсчитываются накладные расходы? ) Но кстати даже если бы и рассчитывать от формально заданной на этапе компиляции строки, то всё равно почти ничего не изменилось бы. Подобный код склейки строк выполняется за пренебрежимо малое время в сравнение с выполнением даже самого быстрого запроса в РСУБД.

_>>Подобное легко реализуется на любом языке с развитым метапрограммированием. И даже в языке с не самым лучшим МП (типа C++) это тоже вполне реализуемо.

·>Можно пожалуйста объяснить и показать какая там происходит мета-магия?
·>Твоё query.where.add() как я понимаю строит дерево выражения (ничего не напоминает?) из контейнеров и палок, которое потом интерпретируется для склейки текста запроса. Можно пояснить за счёт чего интерпретация работает быстрее маш-кодов?

Нет, дерево выражений строится на этапе компиляции. Но отдельные его элементы могут быть доступны для модификации. )
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.