Здравствуйте, alex_public, Вы писали:
_>>>Проблема не в том как используют рефлексию в linq, а в том, что её вообще используют. ))) В то время как она не нужна и можно всё сделать во время компиляции.
I>>Всё — нельзя.
_>Это ещё почему? ) Когда-то давно мы писали код типа db("select name from users where id="+id.to_string()). Это можно считать (на самом деле это конечно же не совсем так, но это тема уже совсем другого разговора, o необходимости sql и т.п.) за референсный пример с нулевым оверхедом. Теперь же мы хотим написать что-то вроде db(select(users.name).from(users).where(users.id==id)), чтобы sql запрос был проверен компилятором (плюс ещё несколько бонусов на тему безопасности и оптимизации под конкретные БД).
Ты в скобках сам себе ответил, при чем ажно дважды. Смена провайдера делается хоть в рантайме, хоть как угодно — без перекомпилирования. А в твоем случае придется перекомпилировать приложение, если вместо обычной БД я использую простое хранилище.
>Соответственно, если компилятор будет преобразовывать такой код в элементарное слияние sql строк (как в первом варианте), то можно считать, что мы получаем нулевой оверхед.
Прежде всего — кучу геморроя с деплойментом, да еще " ценой диких извратов внутри библиотеки".
_>Так вот даже C++ с его убогим метапрограммированием уже умеет такое (правда ценой диких извратов внутри библиотеки, но снаружи их всё равно не видно). А уж языки типа D или Nemerle такое вообще элементарно могут.
Такие фокусы, во первых, реализуются с помощью T4 безо всяких извратов, на обычном привычном языке.
Во вторых, эти фокусы _не_ _востребованы_
_>>>"разница в скорости между рефлексией и склейкой голых строк"? ) Это ты где такой чуши набрался? )))
I>>Тебя процитировал
_>Враньё. ) Покажи у меня такой нелепый текст. )
http://rsdn.ru/forum/flame.comp/6387248.1Автор: alex_public
Дата: 18.03.16