12 月 1 日运行环境更新说明

Menci 2018-11-30 12:04:43 2019-01-27 8:32:55

在 11 月 30 日的更新中,我们完成了对 LibreOJ 评测所用运行环境的更新,包括一些编译器(解释器)的升级、替换,与新加入的 C++ 17 支持。
在 12 月 1 日的更新中,我们去处了对一些语言的支持,重新为 C++ 加入了 GCC 的支持,并默认使用 GCC。

编译器(解释器)

对于编译器(解释器)的主要改动如下:

语言 原编译器 现编译器
C GCC 5.4.0 Clang 7.0.1
C++ GCC 8.2.0
C++ (Clang) - Clang 7.0.1
Java OpenJDK 8 OpenJDK 10
Node.js Node.js v8.1.3 Node.js v10.14.0
Python2 CPython 2.7.12 PyPy 6.0.0 (Python 2.7.13)
Python3 CPython 3.5.2 PyPy 6.0.0 (Python 3.5.3)

C++ 17

C++ 标准委员会一直致力于制定更易于使用、功能更强大的新 C++ 标准,而算法竞赛中通用的 C++ 03 与近年来加入的 C++ 11 也已经远远落后于最新的 C++ 标准。得益于编译器的更新,我们加入了对 C++ 17 的支持。

您可以在 https://zh.cppreference.com/w/cpp/compiler_support 页面中查看目前各个编译器对 C++ 17 新特性的支持。
如果您不熟悉近年来新推出的 C++ 标准(11、14、17),可以阅读 https://changkun.de/modern-cpp 以学习。

Issues

我们并未广泛地在在线评测环境中测试这些新的编译器(解释器),它们存在一些潜在的 Bug。已知的 Bug 如下:

  • ~~#276172 将含有某些 C++ 11 新特性的代码作为 C++(默认的 C++ 03)提交,会导致 Clang 编译器崩溃,给出的错误信息可能不完整。~~由于 GCC 编译器重新加入,Clang 导致的问题可以被避免。

另外,不同编译器(解释器)、或者不同版本的编译器(解释器)之间的差异也可能导致一些问题。这些问题不是编译器(解释器)的 Bug,也不是我们的环境问题,而是源于用户提交的代码(如 C / C++ 的未定义行为)。已知的问题如下:

  • ~~#276148 在 C++ 中,原型中具有返回值的非 main 函数退出时不返回任何值,会导致程序运行异常。参考链接~~由于 GCC 编译器重新加入,Clang 导致的问题可以被避免。

~~为了解决这些问题,我们可能会考虑重新加入 GCC 编译器,并与现有的 Clang 编译器并存。~~GCC 编译器已被重新加入。

去除的语言

以下的语言由于长期依赖,几乎没有用户使用,已被去除。使用这些语言的提交记录仍然可以在提交记录页面被查询到,但这些语言已无法被提交。

  • Vala
  • Lua
  • LuaJIT
  • OCaml
  • Visual Basic

共 8 条回复

xiejin
WAAutoMaton

后排滋瓷(有没有加golang的计划呢?

test12345

资瓷GCC!

Captain_McMillan

前排资瓷

2018zhengzhongjun

资瓷

rvalue

前排zc (不过为啥换clang了呢qwq)

dsl2002

前排资瓷

ceerrep

一年后