Skip to content

DMOJ Judge v4.0.0

Compare
Choose a tag to compare
@Xyene Xyene released this 22 Jan 23:07
· 130 commits to master since this release
b09fb57

This major release contains a number of features, sandboxing improvements, and support for the latest versions of many runtimes. Upgrading is strongly recommended.

Thanks to @Riolku, @kiritofeng, @int-y1 for contributing major changes in this release.

Breaking changes

  • The minimum supported Linux kernel version is now 4.8. Pure ptrace-based sandboxing is no longer supported.
  • Support for running on Python 3.6 has been removed. Python 3.6 was EOL in December 2021.
  • The RUBY2 executor has been renamed to RUBY.
  • All Java executors except for Java 8 have been merged into a single JAVA executor.
  • Support for CoffeeScript (COFFEE executor) has been removed.
  • Tests specified pretest_test_cases are now run unconditionally. See #1068 for more details.
  • The number of digits in submission output that interactors, etc. will be willing to handle has been dropped from 10000 to Python's new sys.int_info.default_max_str_digits limit. See python/cpython#95778 for more details.
  • The Rust edition has been upgraded from 2015 to 2021.

Deprecation notices

  • Problem directories are now specified through a new problem_storage_globs key. problem_storage_root is now deprecated, and will be removed in a future release.
  • This release adds support for batch dependencies, but their functionality will change substantially in a future release. See #1075 for more details.

Runtimes

  • Added support for:
    • Lean 4
    • LLVM IR
    • Java 17-19
    • Go 1.16+
    • Ruby 3
    • OCaml 5.0
  • @int-y1 has implemented an optimizing compiler for Brain**** using LLVM (#1091). This new compiler produces dramatically faster code than the previous implementation.
  • Rust compilation has been greatly sped up by sharing build artifacts between compilations.
  • Fixed Groovy compilation time being included as part of runtime.
  • Tweaked sandbox to allow Go to make use of its transparent hugepage support.
  • Carriage returns are now stripped for the text executor.
  • The time limit for Kotlin compilation has been raised from 20 seconds to 30 seconds.

Sandbox

  • Compilers are now sandboxed. Not sandboxed: renaming, various f* syscalls (e.g. fchmod), execs. The current level of compiler sandboxing is intended to prevent e.g. #include-ing arbitrary files that are readable by the judge user.
  • File access is now denied with EACCES rather than EPERM.
  • Java security policies are no longer used, as they were deprecated in Java 17.
  • Fixed non-fatal signals occasionally being reported to the site (e.g., Haskell's ticker thread sending SIGVTALRM).
  • Added support for FreeBSD 13.

Miscellaneous

  • The judge will now autodetect executors for given source files based on extension. This applies to dmoj-cli submit as well as generators, graders, etc.
  • Fixed judge handshake issues when ~9000 problems are reported at initialization.
  • Fixed leaking cached executor compilation artifacts.
  • Context switches (involuntary + voluntary) are now reported as part of testcase log output.

Full changelog

The full changelog is available here as well as below.

Changelog

New contributors