Languages update

What are the chances for new languages at the next language update?

super low. Besides technical limitations, to be honest, I don’t have enough support to requests of adding new languages, or more exactly, it’s difficult to know the real support. So I’m looking for a tool to make a “forever” vote survey like strawpoll. Maybe I could embed it in the blog or even the site, in the FAQ? Suggestions?

1 Like

Then when will another contest happen, the one after language update?

date of next contest is not known yet. However, you can expect it in 2 to 3 months from now

Can u add D-lang ( to the Clash/Practice without any start code?
Every Clash/Practice has some code as start point - read inputs strings and integers.
Its a lot of work should be done for adding new languages for each code-task. I think CG use some code generator, and that generator should be extended… Well, it will be done not tomorrow… I understand this.

Name it “D-lang (EMPTY)” or “BETA” or anything else coz no code as starting point or just some stub:
import std.format, std.conv, std.typecons, std.algorithm, core.bitop;
void main() { } // it’ll be enough
Why? I want to train with D-lang. Yes, I can read task, code it in Visual Studio for myself, but cannot test my code with CG tests (and hidden tests too) coz CG has no D-compiler, no infrastructure for compiling D-sources. Yes, I know that I can copy tests to local files and test it, but no CG-point and achievements for that. All I need it D-compiler in language list. I can edit code by myself (copy some start code to CG editor) without any help from CG.

Just adding D-lang to CG compilers family is simple:

  • D-compiler is free
  • D-compiler (DMD or LDC/LLVM) is command line tool that work fine after install
  • D-source compiled to usual EXEcutable file (CG’ VMs works on Linux so will be generated as Linux-EXE)
  • For test CG needs just in/output of running process or redirecting files. Well, D’s-EXE nothing differs from others EXEs - can input from stdin, can output to stdout and stderr

unfortunately, it’s not that simple.

The main issue with releasing a new language is adding it to the big jail which handles all other languages. Yes, we have one big blob for all languages. And sometimes, updates to a language impact another one.

You can compare it with where we can compile and run one language independently from the others.

I’ll try to run a survey to determine which languages the community wants the most.

I’d like to read more about this.

Yes, sounds like a more interesting blog post compared to “how to solve puzzle X” :wink:

1 Like

If you could use separate docker images for each language, then you could open it up to the community, and I am sure you would get plenty of help keeping the languages up to date and adding new languages.

1 Like

If i understand the _CG_Thibaud post well, CodinGame use only one docker image for all games. So it contains all needed tools (g++, python, python3, nodejs …).

It’s very simple to destroy a language when you update one language. Every developper had this problem one day. You want to update nodejs so you make a apt-get update nodejs and BOUM you updated python3 in the same time. Now your python2 does not work anymore because ubuntu want to see your little world burn (based on a true story).


And how do i avoid ruining my py3 install when updating nodejs?

Use virtual environments for python.

Very close. Our infrastructure to compile and execute your codes has been developed before Docker was ready. Therefore, we are not using it. We use a combination of overlayfs, ramfs, chroot and cgroups to do something very similar. The big difference is that we don’t have access to that nice system of images and layers provided by Docker… Thus, we have a big “jail” that contains all the tools needed to compile and execute the codes in 25 different languages. We have in our TODO list the migration of our system to docker, but I can’t tell you when.

The playgrounds is more recent and use a different stack based on docker images.


Ouch. It’s sad :frowning:

Java 12 is already available, could you…? please ?

We have updated the languages, feel free to report here any weird issue that could be related.

  • Bash : GNU Bash 4.4.23 => GNU Bash 5.0.2
  • C : gcc 8.2.0 mode C17 => gcc 8.3.0 mode C17
  • C++ : g++ 8.2.0 mode C++17 => g++ 8.3.0 mode C++17
  • C# : C# 6.0 (Mono 5.12.0, .NET 4.6) => C# 6.0 (Mono 5.18.0, .NET 4.6) (still only partial support of Mono for C# 7.0 and we didn’t manage to migrate to .Net Core)
  • Clojure : 1.9.0 - Oracle JVM 1.11 => 1.10.0 - Oracle JVM 1.11
  • Dart : 1.24.3 => 2.2.0
  • F# : 4.1 - no update available
  • Java : 1.8.0_152 => 11.0.2
  • Javascript : SpiderMonkey 63.0 (ES6) => Node 10.15.3
  • Go : 1.10.3 => 1.12.1
  • Groovy : 2.5.1 - Oracle JVM 1.8 => 2.5.6 - Oracle JVM 1.11 (there could be issues related to the move to JVM 11)
  • Haskell : 8.4.3 - no update (too complex to update to 8.6.3, we’ll look into it later)
  • Kotlin : 1.3.0 - no update (waiting for 1.3.30 which fixes a deployment issue - now compiled with JVM 1.8 target cc @kgautron )
  • Lua : 5.3.5 - no update available
  • Objective C : Clang 4.0 -> Clang 7.0.1
  • OCaml : 4.07.0 - no update available
  • Pascal : Free Pascal Compiler 3.0.4 - no update available
  • Perl : 5.24.1 => 5.28.1
  • PHP : 7.2.8 => 7.3.3
  • Python 2 : 2.7.15 => 2.7.16
  • Python 3 : 3.6.6 => 3.7.2
  • Ruby : 2.5.1 => 2.6.2
  • Rust : 1.27.2 => 1.33.0 (compiled with release libs all the time, see
  • Scala : 2.12.6 => 2.12.8
  • Swift : 4.1.3 => 4.2.3
  • VB.NET : Compiler Visual Basic 2005 (Mono 5.12.0, .NET 4.5) => Compiler Visual Basic 2005 (Mono 5.18.0, .NET 4.6)

:tada: :nerd_face: :muscle:


and again no D :cry:

And no Fortran.

As mentioned on discord i loose multiple ms doing almost nothing in Java. I recognized that i timeout very often on codealamode currently so i added some time measurements.

Following code

            System.err.println("aaa " + (System.nanoTime() - begin));
			long bla = System.nanoTime();
			if (pItem.contains(Part.DISH) || && usableDish == null) {
				System.err.println(System.nanoTime() - bla);
				System.err.println("aas " + (System.nanoTime() - begin));

results in output like

aaa 16510543
aas 26192677

that are 10ms lost for nothing

Interesting part is in a game, if it happens it is recreatable
But it does not happen always …


Need an example that everyone can play and see. In your case the code cannot be tested. Only to believe