ailev.ru

10 января 2008 · Комментарий

Без заголовка

У тулзов общего назначения к сожалению или к счастью есть простой критерий практичности: насколько у них много обзательных настроек. Если моя программа обрабатывается при дефолтных настройках, тогда все хорошо, я могу поиграться с ключами. Если же моя программа требует подбора настроек, чтобы обработаться за разумное время - то все плохо. Я пару лет назад тоже набрел на суперокмпиляторы, но когда увидел его настройки, то понял, что они их вводят чтобы избежать экспоненциального перебора, что означает, что на дефолтных настройках я могу просто не дождаться результата выполнения программы. ХотСпот в этом смысле весьма практичен. Разумеется, он не заменяет настоящий суперкомпилятор/частичный эвалюатор, например, для ембеддед Жабы, когда желательно обрезать лишний код на этапе компиляции. В то же время ХотСпот позволяет кое-как достичь желаемой цели: быстрой и одновременно сопровождаемой программы. Ибо он не требует обязательных настроек, в то же время выполняя весьма крутые оптимизации, в частности он умеет инлайнить виртуальные вызовы, в том числе для интерфейсов у которых одна или две реализации. Массивы только не умеет инлайнить, так бы ему цены не было. Впрочем, после появления в 6й жабе escape analysis на это можно расчитывать в будущем. ХотСпот делает и суперкомпиляторные оптимизации тоже, просто суперкомпиляторщики не внимательно читали литературу по ХотСпоту. Он всегда умел сплиттить код, т.е. делать несколько веток исполнения в зависимости от входыных данных - а это как раз та особенность на которую упирают суперкомпиляторщики. Кстати, это давным давно умеют делать и Лисповые компиляторы тоже.

К записи · К обсуждению