Рефлексия в FPC

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Рефлексия в FPC

Сообщение anzo » 29.12.2009 13:12:20

Что известно про рефлексию в FPC. Есть ли она, и если есть на каком она уровне?
anzo
новенький
 
Сообщения: 28
Зарегистрирован: 09.07.2009 10:53:46

Re: Рефлексия в FPC

Сообщение Sergei I. Gorelkin » 29.12.2009 16:45:15

Есть на уровне RTTI.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Рефлексия в FPC

Сообщение Max Rusov » 29.12.2009 17:04:35

Сделайте скидку на интеллектуальный уровень собеседников. Вы сейчас о чем говорили? :)
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Рефлексия в FPC

Сообщение Sergei I. Gorelkin » 29.12.2009 19:38:40

RTTI (информация о типах времени выполнения) позволяет программе во время выполнения получать информацию о внутреннем устройстве самой себя, что используется для сериализации объектов, вызова методов по имени и т.п. В основном это манипуляции, связанные с published свойствами. Хотя есть еще встроенная функция typeinfo.
Рефлексия (reflection) - дотнетовский аналог RTTI. Там для исполнения байткода принципиально требуется 100% информации о всех типах, поэтому и возможностей побольше. Например, если не предпринимать специальных мер, то можно практически без усилий восстановить исходный текст сборки.
Или, например, сопоставить типу/классу произвольный набор атрибутов и читать их значения во время выполнения.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Рефлексия в FPC

Сообщение Bonart » 29.12.2009 23:12:13

Аналога дельфийского methodinfo в FPC нет?
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Re: Рефлексия в FPC

Сообщение Sergei I. Gorelkin » 29.12.2009 23:44:34

Похоже, что нет. Но недавно в RTTI для методов что-то подкручивали (порядок параметров, тип вызова).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Рефлексия в FPC

Сообщение anzo » 30.12.2009 13:43:43

В общем то меня вопрос о рефлексии интересует, в плане возможности реализации сериализации объектов.
На сколько я понимаю, сериализация в принципе это удел интерпретируемых языков языков программирования...
anzo
новенький
 
Сообщения: 28
Зарегистрирован: 09.07.2009 10:53:46

Re: Рефлексия в FPC

Сообщение Max Rusov » 30.12.2009 14:03:42

Сериализация прекрасно делается с помощью published свойств.
Max Rusov
постоялец
 
Сообщения: 191
Зарегистрирован: 25.04.2009 15:46:03

Re: Рефлексия в FPC

Сообщение anzo » 30.12.2009 14:16:48

Ну в принципе как в Delphi. Это я знаю.

Добавлено спустя 51 секунду:
А что на счет вызова метода по текстовому имени?
anzo
новенький
 
Сообщения: 28
Зарегистрирован: 09.07.2009 10:53:46

Re: Рефлексия в FPC

Сообщение hinst » 31.12.2009 13:34:44

Что-то мне подсказывает, что вызов метода по текстовому имени невозможен потому, что иначе бы для каждого метода хранилось бы ещё и его имя, что бы существенно увеличило размер исполняемого файла
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Рефлексия в FPC

Сообщение Sergei I. Gorelkin » 31.12.2009 15:13:51

Имена хранятся, но только для published методов. Метод TObject.MethodAddress позволяет узнать адрес по имени. Дальше можно вызывать, если известна сигнатура, собственно все "Button1.OnClick" так и работают.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Рефлексия в FPC

Сообщение Павел Ишенин » 01.01.2010 21:11:44

Начиная с ревизии 14508 можно получить более полную информацию о методе. Типы аргументов и результата функции теперь имеют не только названия, но и ссылку на TypeInfo + добавлено перечисление TCallConv информирующее о соглашениях о вызовах по данному методу.
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru