2012-03-27
Несплошные структуры
Структуры, в принципе, не обязаны быть сплошными. Компилятор мог бы, в принципе, хранить часть данных отдельно, оптимизируя патерны доступа и locality, но в современных языках до этого обычно не доходит. Как редко доходит и до несплошного стека, впрочем, я сегодня не об этом. В предыдушие выходные я выкинул из своего домашнего проекта иерархию классов, заменив классы несплошными структурами, до сих пор не могу нарадоваться, насколько все стало проще и понятнее.
Итак было синтаксическое двоичное древо. С узлами и листьями, которые все наследовались от базового класса, содержащего пару указателей, и нескольких обязательных полей. Наследуемые классы имели несколько виртуальных методов и некоторые контекстно-зависимые данные. Классов в синтаксическом дереве было, как операций в языке, несколько десятков. Был такой огромный файл с их определениями.
class Node {
Node *left, *right;
Lexem lexem;
OpCode code;
Type type;
public:
Node();
virtual ~Node();
...
};
class ConstantNode : public Node { ... };
class IntNode : public ConstantNode { ... int value; ... };
class StringNode : public ConstantNode { ... double value; ... };
...
class Op1Node : public Node { ... };
class MinusOpNode : public Op1Node { ... };
...
class Op2Node : public Node { ... };
class AddNode : public Op2Node { ... };
...
Node *left, *right;
Lexem lexem;
OpCode code;
Type type;
public:
Node();
virtual ~Node();
...
};
class ConstantNode : public Node { ... };
class IntNode : public ConstantNode { ... int value; ... };
class StringNode : public ConstantNode { ... double value; ... };
...
class Op1Node : public Node { ... };
class MinusOpNode : public Op1Node { ... };
...
class Op2Node : public Node { ... };
class AddNode : public Op2Node { ... };
...
В результате я выкинул все эти классы. Оставил структуру, почти без внутренних методов:
struct Node {
Node *left, *right;
Lexem lexem;
OpCode code;
Type type;
void *ext;
Node() : ext(0){ ... }
~Node(){ delete ext; }
};
Node *left, *right;
Lexem lexem;
OpCode code;
Type type;
void *ext;
Node() : ext(0){ ... }
~Node(){ delete ext; }
};
Важное отличие здесь - поле ext. Оно указывает на контекстно-зависимые данные для данной node. Фактически это продолжение структуры. То, что было непрерывно в классе теперь разорвано, и содержит дополнительный уровень indirection. Однако это дает и преимущества.
Во многих случаях никакого продолжения вообще нет, указатель просто нулевой.
Появляется возможность менять тип узла на месте. Так у меня работает компилятор, меняя тип по мере того, как удается что-то вычислить новое про данный узел. Сначала, после первого прохода компилятора, строится синтаксическое дерево, но никакой информации оно не содержит, кроме кодов операций. По мере вычислений типов заполняется поле type и иногда создаются вспомогательные структурки с дополнительными деталями и присваиваются полю ext. Дальше происходят некоторые другие вычисления и поле ext получает новое значение.
На самом деле все несколько сложнее, но идея та же. Как ни странно, оказалось, что почти никаких виртуальных методов мне не надо, таблица функций, индексируемая полем code делает все то же самое.
Какова же мораль? Мораль такова, что не все есть объект. Объект - это черный ящик. А иногда черный ящик не удобен, иногда нужна прозрачность, индексируемость. Синтаксическое дерево - вполне себе хороший объект. А узел дерева - вовсе не обязательно. База данных может быть объектом, но записям в базе данных лучше не быть объектами, а быть записями - структурами, состоящими из полей. Объект - там, где надо скрыть внутреннюю структуру, непосредственные данные - там где внутренняя структура должна быть легко доступна.
2012-03-17
Опять олени.
На мотоцикле удобно фотоохотиться. Можно встать на узкой обочине там, где нельзя остановиться на машине.
2012-03-16
2012-03-14
Старик Хоттабыч
Поскольку нормальной ванны в наших домах нет, а погреться иногда хочется, я наконец собрался, задушил жабу и купил ванну внешнюю, которая называется Spa или Hot Tub. В процессе узнал много нового. Оказывается, это не так просто, как ванна в ванной.
Будучи в отпуске, я довольно часто останавливался в местах, где есть бассейн и спа, и не отказывал себе в удовольствии погрузить свои солнечные ожоги в теплую воду и лениво поучаствовать в ненавязчивой беседе. Но только недавно с удивлением узнал, что спа не подключается ни к водопроводу, ни к канализации. Чистота воды поддерживается химикатами и всякими озонаторами в течении 2-3 месяцев, а затем вода просто выливается в соседский огород и заливается заново из садового шланга.
Воду я периодически вожу к дилеру на анализ, где проверяется жесткость, pH, alkalinity и что-то еще. Они распечатывают мне рекомендацию, чего и сколько добавить и в какой последовательности.
Еще одно открытие состояло в том, что эта штука работает как термос и все время поддерживает воду в нагретом виде. Для этого есть специальная крышка. Кстати, пришлось провести отдельный провод на 220V и 50A. Обычные розетки в домах на 120V, но для этой штуки требуется 220. И тем не менее, в первый раз вода нагревалась 8 часов. Те ванны, которые работают от 120V нагреваются за двое суток.
Бывают спа квадратные, со специальными лежанками и водным массажем по всему телу. А мы купили попроще и подешевле, как говорит Лена, "кастрюльку". Но массажные сопла у нее есть по стенкам, туда можно набить аж пять человек, хотя это будут уже почти шпроты. А еще мне нравится вечером включать подводную подсветку, светодиоды меняют цвет, получается красиво. Надо еще купить водонепроницаемые наушники и ловить кайф по полной программе.
Вот я и исполнил одно из своих желаний. Купил себе Хот Таб. Сижу в ней, глажу бороду, смотрю, на сколько еще желаний моей бороды хватит.
Будучи в отпуске, я довольно часто останавливался в местах, где есть бассейн и спа, и не отказывал себе в удовольствии погрузить свои солнечные ожоги в теплую воду и лениво поучаствовать в ненавязчивой беседе. Но только недавно с удивлением узнал, что спа не подключается ни к водопроводу, ни к канализации. Чистота воды поддерживается химикатами и всякими озонаторами в течении 2-3 месяцев, а затем вода просто выливается в соседский огород и заливается заново из садового шланга.
Воду я периодически вожу к дилеру на анализ, где проверяется жесткость, pH, alkalinity и что-то еще. Они распечатывают мне рекомендацию, чего и сколько добавить и в какой последовательности.
Еще одно открытие состояло в том, что эта штука работает как термос и все время поддерживает воду в нагретом виде. Для этого есть специальная крышка. Кстати, пришлось провести отдельный провод на 220V и 50A. Обычные розетки в домах на 120V, но для этой штуки требуется 220. И тем не менее, в первый раз вода нагревалась 8 часов. Те ванны, которые работают от 120V нагреваются за двое суток.
Бывают спа квадратные, со специальными лежанками и водным массажем по всему телу. А мы купили попроще и подешевле, как говорит Лена, "кастрюльку". Но массажные сопла у нее есть по стенкам, туда можно набить аж пять человек, хотя это будут уже почти шпроты. А еще мне нравится вечером включать подводную подсветку, светодиоды меняют цвет, получается красиво. Надо еще купить водонепроницаемые наушники и ловить кайф по полной программе.
Вот я и исполнил одно из своих желаний. Купил себе Хот Таб. Сижу в ней, глажу бороду, смотрю, на сколько еще желаний моей бороды хватит.
2012-03-02
Путин
При Путине, конечно, не все так плохо, как могло бы быть. А могло бы быть очень плохо. Я даже не могу сказать, что он хуже других кандидатов.
Но! Идя на третий срок, он сознательно нарушает конституцию. Мне, конечно скажут, что он не нарушает буквально. Забыли, господа, юриспуденцию. Есть буква закона, есть дух закона. Т.е. цель введения данного закона. Буква может быть не точна, задача конституционного суда эту неточную букву поправить. Он, конституционный суд, не справился, не поправил. Оказался не независим. Зачем вообще прописывать в конституции ограничение в два срока *подряд*? Какой в этом смысл? Вот вам и доказательство - получаем такую вот условную смену президентов, что есть нарушение *конституционной идеи*.
Естественным образом власть в патриархальных обществах азиатской модели, типа российского, всегда схлопывается к модели "патриархии". Т.е. лидер выбираемый узким кругом пожизненно. Не только политбюро с генсеком, но и академия наук так и избиралась. В еще более азиатском случае преемником лидера всегда будет сын.
Какова может быть причина? Только одна - крупный бизнес делается на доступе к ресурсам. Если лидер меняется, клан быстро теряет доступ и может быть заменен другим. А чтобы не вставляли палки в колеса - головы с плеч, ну или в тюрьму.
Почему клан не может найти несколько кандидатов и раскручивать их по очереди, соблюдая видимость приличия, вне моего понимания. Проблема кадров? Наверное так просто проще. Вот не прокатит по-наглой, тогда будут заморачиваться. А пока прокатит и так.
Но! Идя на третий срок, он сознательно нарушает конституцию. Мне, конечно скажут, что он не нарушает буквально. Забыли, господа, юриспуденцию. Есть буква закона, есть дух закона. Т.е. цель введения данного закона. Буква может быть не точна, задача конституционного суда эту неточную букву поправить. Он, конституционный суд, не справился, не поправил. Оказался не независим. Зачем вообще прописывать в конституции ограничение в два срока *подряд*? Какой в этом смысл? Вот вам и доказательство - получаем такую вот условную смену президентов, что есть нарушение *конституционной идеи*.
Естественным образом власть в патриархальных обществах азиатской модели, типа российского, всегда схлопывается к модели "патриархии". Т.е. лидер выбираемый узким кругом пожизненно. Не только политбюро с генсеком, но и академия наук так и избиралась. В еще более азиатском случае преемником лидера всегда будет сын.
Какова может быть причина? Только одна - крупный бизнес делается на доступе к ресурсам. Если лидер меняется, клан быстро теряет доступ и может быть заменен другим. А чтобы не вставляли палки в колеса - головы с плеч, ну или в тюрьму.
Почему клан не может найти несколько кандидатов и раскручивать их по очереди, соблюдая видимость приличия, вне моего понимания. Проблема кадров? Наверное так просто проще. Вот не прокатит по-наглой, тогда будут заморачиваться. А пока прокатит и так.
Subscribe to:
Posts (Atom)