Описание topolsort :

  Автор -- Anatoly Zaretsky 

  Версия -- $Id: topolsort.txt 563 2007-02-12 13:35:48Z cray $

  URL -- $URL: https://code.keysolutions.ru/svn/ks.lib/trunk/src/ks/lib/topolsort/topolsort.txt $

  Идея -- Andrey Orlov
  
  Утверждаю -- Andrey Orlov

  Аннотация:

    Модуль предоставляет функцию, выполняющую топлологическую сортировку так,
    как описано у кнута.

  Идея реализации:

    Внешний интерфейс:

        - На вход процедуры поступают сортируемые элементы;

        - Каждый сортируемый элемент имеет атрибуты:

            name -- имя (симвлольная строка);

            requires -- список име (символьных строк);

        - С выхода процедуры сортировки снимается отсортированный (топологически)
          список элементов;

        - Если по окончании сортировки остались не отсортированные элементы,
            генерируется исключение SortIsNoPossible, в параметре которого
            возвращается список неотсортированных элементов;

        - При возврате списка используются генераторы (yield) если это позволяет
            используемый алгоритм (я не помню чесгря);

    Базовый интерфейс:

        На вход поступает список пар (объект, (зависимость, ..., зависимость)),
        Зависимости - из тех же самых объектов, например::

            a, b, c = (object() for _ in range(3))
            for obj in BaseTopSort([(a, (b, c)), (b, (c,))]):
                ...

    Другая версия внешнего интерфейса:

        Все тоже самое, только вместо имен используются ссылки.

    Реально использоваться будет первая версия интерфейса, но вторая
    более перспективна. Нужно реализовать это както объектно-ориентированно,
    что бы перекрывался один метод и вместо ссылок использовались имена - 
    ну или наоборот.
