8000 Уровни логирования · Issue #336 · bmstu-iu9/refal-5-lambda · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Уровни логирования #336
Open
@Mazdaywik

Description

@Mazdaywik

Мотивация

Сейчас предусмотрено два вида трассировки процесса работы: неотключаемый вывод на stdout имён компилируемых файлов и включаемый/выключаемый лог трансформаций программы back-end’ом.

В лог последнего выводится

  • дерево после рассахаривания,
  • дерево после каждого прохода древесной оптимизации,
  • дерево после завершения древесных оптимизаций,
  • высокоуровневый императивный код (RASL).

Если проходов много, то объём файла лога может быть значительным.

В него, к сожалению, не выводится такая полезная выжимка из древесных оптимизаций, как сигнатуры экземпляров. Т.к. без них вывод профилировщика становится более трудным для понимания.

Однако, вывод процесса работы на stdout порой или недостаточно, или избыточно детализирован. Недостаточная детализация наблюдается в режиме -OG: после фразы *Generating code... компилятор надолго задумывается. Избыточно детализирован — выводит сообщения о найденных библиотеках (+Linking), их тоже можно скрывать. Либо вообще можно скрывать весь вывод, сообщая лишь о синтаксических ошибках (было бы актуально для #334).

Реализация

Предлагается указывать уровень логирования в командной строке. Уровень определяется количеством указанных опций -v — каждая следующая увеличивает его на единицу. Начиная с некоторого уровня уже требуется указывать файл лога.

В файл лога выводится то же, что и на экран + дополнительная информация (вроде синтаксических деревьев). Сообщения, выводимые на экран, в файл заносятся с обязательным временны́м штампом (на экран — нет). В файл всегда выводятся сообщения о проходах оптимизирующего компилятора, на экран — только для -OG.

Сигнатуры экземпляров выводятся в лог на любом ненулевом уровне.

На нулевом уровне ничего не выводится, кроме сообщений о синтаксических ошибках.

Уровни:

  1. Выводятся сообщения *Compiling на экран. В режиме -OG выводится только *Generating code....
  2. Выводятся сообщения *Compiling, +Linking. В режиме -OG на экран выводятся названия проходов оптимизирующего компилятора (рассахаривание, разметка, прогонка, специализация, генерация RASL’а того и другого уровня, генерация кода).
  3. В файл выводится синтаксическое дерево после рассахаривания и после древесных оптимизаций (если они были), также выводится высокоуровневый RASL (?).
  4. В файл выводятся синтаксические деревья после каждого прохода оптимизации.

С RASL’ом не очевидно. С одной стороны, он нужен при отладке генерации целевого кода. С другой стороны — занимает много места, в несколько раз больше синтаксического дерева. Возможно, его стоит включать/выключать отдельной опцией.

Также не очевиден вопрос, как на экран выводить сообщения: на stdout или на stderr.

До обновления стабильной версии нужно добавить поддержку пустой опции -v.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions

    0