В ББ проверка типа
IF obj IS T THEN... выполняется очень быстро, примерно за 3 такта.
Тип можно выяснить ещё чуточку быстрее.Для начала пусть программа не модульная. В немодульной программе количество типов есть величина постоянная известная на момент компиляции. Поэтому компилятор может все типы перенумеровать -- присвоить каждому типу целое число. Тогда во время работы программы для выяснения типа надо будет сравнить не две переменных друг с другом
IF obj.tag.TD[lev] = ADR(TD(T)) THEN ...,
а одну переменную с константой.
Например, если тип T во время компиляции получил номер 123 и находится он на 4-ой глубине наследования, то инструкция IF obj IS T THEN... может быть скомпилирована в такую:
IF obj.tag.level4 = 123 THEN ...В модульных системах того же эффекта можно добиться если компилировать динамически подгружаемые модули "на лету".
-------------
Ещё можно делать быстрое переключение по нерасширяемым (sealed, final) типам:
Код:
CASE obj.tag.id OF
2: (* ... *) |
5: (* ... *) |
6: (* ... *) |
END
здесь 2, 5, 6 -- номера этих типов.