На реализуемом языке указательный тип - это настоящий тип, которому соответствует отдельная запись в таблице типов, и на нём нельзя в одной декларации перечислить через запятую инты в перемешку с указателями на инты, а два указателя на один тип могут не приводиться друг к другу, если сами указатели формально разных типов и в описании ни одного из этих типов явно не указано, что он - синоним другого, или его синонима. Как лучше записать такой указательный тип в таблице типов? Покритикуйте такой вариант:
1. Отдельно единой таблицы типов вообще нет, есть иерархическая объектная внутренняя база данных проектных сущностей, в которую сведено всё от констант до методов и перегруженных операторов-членов.
2. Каждому виду сущности соответствует свой объект-динамический массив дескрипотов - элементов, описывающих отдельные сущности, причём, в один массив сводятся дескрипторы сущностей одного вида, например, только дескрипторы типов, или только дескрипторы переменных.
3. Все эти массивы являются членами других объектов, массивы дескрипторов глобальных сущьностей являются членами единого экземпляра TProject, а массивы дескрипторов членов - членами дескрипторов родительских сущностей.
4. Каждый дескриптор имеет уникальный UID.
5. По UID можно найти дескриптор с таким UID.
6. По UID можно до поиска дескриптора определить, сущность какого вида описывает дескриптор с таким UID.
7. Если UID ни когда не принадлежал дескриптору, то это можно определить по UID до поиска дескриптора.
8. Отдельный UID имеет и экземпляр TProject, также являющийся дескриптором, но всего проекта.
9. Каждый дескриптор константы, или переменной содержат второй член для хранения UID, значение которого описывает тип, использованный в декларации сущности. Этот второй UID - это просто UID типа переменной, или константы (в отличие от паскаля, реализуемый язык не допускает автоматический вывод типов именованных констант и позволяет явно указывать типы констант-литералов).
10. Каждый дескриптор типа содержит член для хранения дополнительного UID, принадлежащего дескриптору типа, на котором основан описываемый тип. В отличие от аналогичных членов в дескрипторах констант и переменных, данный член может иметь специальное значение, указывающее на то, что такой UID ни когда не принадлежал ни одному дескриптору. Иначе в этот член пишется UID базового типа ссылки/массива/указателя/связи/ограниченного типа/синонимичного типа (в реализуемом языке есть понятие связи, которая есть пара встречных неявно разыменуемых умных указателей). Если описываемый тип - массив, то один из его операторов-членов - "квадратные скобки", он может перегружаться автоматически, типы индексов идентифицируются в элементах специального члена элемента массива дескрипторов операторов-членов, а UID базового типа массива дублируется в члене самого дескриптора и в идентифицирующем тип возвращаемого значения члене дескриптора оператора-члена "квадратные скобки".
Как выглядит запись в таблице типов, если тип - указатель?
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Судя по всему, это будет отдельная сущность в базе данных проектных сущностей, которая будет хранить дополнительный UID того типа, на который указывает указатель.Как выглядит запись в таблице типов, если тип - указатель?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Это и есть мой вариант. Но может кто имеет покритиковать, или предложить свой?Romeo писал(а):Судя по всему, это будет отдельная сущность в базе данных проектных сущностей, которая будет хранить дополнительный UID того типа, на который указывает указатель.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.