bmstu-iu9 / bmstu-iu9/refal-5-lambda
Уровни логирования
- 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.