OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 22 Сентябрь, 2019 22:11

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Чуть более быстрая проверка типа
СообщениеДобавлено: Четверг, 26 Март, 2009 16:35 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
В ББ проверка типа 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 -- номера этих типов.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 26 Март, 2009 17:08 
Аватара пользователя

Зарегистрирован: Суббота, 12 Июль, 2008 22:49
Сообщения: 573
Откуда: Россия, Санкт-Петербург
Сергей Губанов писал(а):
...
В модульных системах того же эффекта можно добиться если компилировать динамически подгружаемые модули "на лету".
...


А разве это не противоречит модульной прадигме о раздельной компиляции модулей?
Один раз откомпилировал и забыл...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 26 Март, 2009 17:10 

Зарегистрирован: Понедельник, 30 Июль, 2007 10:53
Сообщения: 1538
Откуда: Беларусь, Минск
Вместо CASE лучше поиск по двоичному дереву, чтоб ещё чуточку быстрее : ).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 26 Март, 2009 18:59 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
1) Модульной парадигме это не противоречит если компилировать в slim-binaries Михаэля Франца ( http://www.ics.uci.edu/~franz/Site/pubs ... H10497.pdf ).

2) CASE по константам сама компилируется либо в прыжок по индексу -- О(1), либо в бинарный поиск -- О(ln(N)). Ну, или, по крайней мере, должна компилироваться в это хозяйство.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB