bmstu-iu9 / bmstu-iu9/refal-5-lambda

Уровни логирования

Open
#336 0 comments 0 reactions 1 assignee Claimed by @Mazdaywik View on GitHub
task
Dominant language
C++
Stars
97
Forks
40
PR merge metrics
No merged PRs in 30d

Description

Мотивация
========
Сейчас предусмотрено два вида трассировки процесса работы: неотключаемый вывод на `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`.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.