Languages update

Iā€™ve just had confirmation that there will be an update of the languages just before the Spring Challenge which begins next week. Hopefully, end of this week.
Rust and Python (among others) versions will be updated. But not for C#, GO, PHP, and TypeScript. Also, the Dart update will not be retro-compatible, and will break every existing codes :frowning: Iā€™ll email impacted people.

I will share the complete list update as soon as itā€™s up.

7 Likes

Last time C++ had a language update, we lost all the stacktraces/error messages.

Any chance this bug will be fixed with the future language update?

Using C++ for a contest is really hard without any information when your code crashes.

most likely, it wonā€™t be fixed :frowning:
Iā€™m going to double-check though

The change of Rust version is probably on-going as I noticed a not backward compatible change in the new version of the rand module.

It also seems that the program is not executed in ā€œreleaseā€ mode anymore. It is probably temporary, could you please check that the release mode will be re-activated once the change of version is finished?

2 Likes

The FAQ page has already been updated with the proper versions :hugs:

and I +1 for the release mode !

4 Likes

We have updated the languages :partying_face:

  • Bash : GNU Bash 5.0.3 (no update)
  • C : gcc 9.2.1 mode C17 => gcc 10.2.1 mode C17
  • C++ : g++ 9.2.1 mode C++17 => g++ 10.2.1 mode C++17
  • C# : C# 7.0 (.NET Core 3.1.3) (no update)
  • Clojure : 1.10.1 - Oracle JVM 1.8 => 1.10.3 - Oracle JVM 1.8
  • D : DMD 2.088.0 => DMD 2.096.0
  • Dart : 2.5.0 => 2.12.4 (update breaking all existing codes, weā€™ll email impacted players)
  • F# : .NET Core 3.1.3 (no update)
  • Java : 1.8.0_211 (no update), too many performance issues above Java 8.
  • Javascript : Node 12.13.0 => Node 14.16.1
  • Go : 1.13.1 (no update), we need to completely change the GO implementation to get to 1.16.3
  • Groovy : 2.5.8 - Oracle JVM 1.8 => 3.0.8 - Oracle JVM 1.8
  • Haskell : 8.4.3 (no update), too complex to update
  • Kotlin : 1.3.31 (no update)
  • Lua : 5.3.5 => 5.4.3
  • Objective C : Clang 8.0.1 => Clang 11.0.1
  • OCaml : 4.09.0 => 4.12.0
  • Pascal : Free Pascal Compiler 3.0.4 => Free Pascal Compiler 3.2.0
  • Perl : 5.28.1 => 5.32.1
  • PHP : 7.3.9 (no update)
  • Python 3 : 3.7.4 => 3.9.2
  • Ruby : 2.6.5 => 3.0.1
  • Rust : 1.38.0 => 1.51.0
  • Scala : 2.13.1 => 2.13.5
  • Swift : 5.1.1 => 5.3.3
  • TypeScript : 4.2.2 (no update)
  • VB.NET : .NET Core 3.1.3 (no update)

Feel free to report here any weird issue that could be related.

20 Likes

Looks like D is broken: Error: cannot find source code for runtime library file ā€˜object.dā€™

1 Like

D has been fixed.

Weā€™ll put back Rust in release mode, most probably everywhere (In/Out, solo, multiā€¦ so no more Rust in debug mode) unless there is strong reaction from Rust players.

9 Likes

Is Rust compiled with -C target-cpu=native? If not, could it be added? It enables emission of instructions specific to the host architecture like SIMD, allowing for autovectorization.

5 Likes

For lua, I see the classical problem of the syntax checker in IDE not aware of new syntax introduced in the version 5.4 (ie local TOTO<const>=3 and local FOOBAR<close> =...)

For me it is a very light problem (I donā€™t think that this new syntax would be used in CG), but in general is it planned to update the IDE syntax checker when the syntax of the language evolve ?

4 Likes

no, itā€™s not compiled this way. Why this option is not activated by default? Does it impact the compilation time?

it should. Depends on the languages though. Weā€™ll update it for Lua.

2 Likes

It shouldnā€™t significantly impact compile time. Itā€™s not enabled by default because it potentially reduces the portability of the binary. By default, the compiler is limited to SSE2 instructions since theyā€™re part of the x86_64 spec, so the binary is guaranteed to run on any x64 CPU, but autovectorization opportunities are limited.

If you compile with -C target-cpu=native (native means detect host architecture) the compiler is allowed to use all instruction extensions supported by the host CPU (e.g. SSE3, SSSE3, SSE4.x, AVX, AVX2, etc.) The binary is then only guaranteed to run on CPUs with the same architecture, but if youā€™re compiling and running the binary on the same machine, which I presume youā€™re doing, then itā€™s guaranteed to work. If not, you can instead use -C target-feature=+sse4.2,+avx2, for example, to enable features that are supported by all runners (you can list features by running rustc --print target-features).

This is an area where JITed languages currently have an advantage since they do this stuff automatically.

10 Likes

It works now, thank you :wink:

4 Likes

Weā€™ve upgraded Kotlin to 1.5.0 (from 1.3.31) using the classic, but much slower, compiler.

Weā€™re in the process of increasing the allowed compilation time (plays in IDE should be failing now). Also weā€™ll increase the LSP version to 1.4 (1.5 not available)

2 Likes

I understand better now the random message ā€œCompilation took too long and has been interruptedā€¦ā€.

Are there any plans to support C# 9? Top-level statements would make the language a lot more competitive in short mode against languages like Python3.

6 Likes

Is there any plans to support for scala 3? The new optional brace is pretty neat, would be great if scala 3 available before fall challenge.

5 Likes

Are there plans to move on to another Kotlin compiler (version) in the near future? The current one takes ages to compile even one liners and has problems with language assist. This is a surmountable inconvenience for puzzles, as long as itā€™s temporary, but it makes Kotlin totally useless in clash of code.

2 Likes

There are no plans for now. Unfortunately, using another infrastructure to compile Kotlin requires quite some dev on our side so Iā€™m not sure weā€™d like to go for it. Iā€™ll bump the issue to my team and keep you updated.

Thatā€™s sad to hear, but thanks for the info.

Iā€™m not sure if putting lots of work into a different infrastructure is even that helpful if the problem lies with the compiler itself. Perhaps you could consider not waiting for the next major Kotlin release, but already try out the next incremental release, which should arrive in July, I think.