OberonCore
https://forum.oberoncore.ru/

Чуть более быстрая проверка типа
https://forum.oberoncore.ru/viewtopic.php?f=61&t=1421
Страница 1 из 1

Автор:  Сергей Губанов [ Четверг, 26 Март, 2009 16:35 ]
Заголовок сообщения:  Чуть более быстрая проверка типа

В ББ проверка типа 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 -- номера этих типов.

Автор:  Madzi [ Четверг, 26 Март, 2009 17:08 ]
Заголовок сообщения:  Re: Чуть более быстрая проверка типа

Сергей Губанов писал(а):
...
В модульных системах того же эффекта можно добиться если компилировать динамически подгружаемые модули "на лету".
...


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

Автор:  Valery Solovey [ Четверг, 26 Март, 2009 17:10 ]
Заголовок сообщения:  Re: Чуть более быстрая проверка типа

Вместо CASE лучше поиск по двоичному дереву, чтоб ещё чуточку быстрее : ).

Автор:  Сергей Губанов [ Четверг, 26 Март, 2009 18:59 ]
Заголовок сообщения:  Re: Чуть более быстрая проверка типа

1) Модульной парадигме это не противоречит если компилировать в slim-binaries Михаэля Франца ( http://www.ics.uci.edu/~franz/Site/pubs ... H10497.pdf ).

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/