Difference between revisions of "Добавление нового языкового процессора"

From EjudgeWiki
Line 62: Line 62:
 
Обратите внимание, что в unix-системах имена файлов чувствительны к регистру букв. Значение параметра <tt>short_name</tt> также чувствительно к регистру букв.
 
Обратите внимание, что в unix-системах имена файлов чувствительны к регистру букв. Значение параметра <tt>short_name</tt> также чувствительно к регистру букв.
  
Параметр <tt>long_name</tt> &mdash; это развернутое (полное) название языка программирования. Например, краткое имя языка может быть <tt>foo<tt>, а полное &mdash; &quot;GNU Foo Interpreter&quot;. Обратите внимание, что в полное название языка программирования не входит версия компилятора или интерпретатора этого языка программирования.
+
Параметр <tt>long_name</tt> &mdash; это развернутое (полное) название языка программирования. Например, краткое имя языка может быть <tt>foo</tt>, а полное &mdash; &quot;GNU Foo Interpreter&quot;. Обратите внимание, что в полное название языка программирования не входит версия компилятора или интерпретатора этого языка программирования.
  
 
Параметр <tt>src_sfx</tt> &mdash; это стандартный суффикс исходных файлов на данном языке программирования. Например, если для языка GNU Foo исходные файлы называются <tt>file.foo</tt>, то суффиксом исходных файлов будет строка <tt>.foo</tt> (обратите внимание, что &quot;точка&quot; входит в суффикс).
 
Параметр <tt>src_sfx</tt> &mdash; это стандартный суффикс исходных файлов на данном языке программирования. Например, если для языка GNU Foo исходные файлы называются <tt>file.foo</tt>, то суффиксом исходных файлов будет строка <tt>.foo</tt> (обратите внимание, что &quot;точка&quot; входит в суффикс).
  
 
Параметр <tt>exe_sfx</tt> определяет стандартный суффикс для исполняемых файлов на данном языке программирования. Как правило, суффикс исполняемых файлов зависит от архитектуры языка. Так, для архитектур linux и linux-shared стандартный суффикс исполняемых файлов не требуется, поэтому параметр <tt>exe_sfx</tt> может быть опущен или иметь пустое значение. Для архитектур dos и msil стандартный суффикс исполняемых файлов &mdash; <tt>.exe</tt>, а для архитектуры java &mdash; <tt>.jar</tt>.
 
Параметр <tt>exe_sfx</tt> определяет стандартный суффикс для исполняемых файлов на данном языке программирования. Как правило, суффикс исполняемых файлов зависит от архитектуры языка. Так, для архитектур linux и linux-shared стандартный суффикс исполняемых файлов не требуется, поэтому параметр <tt>exe_sfx</tt> может быть опущен или иметь пустое значение. Для архитектур dos и msil стандартный суффикс исполняемых файлов &mdash; <tt>.exe</tt>, а для архитектуры java &mdash; <tt>.jar</tt>.
 +
 +
Параметры <tt>arch</tt>, <tt>insecure</tt>, <tt>short_name</tt>, <tt>long_name</tt>, <tt>src_sfx</tt>, <tt>exe_sfx</tt> описывают свойства собственно языка программирования, точнее соответствующего компилятора или интерпретатора, поэтому для данного языка программирования не меняются от инсталляции к инсталляции системы ejudge.
 +
 +
Параметры <tt>version</tt> и <tt>arg</tt> описывают свойства инсталляции данного языка в конкретной системе, поэтому их значения могут меняться от инсталляции к инсталляции.
 +
 +
Параметр <tt>version</tt> определяет версию компилятора или интерпретатора. Если значение этого параметра пусто, то считается, что соответствующий компилятор или интерпретатор не был обнаружен в системе. Поэтому значение этого параметра не должно быть пустым. Версия компилятора (интерпретатора) определяется настроечным скриптом, как правило, с помощью запуска компилятора (интерпретатора) со специальными опциями и обработки полученного вывода.
 +
 +
Параметр <tt>arg</tt> содержит аргумент конфигурации языка, переданный в скрипты настройки ejudge-setup или ejudge-configure-compilers. Например, если запустить программу ejudge-configure-compilers с опцией --with-foo=/usr/local/bin/foo, то параметр /usr/local/bin/foo будет передан скрипту конфигурации языка foo-version. Кроме того, этот параметр может быть установлен и в интерактивном режиме в программах ejudge-setup и ejudge-configure-compilers. Как правило, этот параметр задает путь к компилятору или интерпретатору соответствующего языка, и полезен в случаях, когда компилятор (интерпретатор) размещается в нестандартных местах.

Revision as of 09:46, 7 August 2008

Навигация: Главная страница/Система ejudge/Расширение/Добавление нового языка программирования или компилятора.

Руководство по добавлению поддержки языков программирования, приведенное здесь, относится к системе ejudge версии не ниже 2.3.8.

Добавление поддержки нового языка программирования в систему ejudge выполняется в несколько шагов.

  1. Определение параметров добавляемого языка
  2. Написание настроечного скрипта (lang-version.in)
  3. Написание скрипта компиляции (lang.in)
  4. Переконфигурация поддерживаемых языков с помощью программы ejudge-configure-compilers

Определение параметров языка программирования

Параметры языка программирования, необходимые для поддержки языка в системе ejudge, перечислены ниже:

arch архитектура языка
insecure флаг поддержки безопасного режима
short_name краткое название языка (как правило, определяется автоматически)
long_name полное название языка
src_sfx стандартный суффикс файла с исходным текстом на данном языке программирования
exe_sfx стандартный суффикс исполняемого файла на данном языке программирования
version версия компилятора или интерпретатора языка
arg аргумент, указанный при конфигурировании языка программами ejudge-setup или ejudge-configure-compilers

Основной параметр языка программирования — это архитектура (arch). Под архитектурой понимается системное окружение, в котором запускается тестируемая программа. Система ejudge поддерживает следующие архитектуры:

  • linux — статически скомпонованная исполняемая программа
  • linux-shared — динамически скомпонованная исполняемая программа (в том числе и скрипты)
  • java — байт-код java
  • msil — байт-код .NET
  • dos — приложения DOS

Архитектура linux является архитектурой по умолчанию. Если язык имеет архитектуру linux, то параметр arch для этого языка должен либо отсутствовать, либо иметь пустое значение.

Второй параметр языка — это флаг, корректно ли работает тестируемая программа на данном языке при запуске в безопасном режиме. Если язык имеет архитектуру linux, java или dos, то тестируемые программы на таком языке, как правило, корректно работают в безопасном режиме, при этом поддерживаются все ограничения безопасности. Если язык имеет архитектуру msil, то безопасный режим для него не поддерживаются. Приложения на таком языке могут тестироваться, но при этом никаких ограничений безопасности на работу приложения накладываться не будет. Если язык имеет архитектуру linux-shared, то безопасный режим для такого языка поддерживается, однако тестируемая программа в безопасном режиме может работать некорректно или не работать вообще.

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

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

Из языков программирования, поддерживаемых системой ejudge в стандартной поставке в версии 2.3.8, небезопасными являются языки gcj (GNU Java), gfortran (GNU Fortran), mcs (Mono C#), mzscheme (MzScheme), php (PHP), vbnc (Mono Visual Basic), yabasic (YaBasic).

Параметр short_name — это краткое название языка программирования. Краткое название используется в таблице посылок пользователей и ряде других мест. Краткое название языка — это, по сути, идентификатор языка. Он должен представлять собой одно слово, не длинее 32 знаков, состоящее из заглавных и строчных латинских букв, цифр и знаков +, -, _. Как правило, краткое название языка программирования определяется автоматически из имени скрипта компиляции и настройки. Например, если скрипт компиляции (точнее, шаблон скрипта компиляции) имеет имя foo.in, то по умолчанию кратное название языка будет равно foo. Обратите внимание, что в unix-системах имена файлов чувствительны к регистру букв. Значение параметра short_name также чувствительно к регистру букв.

Параметр long_name — это развернутое (полное) название языка программирования. Например, краткое имя языка может быть foo, а полное — "GNU Foo Interpreter". Обратите внимание, что в полное название языка программирования не входит версия компилятора или интерпретатора этого языка программирования.

Параметр src_sfx — это стандартный суффикс исходных файлов на данном языке программирования. Например, если для языка GNU Foo исходные файлы называются file.foo, то суффиксом исходных файлов будет строка .foo (обратите внимание, что "точка" входит в суффикс).

Параметр exe_sfx определяет стандартный суффикс для исполняемых файлов на данном языке программирования. Как правило, суффикс исполняемых файлов зависит от архитектуры языка. Так, для архитектур linux и linux-shared стандартный суффикс исполняемых файлов не требуется, поэтому параметр exe_sfx может быть опущен или иметь пустое значение. Для архитектур dos и msil стандартный суффикс исполняемых файлов — .exe, а для архитектуры java — .jar.

Параметры arch, insecure, short_name, long_name, src_sfx, exe_sfx описывают свойства собственно языка программирования, точнее соответствующего компилятора или интерпретатора, поэтому для данного языка программирования не меняются от инсталляции к инсталляции системы ejudge.

Параметры version и arg описывают свойства инсталляции данного языка в конкретной системе, поэтому их значения могут меняться от инсталляции к инсталляции.

Параметр version определяет версию компилятора или интерпретатора. Если значение этого параметра пусто, то считается, что соответствующий компилятор или интерпретатор не был обнаружен в системе. Поэтому значение этого параметра не должно быть пустым. Версия компилятора (интерпретатора) определяется настроечным скриптом, как правило, с помощью запуска компилятора (интерпретатора) со специальными опциями и обработки полученного вывода.

Параметр arg содержит аргумент конфигурации языка, переданный в скрипты настройки ejudge-setup или ejudge-configure-compilers. Например, если запустить программу ejudge-configure-compilers с опцией --with-foo=/usr/local/bin/foo, то параметр /usr/local/bin/foo будет передан скрипту конфигурации языка foo-version. Кроме того, этот параметр может быть установлен и в интерактивном режиме в программах ejudge-setup и ejudge-configure-compilers. Как правило, этот параметр задает путь к компилятору или интерпретатору соответствующего языка, и полезен в случаях, когда компилятор (интерпретатор) размещается в нестандартных местах.