Предлагается следующее. Рантайм (скомпилированный в особом режиме) при запуске открывает файл с заданным именем, содержащий имена функций, подлежащие профилировке. Затем, на каждом шаге рефал-машины сравнивает имя выполняемой функции с известными именами и, если имя находится, осуществляет профилировку заданной функции.
Детали. Дьявол кроется в деталях.
На каждом шаге сравнивать имя накладно. Но если в узлах поля зрения для функций хранить не указатель на функцию + указатель на имя, а указатель на дескриптор (который, в свою очередь, хранит указатель на функцию и имя), то выполнение можно организовать более эффективно. Дескриптор дополняется полем отладочных флагов, изначально равным нулю. Бит 0 означает, что функция уже известна, бит 1 — подлежит профилировке. На каждом шаге проверяется поле, если оно равно нулю, то (1) устанавливается бит 0, проверяется имя и, при необходимости, устанавливается бит 1. Затем профилировка осуществляется для функций с установленным битом 1.
Взаимодействие с Простым Рефалом — тут одни вопросы. При компиляции в него все имена декорируются, поэтому вопрос, как выписывать профилируемые функции в файл. Рантайм привязывается к профилировщику — надо ли переносить профилировщик в Простой Рефал.
Имя файла со списком функций можно указывать в виде макроса препроцессора (как имя файла дампа сейчас). Тогда, если этот макрос не определён, код, ответственный за профилирование даже не включается.
Отладочное поле флагов можно использовать и для других целей: трассировка, break-point’ы и т. д.
Предлагается следующее. Рантайм (скомпилированный в особом режиме) при запуске открывает файл с заданным именем, содержащий имена функций, подлежащие профилировке. Затем, на каждом шаге рефал-машины сравнивает имя выполняемой функции с известными именами и, если имя находится, осуществляет профилировку заданной функции.
Детали. Дьявол кроется в деталях.
Отладочное поле флагов можно использовать и для других целей: трассировка, break-point’ы и т. д.