Difference between revisions of "Serve.cfg:global:preserve line numbers"

From EjudgeWiki
 
(...)
 
Line 1: Line 1:
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Конфигурационные файлы]]/[[serve.cfg]]/[[serve.cfg:global|Глобальные конфигурационные параметры]]/<code>[[Serve.cfg:global:preserve_line_numbers|preserve_line_numbers]]</code>
 
Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Использование]]/[[Конфигурационные файлы]]/[[serve.cfg]]/[[serve.cfg:global|Глобальные конфигурационные параметры]]/<code>[[Serve.cfg:global:preserve_line_numbers|preserve_line_numbers]]</code>
 +
 +
Для скриптовых языков, таких как python или node, процесс "компиляции"
 +
заключается к приписыванию в начале файла конструкции <code>#! INTERP</code>.
 +
После этого файл с программой на интерпретируемом языке может исполняться
 +
стандартными средствами Unix без явного указания соответствующего
 +
интерпретатора в строке запуска. То есть с точки зрения компонента
 +
тестирования [[ej-super-run]] "скомпилированные" программы на скриптовых
 +
языках ничем не отличаются от скомпилированных исполняемых программ
 +
на языках C, C++, rust, go и аналогичных.
 +
 +
Однако у такой модели исполнения есть нежелательный побочный эффект:
 +
номера строк программы при выполнении отличаются от номеров строк
 +
программы, сданной на проверку. Поэтому сообщения об ошибках в программе,
 +
выдаваемые при ее выполнении, имеют номера строк, не соответствующие
 +
номерам строк в исходной программе.
 +
 +
Если в конфигурационном файле турнира задать глобальный конфигурационный
 +
параметр <code>preserve_line_numbers</code> в положительное значение,
 +
программы на скриптовых языках будут обрабатываться таким образом,
 +
что номера строк при выполнении программы будут соответствовать
 +
номерам строк в сданном программе.
 +
 +
Опция работает при условии, что не используются файлы, добавляемые
 +
к исходному коду программы (<code>[[Serve.cfg:problem:source_header|source_header]]</code>).
 +
 +
Пример:
 +
preserve_line_numbers
 +
 +
Поддерживается начиная с версии [[изменения в версии 3.11.0|3.11.0]].

Latest revision as of 22:21, 10 August 2023

Навигация: Главная страница/Система ejudge/Использование/Конфигурационные файлы/serve.cfg/Глобальные конфигурационные параметры/preserve_line_numbers

Для скриптовых языков, таких как python или node, процесс "компиляции" заключается к приписыванию в начале файла конструкции #! INTERP. После этого файл с программой на интерпретируемом языке может исполняться стандартными средствами Unix без явного указания соответствующего интерпретатора в строке запуска. То есть с точки зрения компонента тестирования ej-super-run "скомпилированные" программы на скриптовых языках ничем не отличаются от скомпилированных исполняемых программ на языках C, C++, rust, go и аналогичных.

Однако у такой модели исполнения есть нежелательный побочный эффект: номера строк программы при выполнении отличаются от номеров строк программы, сданной на проверку. Поэтому сообщения об ошибках в программе, выдаваемые при ее выполнении, имеют номера строк, не соответствующие номерам строк в исходной программе.

Если в конфигурационном файле турнира задать глобальный конфигурационный параметр preserve_line_numbers в положительное значение, программы на скриптовых языках будут обрабатываться таким образом, что номера строк при выполнении программы будут соответствовать номерам строк в сданном программе.

Опция работает при условии, что не используются файлы, добавляемые к исходному коду программы (source_header).

Пример:

preserve_line_numbers

Поддерживается начиная с версии 3.11.0.