Если вы разбираетесь в компиляторах, машинных кодах, ООП и динамических языках типа смолтока, селфа, руби, ио (//vkontakte.ru/club3618361), я бы с удовольствием обсудил пути реализации адаптивной оптимизации Ио.
Ио — это чистый объектно-ориентированный язык с кучей очень интересных фишек и стандартных библиотек. См. //vkontakte.ru/club3618361
Исходные данные: в Ио есть объекты, наследование через прототипы, посылка сообщений с ленивым выполнением аргументов в произвольном контексте, динамическое переопределение любых методов в любых объектах и сопрограммы (coroutines), реализующие кооперативную многозадачность. Любое телодвижение в рантайме – это поиск слотов в иерархии прототипов и их активация (если это методы). Некоторые методы — нативные CFunctions, прилинкованные в сишном коде.
Требуется:
1) Проанализировать статистику вызовов в типичных программах: корректно построить графы вызовов с тем, чтобы воочию увидеть, что следует оптимизировать. Пока что могу предположить, что это поиск слотов глубоко в иерархии (следует понять, насколько глубоко и насколько эффективным будет их кеширование), а также повторяемые действия (создание locals и наполнение его слотами-локальными переменными на каждый вызов метода) и избыточные действия.
2) Если кеширование слотов будет давать ощутимый выигрыш, его нужно реализовать так, чтобы минимально расходовать память.
3) Если будет возможно избавиться от избыточных действий, то имеет смысл ввести байткод, в терминах которого находить излишние команды и подсчитывать количество машинных циклов. В настоящий момент виртуальная машина оперирует передачей структурированных сообщений, по сути, интерпретируя AST (abstract syntax tree).
Если вы — тот человек, который примерно понимает суть проблемы и может подсказать какую-нибудь полезную информацию, свяжитесь со мной: Олег Андреев, oleganza@gmail.com, skype://olegandreev1986. Еще я обитаю на каналах #io и #io-ru на сервере freenode.
Спасибо.