You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
recodex-wiki/Runtime-Environments.md

3.0 KiB

Runtime Environments

This page contains notes about using various runtime environments in ReCodEx as well as their internal usage inside isolate sandbox. At present ReCodEx supports

  • C
  • C++
  • C#
  • Data-only
  • Go
  • Haskell
  • Java (OpenJDK)
  • JavaScript (Node.js)
  • Pascal
  • PHP (CLI apps)
  • Prolog (SWI)
  • Python 3
  • Rust

Exercises may be configured for multiple environments, so the student may choose the language for the solution. However, Data-only, Haskell, and Prolog have somewhat unique configurations, therefore an exercise must use such environment exclusively.

Only environments which needed some special treatment are noted here.

C#

The C# solutions are executed with the help of wrapper code. This code searches for main method in submitted source codes. There has to be only one class containing main method, otherwise error will be thrown. The name of the file containing wrapper code is ReCodEx_Csharp_Wrapper.cs and it contains namespace CodEx with class Wrapper, so be aware of filename and class collisions.

In C# language there are none of the handy functions to operate with textual inputs like scanf in C. Therefore for every C# build in ReCodEx there is Reader library included to make life of C# programmers easier. Please note that library is suppose to work only with ASCII files and some difficulties can be observed with modern Unicode (UTF-8) encodings. The Reader library is located in ReCodEx_Csharp_Reader.cs library contains namespace CodEx with class Reader, so again, be aware of filename and class collisions.

Go

The solutions of Go has to be located only in one package, the standard main executable package. ReCodEx uses flat folder structure of submitted solution, therefore separate Go packages cannot be used. Multiple files are fine as long as they contain the same package.

Java

By default, we use a script that looks for a class with a main method and executes it for running Java programs. There has to be only one class containing main method, otherwise error will be observed. The executed script is named javarun.java and can be found in the utils repository. In tested solutions we use its byte-compiled counterpart javarun.class, so be aware of name collisions.

Python

We use a wrapper script that translates exceptions to error codes. This script can be found in the utils repository. The file is named runner.py during execution of solutions, so be aware of filename collisions.

Due to a Python bug, the interpreter requires the $HOME variable to be set to something. Otherwise, it tries to look up the UID used by Isolate in /etc/passwd and fails. Setting HOME=/box seems to work.