LINUX.ORG.RU

История изменений

Исправление pon4ik, (текущая версия) :

Пример такого поведения - обход AST,с целью оптимизации констант. Типа превратить a * c + ((2 -1) * 3) => a * c + 3, что бы ускорить вычисления.

Очевидно, что оптимизировать можно только выражения, содержащие только константы. Тогда как вычисляются элементы такого дерева через примерно такой интерфейс:

struct Expression {
    virtual double eval() = 0;
};

Но, даже тут лучше использовать ручную реализацию двойной диспетчеризации.

Исправление pon4ik, :

Пример такого поведения - обход AST,с целью оптимизации констант. Типа превратить a * c + ((2 -1) * 3) => a * c + 3, что бы ускорить вычисления.

Очевидно, что оптимизировать можно только выражения, содержащие только константы. Тогда как вычисляются элементы такого дерева через примерно такой интерфейс:

struct Expression {
    virtual double eval() = 0;
};

Но, даже тут лучше использовать ручную реализацию двойной диспетчиризации.

Исходная версия pon4ik, :

Пример такого поведения - обход AST,с целью оптимизации констант. Типа превратить a * c + ((2 -1) * 3) => a * c + 3, что бы ускорить вычисления.

Очевидно, что оптимизировать можно только выражения, содержащие только константы. Тогда как вычисляются элементы такого дерева через примерно такой интерфейс:

struct Expression {
    virtual double eval() = 0;
}

Но, даже тут лучше использовать ручную реализацию двойной диспетчиризации.