|
||||||||||
| [English] | Главная | Продукты | Кибернетика | Информатика | Философия |
|
|
| Главная Партнеры Продукты Статьи Форум Фотоальбом |
ТЗ на операционное ядро V1.05.00 (2005.05.22)
Введение Реализация нейронной сети на последовательной вычислительной машине требует разработки виртуальной машины. К эффективности языка реализации ядра виртуальной машины эмулирующей нейронную сеть с несколькими сотнями тысяч эмулируемых нейронов предъявляются повышенные требования. В результате, единственным кандидатом в качестве языка программирования для такой системы становится generic C (но уже не C++). Ядро необходимо разработать учитывая современные компонентные технологии. В противном случае будет невозможно реализовать полиморфное взаимодействие различных модулей ядра и динамическое изменение связей между ними. Существующие промышленные реализации компонентной идеологии, например Microsoft COM, слишком громоздки для применения в виртуальной машине, эмулирующей нейронную сеть требуемых размеров. Неэффективность COM в первую очередь связанна с необходимостью выполнять множество команд сравнения GUID при каждом вызове QueryInterface. В качестве компонентной архитектуры для реализации виртуальной машины семантической нейронной сети предлагается применить оригинальную разработку. Основное отличие предлагаемой архитектуры – отсутствие необходимости вызова QueryInterface и поиска нужного интерфейса по значению GUID. В условиях ядра виртуальной машины можно определить время жизни любого внутреннего объекта на этапе разработки. Поэтому в предлагаемой архитектуре отсутствует подсчет ссылок на объекты. Благодаря отсутствию подсчета ссылок увеличивается производительность ядра. Указатель на объект представляет собой указатель на структуру с данными объекта, а не на интерфейс. Этим обеспечивается отсутствие необходимости приведения указателя на объект к различным типам при множественном наследовании интерфейсов. Для описателя классов применяется специализированный диалект языка XML-IDL. На его основе генерируется прототипы объектов и прототипы методов.
XML-IDL позволяет описывать объектную модель приложения. Категория представляет собой описание множества всех интерфейсов поддерживаемых классами данной категории. Категория может включать любое количество интерфейсов. Интерфейс может принадлежать только одной категории. Каждый класс может принадлежать только одной категории. Допускается одиночное наследование классов. Допускается множественное наследование интерфейсов. Класс может реализовывать любое количество интерфейсов той категории которой он принадлежит. Классы не принадлежащие категории являются структурами данных без itbl/vtbl.
Метаконтексты. Под метаконтекстами здесь мы будем понимать все возможные точки зрения и структурные образования которые не включаются в реальный код системы, однако влияют на ее функционирование. Метаконтексты располагаются в сознании разработчика системы и представляют собой соглашения, представления, метафоры, заблуждения и т.д. которые разработчик применяет для описания программных внутренностей системы. В данном случае метаконтекстом, в первую очередь, является набор возможностей для состояния каждого участка программного кода системы. Так каждый участок системы просто своим наличием определяет то множество трэдов, переменных и их значений (объектов) которые могут появиться в этом участке в течение развития процесса. ВАЖНО: Информация из метаконтекста не может быть обработана в программном коде, однако есть возможность обработки этой информации на этапе компиляции.
IDL XML-IDLОбеспечивает описание модели интерфейсов с помощью языка XML Пример IDL
<include
file=""/>
<category
name="" type="" comment=""> описание IDL IDL Обеспечивает следующие возможности: <include file=""/> - Включает дополнительный файл IDL для обработки. В аттрибуте "file" задается путь к файлу. Может использоваться для разделения одного большого XML на несколько разных. <typedef
name=" " type=" "/>-
Определяет тип при генерации хеадера на языке
C.
Транслируется в конструкцию : Для описателя интерфейсов применяется следующая конструкция:
<interface name=""
comment=""> - Описывает
интерфейс. В child nodes описываются методы и их параметры.
<inherits name=""/> - Узел "inherits" содержит имя интерфейса от которого был порожден данный интерфейс. В общем случае допускается множественное наследование интерфейсов.
<method name=""
type="" comment=""> -
Описывает метод интерфейса. В child nodes описываются параметры текущего метода.
<parameter
name="" type="" vector="" comment=""/>
- Описывает параметр метода.
Категории объектов. Категория объектов объединяет некоторое множество классов объектов которые потенциально могут поддерживать некоторое множество интерфейсов. Множество интерфейсов которое могут поддерживать объекты категории будем называть множеством(группой) интерфейсов категории. <category
name="" type="" comment="">
- Описывает категорию объектов. в child nodes описываются интерфейсы, входящие в
категорию. Порядок описания интерфейсов соответствует порядку вхождения
указателей на интерфейсы в структуре категории
itbl. <interface name=""/> - Указывает, что интерфейс с именем "name" входит в данную категорию. Замечание: для обеспечения более тесной интеграции с С без использования возможности приведения типов С++ возможность вхождения одного интерфейса в разные категории отменяется до обнаружения workaround. Для того чтобы объект входил в некоторую категорию необходимо, чтобы он потенциально был в состоянии поддерживать каждый интерфейс из группы интерфейсов этой категории.
Объекты из разных категорий не могут быть полиморфно обработаны средствами программного кода. Полноценно определить категорию объекта и работать с возможностями объекта, определяемыми категорией возможно только опираясь на информацию из метаконтекста. (данное утверждение можно оспорить, но в текущем метаконтексте оно объявляется верным). Объекты из одной категории могут унифицировано и полиморфно обрабатываться программным кодом без обращения к информации из метаконтекста. ODL для описателя классов объектов применяется специализированный XML на его основе генерируется хеадер объектов и прототипы методов. пример ODL:
<include
file=""/>
описание ODL <include file=""/> - Включает дополнительный файл IDL для обработки. В атрибуте "file" задается путь к файлу. Может использоваться для разделения одного большого XML на несколько разных. <class
name="" category="" inherits="" comment="">
- Описывает класс объекта.
Атрибут "inherits"
- Зарезервирован для одиночного наследования классов. На первом этапе поддержка
не обязательна. <interface
name=""> <method name="" modifier="" target=""/> - Показывает что данный класс реализует метод "name" с помощью функции "target". Modifier определяет видимость метода для внешнего кода. Shared – означает, что данный метод может быть включен в различные классы. Следовательно не требуется приведение параметра VNPIOBJECT _object к конкретному типу класса, который реализует данный метод. Import – означает что данный метод уже реализован в другом классе как Shared метод. В данном классе достаточно включить указатель на функцию реализующую данный методы в таблицу vtbl. Генерировать шаблон метода не нужно. Public – данный метод доступен для прямого обращения внешнего кода. Его определение включается в основной хеадер при генерации. "" – Пустое значение по умолчанию. Означает Private доступ к методу. Определение генерируется в файле *.f <member name="" type="" comment=""/> - описывает член класса (переменную) Атрибут "name"
- Имя переменной
FDL <function name="method_target" comment="" [type=""]>
[<parameter name="" type="" vector="" comment=""/>] </function> <function name="method_target" comment=""> - Описывает функцию, реализуемую классом. <local name="" type="" comment=""/> - Описывает локальную переменную в функции.
Реализация
Среда разработки виртуальной машины должна обеспечивать максимальный комфорт программисту. Поэтому разбор IDL|ODL реализуется на языке C# для платформы Microsoft .NET. В процессе синтаксического разбора анализируется содержимое DOM-XML и на его основе формируется объектная модель IDL путем создания и инициализации объектов. После построения объектной модели IDL на ее основе формируются исходные тексты прототипов функций на языке C. Для категории, класса, интерфейса, метода, параметра создаются специальные классы в который в качестве property хранятся значения соответствующих атрибутов XML. Классы контейнеры (категория, класс, интерфейс, метод) имеют в качестве своих членов коллекции объектов соответствующих дочерним Node. Коллекции адресуют свои члены с помощью текстовых ключей, соответствующих именам этих членов. В процессе парсинга анализируется содержимое DOM-XML и на его основе формируется объектная модель IDL|ODL путем создания и инициализации объектов. Вторым проходом, на основе созданной объектной модели формируются файлы хеадеров(.h, .f) и реализации (.c, .i) В случае обработки IDL на основе файла XML-IDL заданного первым параметром в командной строке парсер формирует выходной хеадер файл, заданный в качестве второго параметра командной строки. В хеадер файл помещаются определения структур категорий и интерфейсов. Так же помещаются константы IID интерфейсов и хелперы вызова методов интерфейсов. В случае обработки ODL на основе файла XML-ODL формируется хеадер файл описания классов объектов, файл реализации itbl и vtbl классов объектов, а также файл реализации прототипов методов (опционально - в зависимости от параметров командной строки). Генерируемый код: Реализация категории; Категория объектов определяется как структура, содержащая список указателей на VTBL всех интерфейсов которые могут быть потенциально реализованны в объектах этой категории. Имена указателей совпадают с именами интерфейсов. Для каждого класса инициализируется своя таблица ITBL интерфейсов, поддерживаемых данным классом. В начале таблицы ITBL находятся служебные поля не являющиеся указателями на интерфесы (таблицы VTBL). Этими полями являются __size
– размер класса в байтах. Позволяет автоматизировать процесс создания
instance класса по указателю на его
ITBL. структура категории именуется _itbl_<Name_of_Category> например
typedef struct
_itbl_SystemObject { Структура категории определяется при генерации IDL. По описателю IDL генерируется описание категории и входящих в нее интерфейсов. результатом является хеадер файл со структурами категорий и интерфейсов. Реализация категории определяется при генерации ODL для каждого класса.
структура корня именуется _root_<Name_of_Category> например typedef
struct _root_SystemObject {
Интерфейс представляет собой структуру, содержащую список указателей на методы реализованные в объекте. данная структура именуется _vtbl_<Name_of_Category> например для интерфейса
<interface
name="IStream" comment=""> структура будет иметь следующий вид.
typedef struct
_vtbl_IStream
{ дополнительно генерируются helper macros для облегчения вызова методов объекта. Методы. имеют соглашения о вызове __stdcall /* _fastcall */
/*
*/
Класс Класс - структура данных описывающая экземпляр класса (объект). Каждый класс содержит в себе первым своим элементом структуру корня объекта:
typedef
struct MyClass { Member1_Type Member1_Name; Member2_Type Member2_Name;
..... При генерации класса формируются экземпляры категории и всех интерфейсов, реализуемых объектами данного класса. Реализация интерфейса класса именуется vtbl_<Name_of_Class>_<Name_of_Interface> Например: Экземпляры vtbl инициализируются указателями на функции - методы класса, реализующие соответствующие методы интерфейсов. Реализация категории класса именуется itbl_<Name_of_Class>_<Name_of_Category > Например: _itbl_SystemObject itbl_MyClass_SystemObject = {&vtbl_MyClass_IMemory, &vtbl_MyClass_IStream }; Экземпляры itbl инициализируются указателями на реализации интерфейсов поддерживаемых данным классом. /*
*/ Объекты. Объект - экземпляр структуры данных класса. По возможности реализуются в парадигме State Less При создании объекта необходимо инициализировать корень объекта указателем на реализацию категории данного объекта. Например:
Аналогичные проекты доступны по следующим ссылкам:
http://www.quantum-leaps.com/resources/papers.htm#OOPinC http://www.quantum-leaps.com/writings/samek9712.txt
|
|||
|
| ||||