Changes between Version 2 and Version 3 of ru/DOM


Ignore:
Timestamp:
Feb 14, 2013, 3:31:44 PM (9 years ago)
Author:
vadim.godunko
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • ru/DOM

    v2 v3  
    1919
    2020Можно сделать DOM API более "похожим" на Ada, в частности класс !CharacterData имеет несколько подпрограмм работы со строками, в которых доступ осуществляется через смещение:длину, а не позиционно, как в Ada. Поскольку мы не претендуем на иеальность соответствия, можно переделать эти подпрограмм на использование индекса первого/индекса последнего символа и нумеровать символы с 1 (в любом случае мы уже отошли от рекомендации, правда в дозволенных пределах, когда начали представлять данные в виде Unicode строк, а не 16-битных кодов).
     21
     22== Управление памятью ==
     23
     24Хочется иметь простой и понятный способ автоматического управления динамической памятью.
     25
     26=== Использование подсчёта ссылок ===
     27
     28В дереве DOM недопустимы циклические графы, это позволяет использовать простой алгоритм подсчёта ссылок. Для устранения проблемы со ссылками двух узлов друг на друга в отношении родитель-потомки родительский узел увеличивает счётчик ссылок дочернего узла при добавлении в список потомков. Каждый объект-обёртка также увеличивает счётчик ссылок при использовании внутреннего узла.
     29
     30При всём этом возникают следующие концептуальные проблемы:
     31
     32 - если последняя ссылка на родительский узел теряется, но при этом остаётся ссылка на дочерний элемент, получается что родительский элемент уничтожается, у дочернего обнуляется свойство-ссылка на родительский узел. Как вариант решения можно все "висящие" элементы соединять с DOM::Document их создавшим. Но это не решает следующей проблемы;
     33 - если последняя ссылка на DOM::Document тряется, но при этом остаются ссылки на дочерние узлы - документ частично разрушается. Пока не понятно как это преодолеть.