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.
49 lines
3.4 KiB
Markdown
49 lines
3.4 KiB
Markdown
# Runtime Environments
|
|
|
|
This page contains notes about using various runtime environments in ReCodEx as well as their internal usage inside [isolate](https://github.com/ioi/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.
|
|
|
|
Some languages does not have uniquely identified entry point (like `main` routine in C/C++, for instance). For these languages, we have defined entry point -- file which is used as application bootstrap or main compilation unit.
|
|
Namely, entry point is present in Haskell, JavaScript, PHP, Python, and Rust. The entry point may be specified in the exercise configuration (pointing to a file provided by the author), or left unspecified. In such case, the student may choose the entry point in case more than one file is submitted.
|
|
|
|
|
|
## C#
|
|
|
|
The C# solutions are executed with the help of [wrapper code](https://github.com/ReCodEx/utils/blob/master/runners/cs/Wrapper.cs). 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](https://github.com/ReCodEx/utils/blob/master/runners/cs/Reader.cs) 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](https://github.com/ReCodEx/utils/blob/master/runners/java/javarun.java) 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](https://github.com/ReCodEx/utils/blob/master/runners/py/runner.py) repository. The file is named `runner.py` during execution of solutions, so be aware of filename collisions.
|
|
|
|
Due to a [Python bug](http://bugs.python.org/issue10496), 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.
|