Рефлексия в FPC
Модератор: Модераторы
Рефлексия в FPC
Что известно про рефлексию в FPC. Есть ли она, и если есть на каком она уровне?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Есть на уровне RTTI.
Сделайте скидку на интеллектуальный уровень собеседников. Вы сейчас о чем говорили? 
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
RTTI (информация о типах времени выполнения) позволяет программе во время выполнения получать информацию о внутреннем устройстве самой себя, что используется для сериализации объектов, вызова методов по имени и т.п. В основном это манипуляции, связанные с published свойствами. Хотя есть еще встроенная функция typeinfo.
Рефлексия (reflection) - дотнетовский аналог RTTI. Там для исполнения байткода принципиально требуется 100% информации о всех типах, поэтому и возможностей побольше. Например, если не предпринимать специальных мер, то можно практически без усилий восстановить исходный текст сборки.
Или, например, сопоставить типу/классу произвольный набор атрибутов и читать их значения во время выполнения.
Рефлексия (reflection) - дотнетовский аналог RTTI. Там для исполнения байткода принципиально требуется 100% информации о всех типах, поэтому и возможностей побольше. Например, если не предпринимать специальных мер, то можно практически без усилий восстановить исходный текст сборки.
Или, например, сопоставить типу/классу произвольный набор атрибутов и читать их значения во время выполнения.
Аналога дельфийского methodinfo в FPC нет?
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Похоже, что нет. Но недавно в RTTI для методов что-то подкручивали (порядок параметров, тип вызова).
В общем то меня вопрос о рефлексии интересует, в плане возможности реализации сериализации объектов.
На сколько я понимаю, сериализация в принципе это удел интерпретируемых языков языков программирования...
На сколько я понимаю, сериализация в принципе это удел интерпретируемых языков языков программирования...
Сериализация прекрасно делается с помощью published свойств.
Ну в принципе как в Delphi. Это я знаю.
Добавлено спустя 51 секунду:
А что на счет вызова метода по текстовому имени?
Добавлено спустя 51 секунду:
А что на счет вызова метода по текстовому имени?
Что-то мне подсказывает, что вызов метода по текстовому имени невозможен потому, что иначе бы для каждого метода хранилось бы ещё и его имя, что бы существенно увеличило размер исполняемого файла
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Имена хранятся, но только для published методов. Метод TObject.MethodAddress позволяет узнать адрес по имени. Дальше можно вызывать, если известна сигнатура, собственно все "Button1.OnClick" так и работают.
-
Павел Ишенин
- постоялец
- Сообщения: 475
- Зарегистрирован: 24.03.2007 09:16:52
Начиная с ревизии 14508 можно получить более полную информацию о методе. Типы аргументов и результата функции теперь имеют не только названия, но и ссылку на TypeInfo + добавлено перечисление TCallConv информирующее о соглашениях о вызовах по данному методу.
