Re[11]: EntityFramework - тормоз
От: Evgeny.Panasyuk Россия  
Дата: 14.04.15 13:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ну ок, возьми не C#, а любой другой статически типизированный язык. В любом языке все придет к формированию деревьев выражений на основе конструкций языка, которые потом надо будет отобразить на метаданные классов и на базе этого построить SQL. Так что накладные расходы также будут присутствовать.


Вот конкретный пример: compile-time template engine
Автор: Evgeny.Panasyuk
Дата: 12.10.14

В compile-time делается анализ строки, и на основе этого генерируется определённая последовательность вызовов, результирующий ASM код получается идентичным тому, который соответствует полностью ручному оптимальному коду.
То есть из вот этого:
{
    int counter = 2;
    char character = '!';
    double value = 0.5;

    for_each_part
    (
        auto x,
        "val = $value$, cnt = $counter$, ch = $character$, again v=$value$;\n",
        counter, character, value
    )
    {
        print_it(x);
    };
}
Получается ASM код идентичный этому:
{
    int counter = 2;
    char character = '!';
    double value = 0.5;

    print_it("val = ");
    print_it(value);
    print_it(", cnt = ");
    print_it(counter);
    print_it(", ch = ");
    print_it(character);
    print_it(", again v=");
    print_it(value);
    print_it(";\n");
}
Можно производить и более сложные трансформации (в том числе и производить оптимизацию SQL) — compile-time вычисления на C++ полны по Тьюрингу.

Причём формирование деревьев выражений на основе конструкций языка это более простая задача чем анализ строк — и в C++ это было доступно аж с первой версии стандарта C++98. И на основе этого (compile-time обход деревьев выражений на основе конструкций языка) создано уже много разных EDSL (Embedded Domain Specific Language) библиотек.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.