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/ |