Nim version 2.2.8 released

The Nim Team is happy to announce version 2.2.8, the fourth patch release for our stable release, Nim 2.2.

It comes four months after the 2.2.6 release and it contains 89 commits, bringing bugfixes and improvements.

If you’re still on Nim 1.6, take a look at the version 2.0 release article to see all the features you’re missing. If you’ve been using Nim 2.0, the version 2.2 release article shows the improvements available in Nim 2.2.

The Nim 2.2.8 changelog is available here.

Highlights

We think that for everyday users the most impactful bugfix is that for heavily multi-threaded code the default allocator is now much more stable. The days where the workaround -d:useMalloc is required might be beyond us. Please give us feedback!

Installing Nim 2.2.8

Check out if the package manager of your OS already ships version 2.2.8 or install it as described here.

If you have installed a previous version of Nim using choosenim, getting Nim 2.2.8 is as easy as:

$ choosenim update self
$ choosenim update stable

NOTE: We recommend you to install and use the latest version of choosenim, v.0.8.16, available in our choosenim repo.

Alternatively, you can download Nim 2.2.8 from our nightlies builds.

Bugfixes

  • Fixed “Unexpected ambiguous call with fields over object with default fields” (#25252)
  • Fixed “C++ styled name mangling must be opt-in via a different switch than –debuginfo” (#25263)
  • Fixed “Regression in 2.2.6: SIGBUS with iterator over const Table lookup - premature temporary destruction” (#25251)
  • Fixed “Unable to build Nim 2.2.6 tools from source” (#25265)
  • Fixed “std/unicode.strip trailing fails on some characters” (#19846)
  • Fixed “Regression: .global initialization inside method hoisted to preInitProc without temporary variable declarations (invalid C codegen)” (#25284)
  • Fixed “passing tuple with items defined as concept (UserDefinedClass) causes compiler crash” (#25227)
  • Fixed “setLen slow when shrinking seq due to zero-filling of released area” (#19728)
  • Fixed “setLenUninit missing for --mm:refc” (#25007)
  • Fixed “Term rewriting stops processing on long files” (#25304)
  • Fixed “SIGSEGV regression from Nim v2.2.4 to v2.2.6/devel with closure iteratures” (#25261)
  • Fixed “Combination of generic destructor and closure fails in certain cases” (#22305)
  • Fixed “Channel incorrectly takes a sink argument, when in fact it performs a deep copy internally” (#25324)
  • Fixed “Dangling pointers in stack traces with -d:nimStackTraceOverride” (#25306)
  • Fixed “Closure iterator swallows finally body when it contains try..except. Regression in 2.2.6/devel” (#25330)
  • Fixed “Invalid m_type access in hooks for distinct generic types under ARC/ORC/HOOKS/ATOMICARC” (#25341)
  • Fixed “Wrong type for second parameter of procedures “inc”, “dec”, “succ” and “pred”” (#25329)
  • Fixed “Regression from v2.2.6 to version-2-2/devel with importing let u {.global.} = default(ref int)” (#25369)
  • Fixed “[Concepts] Recursive concepts cause a compiler segfault when testing with is” (#17630)
  • Fixed “httpclient generates bad HTTPS requests through HTTP proxy” (#25319)
  • Fixed “Invalid pred in when swallowed” (#25254)
  • Fixed “Nim comment text + embedsrc breaks C codegen” (#25387)
  • Fixed “Hooks do not work for specific instances of static generic objects” (#23394)
  • Fixed “shl causes undefined behaviour” (#19983)
  • Fixed “Error: fatal error: invalid kind for lastOrd(tyNone) with type M = set” (#25419)
  • Fixed “Naked raised causes wrong exception effect” (#25400)
  • Fixed “unhandled exception: field ‘intVal’ is not accessible for type ‘TNode’ using ‘kind = nkNilLit’ [FieldDefect] with static: discard castpointer” (#25446)
  • Fixed “Long integer literal truncated without warning” (#25074)
  • Fixed “add --styleCheck:warn” (#19831)
  • Fixed “SIGSEGV when trying to compile generic + void-type + typeclass combo” (#25441)
  • Fixed “Crash when compiling invalid generic instantiation” (#25231)
  • Fixed “SIGSEGV in refc with distinct types and assign to heap-allocated object” (#25459)
  • Fixed “Warn on implicit range downsizing” (#24706)
  • Fixed “ICE leaking temporary 3 slotTempInt” (#25482)
  • Fixed “Computed types violate isa transitivity” (#25340)
  • Fixed “Strings can be compared against nil” (#25488)
  • Fixed “Crash on enum ranges as default parameters in generic procs” (#25494)
  • Fixed “align not respected in refc, leading to SIGSEGV” (#25457)
  • Fixed “Invalid C code generation with seq[array[...]]” (#25475)