Nim versions 2.2.0 and 2.0.10 released

The Nim Team is happy to announce two releases:

  • version 2.2.0, our new stable release
  • version 2.0.10, a patch release for Nim 2.0

Nim v2.2.0 is a continuation of our efforts to improve Nim 2: it contains almost 1000 new commits, bringing improvements to the ORC memory management and to the language and the compiler overall.

Nim v2.0.10 is a patch release aimed at our enterprise users who cannot immediately switch to Nim 2.2, containing 80 commits with bugfixes.

Nim 2.2.0

Release highlights

Many long-standing compiler bugs with generics, typedesc and static types have been fixed in this release, effectively making these features stable. In particular, arbitrary expressions for types and values in generic types are now largely functional when they only worked in specific cases before. The release has a focus on bugfixes in general, with many other issues fixed across the board.

This release continues with the improvements regarding C++ interop:

  • noInit can be used in types and fields to disable member initializers in the C++ backend.
  • C++ custom constructors initializers.
  • member can be used to attach a procedure to a C++ type.
  • C++ constructor now reuses result instead creating this.

JS backend now supports lambda lifting for closures and closure iterators.

Methods now support implementations based on a VTable by using --experimental:vtables. Methods are then confined to the same module where their type has been defined.

Tuple unpacking got a bit more powerful:

  • Tuple unpacking assignment now supports using underscores to discard values.
    var a, c: int
    (a, _, c) = (1, 2, 3)
    
  • Tuple unpacking variable declarations now support type annotations, but only for the entire tuple.
    let (a, b): (int, int) = (1, 2)
    let (a, (b, c)): (byte, (float, cstring)) = (1, (2, "abc"))
    

An experimental switch --experimental:openSym has been added to deal with issues with symbol captures inside generic routines & templates. For macro authors, this adds a new node kind nnkOpenSym that may need to be handled differently (similar to nnkOpenSymChoice). See the full changelog for details.

Nim 2.2.0 ships with Nimble 0.16.1, which brings a SAT solver as an opt-in option.

 

For a full changelog, see here.

A complete list of changes is available here.

All bugfixes are listed at the bottom of this blogpost.

Installing Nim 2.2.0

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

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

$ choosenim update self
$ choosenim update stable

Make sure that the version of choosenim you have installed is 0.8.5 or higher, otherwise visit choosenim’s repo and see there how to re-install it first, before updating Nim.

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

 

 

Nim 2.0.10

A complete list of changes in Nim 2.0.10 is available here.

Installing Nim 2.0.10

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

$ choosenim update self
$ choosenim 2.0.10

Make sure that the version of choosenim you have installed is 0.8.5 or higher, otherwise visit choosenim’s repo and see there how to re-install it first, before updating Nim.

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

 

 

Bugfixes

Nim 2.0.10

  • Fixed “Error: generic instantiation too nested after using many compiles(...)” (#23790)
  • Fixed “system.=destroy does not accept non-var types” (#22286)
  • Fixed “std/isolation raises warning about how =destroy may raise unlisted Exception Exception” (#23129)
  • Fixed “Different memory usage behavior with Nim 2.0.0 vs 1.6.x” (#22510)
  • Fixed “Bad CPP codegen when using var array[] argument type in imported C functions.” (#23796)
  • Fixed “passing string to parseutils.parseFloat(openArray[char],...) in compile-time leads to inner error FieldDefect” (#23936)
  • Fixed “Memory corruption with lent and ORC” (#23973)
  • Fixed “Pushing a hint off “disables” code reordering” (#24053)
  • Fixed “SIGSEGV when slicing string or seq[T] with index out of range” (#22852)
  • Fixed “tasks.toTask Doesn’t Expect a Dot Expression” (#23635)
  • Fixed “Duplicate libraries linker warning (i.e., ‘-lm’) when importing std/math” (#22798)
  • Fixed “Deadloop in Windows, os.sleep(-1)” (#23732)
  • Fixed “waitForExit() with timeout hangs on already dead processes on Linux” (#5091)
  • Fixed “Missing range check in toOpenArray” (#20865)
  • Fixed “ptr UncheckedArray to openArray conversion: resulting openArray can have wrong mutability” (#19171)
  • Fixed “succ raise OverflowDefect, succ does not handle unsigned integers correctly” (#23894)
  • Fixed “Valid uint64 literal says -72057594037927936 can’t be converted to uint64.” (#14522)
  • Fixed “Improper code generation for cross-compilation using arm-none-eabi-gcc” (#23817)
  • Fixed “uint8 > 8 bit at compile-time” (#23954)
  • Fixed “Invalid type in nkWhenStmt” (#23945)
  • Fixed “Invalid type checking for two instances of the same Generic type” (#22826)
  • Fixed “Invalid generic type deduction with distinct, static “ (#23445)
  • Fixed “with {.push deprecated.}, get unhandled exception: ast.nim(1073, 3) result == nil or result.kind == nkPragma [AssertionDefect]” (#24167)

 

 

Nim 2.2.0

  • Fixed “-d:useMalloc broken with --mm:none and threads on” (#22262)
  • Fixed “rand(bool) always returns false” (#22360)
  • Fixed “Compiler crashes with staticBoundsCheck on” (#22362)
  • Fixed “Allow libffi to work via koch boot” (#22322)
  • Fixed “Unspecified generic on default value segfaults the compiler” (#20883)
  • Fixed “[ARC] Global variable declared in a block is destroyed too early” (#15005)
  • Fixed “error: call to undeclared function ‘nimlf_’” (#22287)
  • Fixed “Undefined behavior when with hash(...) on non-aligned bytes due to murmurHash cast[ptr int32]” (#22387)
  • Fixed “Passing Natural to bitops.BitsRange[T] parameter in generic proc is compile error” (#18823)
  • Fixed “Illegal capture when should be legal? (part 2)” (#20891)
  • Fixed “async/closure environment does not align local variables” (#22419)
  • Fixed “nim compiler assertion fail when literal integer is passed as template argument for array size” (#12938)
  • Fixed “Crash of compiler on array type check” (#5780)
  • Fixed “Can’t instantiate generic in some cases” (#21760)
  • Fixed “Borrowing std/times.format causes “Error: illformed AST”” (#19304)
  • Fixed “internal error: inconsistent environment type” (#18103)
  • Fixed “Compiler crash when a tuple iterator with when nimvm is iterated in a closure iterator” (#17045)
  • Fixed “nimsuggest: Incorrect error reported during overload resolution with procedures with static parameters” (#22448)
  • Fixed “Exceptions in top level statements of submodule not being reported/handled” (#22469)
  • Fixed “when picks wrong branch with static int” (#22474)
  • Fixed “Undefined behavior with set card() on non-aligned pointer from cardSetImpl/countBits64cast on ptr uint64” (#22481)
  • Fixed “Regression from 1.6.14 to 2.0.0 - nimble test crashes with a core dump” (#22357)
  • Fixed “Make newStringUninit available in the VM [backport]” (#22748)
  • Fixed “[docs] broken link to sha-2 in “see also” section for sha-1” (#22441)
  • Fixed “Debugging/stepping is broken in 2.0.0 and 2.1.1” (#22366)
  • Fixed “Testament fails “reject”-test when compile-error originates from file other than test-file” (#22514)
  • Fixed “returning string inside a loop unnecessarily generates =sink” (#21722)
  • Fixed “docs: Search CSS broken on devel” (#22492)
  • Fixed “elementType from std/typetraits doesn’t work in generic procs” (#21532)
  • Fixed “peg matchLen can raise an unlisted exception: Exception” (#22541)
  • Fixed ““environment misses” for type reference in iterator access nested in closure” (#22548)
  • Fixed “Adding an element to a seq ptr captured in closure works at runtime, but silently fails at compile time” (#9334)
  • Fixed “Unhandled compiler exception [FieldDefect]: ‘sym’ is not accessible for type ‘TNode’ using ‘kind = nkClosure’” (#19095)
  • Fixed “newString zeroes memory contrary to its documentation, significantly slowing it down” (#22555)
  • Fixed “Piece of code output c compiler error “ (#17197)
  • Fixed “generic types parameter asserts the compiler” (#22600)
  • Fixed “Missing type inference in loop + case + if + continue” (#22604)
  • Fixed “Default value does not work with object’s discriminator” (#22613)
  • Fixed “internal error: no generic body” (#1500)
  • Fixed “Footnotes in documentation generation seem to be broken by default” (#21080)
  • Fixed “Long-term arc-closure iterator problem” (#22619)
  • Fixed “Regression in {.borrow.} for generic type with static size” (#22646)
  • Fixed “Invalid type mismatch in generic” (#17509)
  • Fixed “type binding fails for type alias with extra generic parameter” (#21742)
  • Fixed “Procs with constructor pragma doesn’t initialize object’s fields” (#22662)
  • Fixed “=copy hook for seq appears to be broken” (#22664)
  • Fixed “Using merge for a macro name causes it to silently get ignored” (#22676)
  • Fixed “Nim zero clear an object contains C++ imported class when a proc return it” (#22679)
  • Fixed “constructor pragma doesnt init Nim default fields” (#22669)
  • Fixed “Nim zero clear an object inherits C++ imported class when a proc return it” (#22680)
  • Fixed “Size calculation thinks type is infinitely recursive with shared section and pragma” (#22713)
  • Fixed “Defining a proc with constructor pragma cause compile error” (#22712)
  • Fixed “ci/ directory missing from source archive” (#22692)
  • Fixed “js backend - std/bitops/bitsliced throws compile error in typeMasked as of nim 2.0” (#22687)
  • Fixed “Generated enum case code may trigger -Wmaybe-uninitialized” (#22246)
  • Fixed “DocGen does not work for std/times on JS backend” (#22519)
  • Fixed ““unknown hint” should not be an error - it should itself be a hint that can be enabled/disabled” (#22706)
  • Fixed “Docstring in invalid var block causes ICE” (#15351)
  • Fixed “Varargs conversions produce erroneous ConvFromXtoItselfNotNeeded warnings” (#10542)
  • Fixed “VisualViewport in std/dom” (#21407)
  • Fixed “newSeqUninitialized over-constrained, setLenUninitialized missing” (#19727)
  • Fixed “Paths in nim.cfg are not relative to the file” (#22763)
  • Fixed “Compilation fails when using fusion’s ‘Some’ inside a generic proc” (#20435)
  • Fixed “func strutils.join for non-strings uses proc $ which can have side effects” (#22696)
  • Fixed “newSeqWith unnecessarily/redundantly zero-initializes created seq” (#22554)
  • Fixed “Nimsuggest segfault with invalid assignment to table” (#22753)
  • Fixed “contentLength implementation type mismatched” (#22778)
  • Fixed “Check atomicArc for atomic destroy race condition” (#22711)
  • Fixed “Different results on orc/refc or global/procedure scope with orc” (#22787)
  • Fixed “nimsuggest false error on lifetime tracking hook” (#22794)
  • Fixed “[Renderer] SIGSEGV when trying to render invalid AST” (#8893)
  • Fixed “AnyEnumConv warning when iterating over enum” (#22790)
  • Fixed “Wrong codegen for default parameter values that calls var Object procedure with ARC/ORC on C++ backend.” (#22354)
  • Fixed “ORC AssertionDefect not containsManagedMemory(n.typ)” (#19250)
  • Fixed “followup #16820, test tsugar on all backends” (#16919)
  • Fixed “Unnecessary warning on ‘options.none’ with ‘strictDefs’ enabled” (#22836)
  • Fixed “std/nativesockets getHostByAddr should support IPv6” (#22834)
  • Fixed “enumutils items[HoleyEnum] example code produces “unsafe” warnings” (#22844)
  • Fixed “Invalid type checking for two instances of the same Generic type” (#22826)
  • Fixed “Calling delete on an empty sequence results in invalid sequence” (#22856)
  • Fixed “cstring modification example on Nim Manual cause SIGSEGV” (#22867)
  • Fixed “std/nre leaks memory on every created Regex due to auto-translated finalizers behaving differently under ARC/ORC” (#22868)
  • Fixed “Cannot getContent with httpClient for specific website” (#22862)
  • Fixed “Table, CountTable, and HashSet warn on UnsafeDefault del/excl requiresInit key type” (#22883)
  • Fixed “Destructor not called for temp objects passed as arguments” (#22866)
  • Fixed ““Error: borrow from proc return type mismatch: ‘lent string’” when borrowing [] from Table” (#22902)
  • Fixed “AnyEnumConv warning when iterating over set” (#22860)
  • Fixed “reset instances not be accessible for requiresInit types” (#22898)
  • Fixed “Cannot prove that result is initialized for a placeholder base method returning a lent” (#22673)
  • Fixed “std/options don’t consider closure iterators to be pointer types” (#22932)
  • Fixed “[Regression] static integers in quote do” (#22947)
  • Fixed “push-ing pragma exportc generates invalid C identifiers” (#22913)
  • Fixed “Pushing used suppresses the XDeclaredButNotUsed hint for some identifiers, but not others” (#22939)
  • Fixed “Nim compiler produces C code with incompatible type assignment” (#12464)
  • Fixed “inferGenericTypes does not work with method call syntax” (#22971)
  • Fixed “system.=destroy does not accept non-var types” (#22286)
  • Fixed “Defaulting a value to a type silently works in ref object” (#22996)
  • Fixed “Different type inferred when setting a default value for an array field” (#22926)
  • Fixed “newSeqUninit -> CT Error: opcCastIntToPtr” (#23006)
  • Fixed “Problem removing cstring unsafe conversion warning” (#23001)
  • Fixed “SIGSEGV when slicing string or seq[T] with index out of range” (#22852)
  • Fixed “Unexpected seq copy under ORC” (#22552)
  • Fixed “Regression from 2.0 to devel with raise an unlisted exception: Exception” (#23019)
  • Fixed “Undeclared identifier in Unicode gives Unhelpful error message” (#23060)
  • Fixed “nimsuggest inlay hints for types shown in the wrong place for exported vars and consts” (#23067)
  • Fixed “macro is evaluated twice in generic context” (#9381)
  • Fixed “nim doc doesn’t work when calling =destroy(x: var seq[T]) in =destroy(x: Foo)” (#23065)
  • Fixed “std/random initRand() has a double identical entry in nim-lang.org/docs” (#23051)
  • Fixed “--experimental:strictNotNil causes an error” (#22637)
  • Fixed “Compiler doesn’t catch Not nil annotation error” (#18073)
  • Fixed “Type mismatch error when importing strutils on platforms where ints are less then 32-bits wide” (#23125)
  • Fixed “import sth from mymodule is compiles and trying to see module sthfrommymodule” (#23148)
  • Fixed “Importing module with path concatenation inside templates not working anymore” (#23167)
  • Fixed “Cannot get repr of range type of enum” (#23139)
  • Fixed “ambiguous call with $ when using distinct” (#23172)
  • Fixed “std/isolation raises warning about how =destroy may raise unlisted Exception Exception” (#23129)
  • Fixed “Error: internal error: genMagicExpr: mDup when using arrayWith with some types.” (#22923)
  • Fixed “std/isolation raises warning about how =destroy may raise unlisted Exception Exception” (#23129)
  • Fixed “Tuple destructuring is broken with closure iterators” (#15924)
  • Fixed “Compiler error (illegal read) on tuple unpacking in a for loop” (#23180)
  • Fixed “system.insert wipes the string if item is an empty string” (#23223)
  • Fixed “const cstring incorrectly cgen’d (pointer is copied, pointing to garbage)” (#12334)
  • Fixed “copy generated for non-copyable type” (#22218)
  • Fixed “Regression when using generic type with Table/OrderedTable” (#23233)
  • Fixed “[docgen] runnableExamples causes subsection to be rendered as a section” (#15176)
  • Fixed “Converter and openArray together generate the wrong C code.” (#22597)
  • Fixed “Parser does not correspond to grammar for concept” (#23085)
  • Fixed “1.6 to 2.0 regression with UncheckedArray[string]/toOpenArray resulting in SIGSEGV” (#23247)
  • Fixed “tvatiteropenarray test fails with c++” (#19977)
  • Fixed “Compiler segfaults when passing static parameter to non static macro parameter” (#22909)
  • Fixed “nimsuggest con sometimes doesnt return anything on first pass” (#23281)
  • Fixed “method call syntax in nkRecWhen condition gives SIGSEGV” (#14710)
  • Fixed “Operations on inline toOpenArray len return a wrong result” (#23280)
  • Fixed “== doesn’t work correctly for Deque” (#23275)
  • Fixed “Wrong C code generated for newSeqWith when initializing two variables” (#18104)
  • Fixed “nimsuggest sug doesnt return anything on first pass” (#23283)
  • Fixed “Refrain from using sprintf(), which triggers warnings in macOS 13/Xcode 14.1 clang” (#23304)
  • Fixed “Wrong behaviour when wrapping a constant object variant into a sequence at runtime” (#23295)
  • Fixed “When NimScript errors prevents NimSuggest from Init” (#23337)
  • Fixed “Error in proc that modifies instances of a recursive type defined with a concept” (#22723)
  • Fixed “nim cpp -r invalid code generation regression with closure iterators and try/catch-like constructions” (#23306)
  • Fixed “{.union.} pragma is ignored on NimVM” (#13481)
  • Fixed “sink parameters sometimes not copied even when there are later reads (refc)” (#23354)
  • Fixed “Compiler error: “unhandled exception: field ‘sym’ is not accessible for type ‘TNode’ using ‘kind = nkEmpty’ [FieldDefect]”” (#23273)
  • Fixed “Compiler doesn’t insert call to =destroy when compiled to staticLib” (#20945)
  • Fixed “Invalid C++ code generation when returning var T” (#10219)
  • Fixed “nim cpp rejects valid code would lose const qualifier for cstring to string via cstrToNimstr” (#12703)
  • Fixed “ICE when trying to repr nnkMutableTy in macro” (#15751)
  • Fixed “Lambdas expanded from template arguments crash the compiler” (#22846)
  • Fixed “for JS, abs BiggestInt -1 failed to run” (#23378)
  • Fixed “Regression from 1.6 to 2.0/devel with nim c -c SIGSEGV with template/raises: []” (#22284)
  • Fixed “close(File) and setFilePos(File, int64, ...) can be used in func” (#22166)
  • Fixed “when compile lambda iterator for JS, internal error: symbol has no generated name: true “ (#23382)
  • Fixed “Future[object] aways copy data” (#23381)
  • Fixed “NRVO can kick in on exportc, dynlib procedures” (#23401)
  • Fixed “Warning is ignored when using flags --warningAsError and --verbosity together” (#23429)
  • Fixed “set[uint8].len returns a random number when passed to a proc as a var” (#23422)
  • Fixed “Wrong code generation when using a proc with virtual pragma as parameter.” (#23434)
  • Fixed “Concept related crash only when compiling to JS” (#9550)
  • Fixed “swap silently broken for objects inside functions (js target)” (#16771)
  • Fixed “Destructor not called for object subclass created in template and immediately passed as argument” (#23440)
  • Fixed “Nested generic procs scoping in JS backend” (#4299)
  • Fixed “JS chckNilDisp is wrong” (#23487)
  • Fixed “Regression when using the volatile module on devel” (#23499)
  • Fixed “Wrong type in object construction error message” (#23494)
  • Fixed “Error: unhandled exception: injectdestructors.nim(425, 12) n.kind != nkSym or not hasDestructor(c, n.sym.typ) with ARC or ORC during compilation” (#23505)
  • Fixed “Problem with closure iterators in js target” (#4695)
  • Fixed “JS case using float range causes compiler crash” (#23492)
  • Fixed “<expr> is crashes nimsuggest” (#23518)
  • Fixed “Top level variables are moved sometimes” (#23524)
  • Fixed “nim c -c on {.push emit.}: Error: unhandled exception: field 'sons' is not accessible for type 'TNode' using 'kind = nkIdent' [FieldDefect]” (#23525)
  • Fixed “anonymous closure iterators doesn’t work with global variable in JS” (#23522)
  • Fixed “Stack trace with wrong line number when the proc called inside for loop” (#23536)
  • Fixed “Error: fatal error: invalid kind for lastOrd(tyGenericParam) in compiler given invalid array declaration” (#23531)
  • Fixed “Error: internal error: openArrayLoc: ref array[0..0, int] with new array[1, int] and toOpenArray” (#23321)
  • Fixed “internal error: getTypeDescAux with void in generic array instantiation” (#23419)
  • Fixed “typeinfo.extendSeq generates random values” (#23556)
  • Fixed “value out of range [RangeDefect] in getFileInfo() for a specific file (file handle overflow?)” (#23442)
  • Fixed “Invalid styleCheck:hint for enum/func conflict” (#22409)
  • Fixed “Invalid codegen when trying to mannualy delete distinct seq” (#23552)
  • Fixed “Viewtype codegen error turns a single proc call into two” (#15778)
  • Fixed “Error adding object with an openarray field to seq of base type” (#16671)
  • Fixed “Simple destructor code gives invalid C” (#23627)
  • Fixed “template return type ignored in type check, accepts invalid code” (#13426)
  • Fixed “SIGSEGV when slicing string or seq[T] with index out of range” (#22852)
  • Fixed “tasks.toTask Doesn’t Expect a Dot Expression” (#23635)
  • Fixed “Add hash() for Path” (#23663)
  • Fixed “Duplicate libraries linker warning (i.e., ‘-lm’) when importing std/math” (#22798)
  • Fixed “Bad codegen when casting procs” (#5901)
  • Fixed “Different memory usage behavior with Nim 2.0.0 vs 1.6.x” (#22510)
  • Fixed “Destructor not called for result when exception is thrown” (#22672)
  • Fixed “sink parameters sometimes not copied even when there are later reads (refc)” (#23354)
  • Fixed “Invalid generic type deduction with distinct, static “ (#23445)
  • Fixed “On Linux, “nimsuggest” crashes if Nim is installed in /usr/bin and the library in /usr/lib/nim” (#23695)
  • Fixed “memory leak with nested Exceptions” (#22398)
  • Fixed “SIGSEGV with object variants and RTTI” (#23690)
  • Fixed “parseInt accepts more than digits” (#23513)
  • Fixed “ORC runs into infinite recursion” (#22927)
  • Fixed “Views: GCC error when construct object with openArray from proc parameter” (#20048)
  • Fixed “Deadloop in Windows, os.sleep(-1)” (#23732)
  • Fixed “[Semi-regression] C code contains backtick`gensym” (#23711)
  • Fixed “setLen(0) allocates memory causing performance regression” (#23742)
  • Fixed “Sigsegv on std/tasks destructor” (#23725)
  • Fixed “genericAssign does not take care of the importC variables” (#9940)
  • Fixed “move(table) does not move the table” (#23759)
  • Fixed “Local variables can be prematurely moved to closure, causing use-after-move” (#23748)
  • Fixed “waitForExit() with timeout hangs on already dead processes on Linux” (#5091)
  • Fixed “Regression: compiler crash on static inference” (#23755)
  • Fixed “Miscompilation of certain code” (#23775)
  • Fixed “Regression: ICE genCheckedRecordField with unsafeAddr and macros” (#23784)
  • Fixed “Error: generic instantiation too nested after using many compiles(...)” (#23790)
  • Fixed “Bad CPP codegen when using var array[] argument type in imported C functions.” (#23796)
  • Fixed “Returning address of constant array emits invalid C code” (#22389)
  • Fixed “Missing range check in toOpenArray” (#20865)
  • Fixed “VM crash when passing toOpenArray to var openArray func” (#22095)
  • Fixed “illegal declarations should give error at declaration time, not later at instantiation time” (#3011)
  • Fixed “Using waitForExit with timeout from multiple threads simultaneously hangs” (#23825)
  • Fixed “cursor optimizer doesn’t understand that distinct cstring can be an owning type” (#23837)
  • Fixed “Nim devel nightly i386 build failing” (#23844)
  • Fixed “koch pdf produces a warning about unknown substitution ‘nimversion’” (#23846)
  • Fixed “nim gendepend does not work with var-less destructors” (#23848)
  • Fixed “2.2.0 rc1 regression with cdecl functions” (#23858)
  • Fixed “ARC hooks missing when sinking generic typeclass” (#23869)
  • Fixed “Cross compilation with mingw for cpu=i386 from linux/macos fails with time_t bug” (#23838)
  • Fixed “nimsuggest crashes when using --mm:arc/orc and if an object that contains string or seq is constructed” (#23867)
  • Fixed “ptr UncheckedArray to openArray conversion: resulting openArray can have wrong mutability” (#19171)
  • Fixed “succ raise OverflowDefect, succ does not handle unsigned integers correctly” (#23894)
  • Fixed “VM: Can’t get address of object” (#13391)
  • Fixed “Error: 's' has unspecified generic parameters with generics and template” (#21347)
  • Fixed “Unsigned integers are sometimes converted to signed when casting to a float” (#6549)
  • Fixed “Compiler infers sink in return type from auto” (#23902)
  • Fixed “Double destroy using proc type alias with a sink” (#23907)
  • Fixed “jsondoc broken in devel” (#23914)
  • Fixed “Valid uint64 literal says -72057594037927936 can’t be converted to uint64.” (#14522)
  • Fixed “vmopsDanger for os.getCurrentDir errors because of importc check.” (#23932)
  • Fixed “passing string to parseutils.parseFloat(openArray[char],...) in compile-time leads to inner error FieldDefect” (#23936)
  • Fixed “-Warray-bounds when accessing seq with offset positive offset on cpp backend” (#23913)
  • Fixed “Improper code generation for cross-compilation using arm-none-eabi-gcc” (#23817)
  • Fixed “.uint8 compile-time error” (#23947)
  • Fixed “uint8 > 8 bit at compile-time” (#23954)
  • Fixed “xu.p.data[i] = default(T) doesnt produce any cgen code in importcpp types” (#23962)
  • Fixed “Memory corruption with lent and ORC” (#23973)
  • Fixed “Recent codegen bug passing pointer expressions to inline iterators” (#23982)
  • Fixed “Invalid type in nkWhenStmt” (#23945)
  • Fixed “Put 0 in range[M..N] that would otherwise exclude it” (#23943)
  • Fixed “IndexDefect thrown when destructuring a lent value” (#23454)
  • Fixed “bindUnix loses the last character on OpenBSD” (#23956)
  • Fixed “std/random produces different results on c/js[node] with int32” (#23915)
  • Fixed “offsetof(T, anFieldOfUncheckedArray) returned the wrong value” (#22553)
  • Fixed “VM generates wrong cast for negative enum values” (#23925)
  • Fixed “Top-level volatileLoad/volatileStore leads to invalid codegen” (#14623)
  • Fixed “type-aliased seq[T] get different backend C/C++ pointer type names causing invalid codegen on gcc-14 | g++ | clang++” (#23923)
  • Fixed “Invalid C code generated for lent array in tuple” (#24034)
  • Fixed “js codegen bug for case statement with just else branch” (#24031)
  • Fixed “Yielding from var fails with pairs and destructuring” (#24033)
  • Fixed “Useless empty C files with arc/orc” (#23897)
  • Fixed “Pushing a hint off “disables” code reordering” (#24053)
  • Fixed “closure types with default values don’t work in VM” (#21353)
  • Fixed “GDB. tools/debug/nim-gdb.py bug” (#24109)
  • Fixed “nim check crashes “ (#23624)
  • Fixed “Calling algorithm reverse causes a SIGSEGV on ORC” (#24141)
  • Fixed “in std/logging implement removeHandler” (#23757)
  • Fixed “Copy hook causes an incompatible-pointer-types warning/error in GCC 14 with subclassed objects” (#24147)
  • Fixed “with {.push deprecated.}, get unhandled exception: ast.nim(1073, 3) result == nil or result.kind == nkPragma [AssertionDefect]” (#24167)
  • Fixed “dist/checksums wrong type: preventing build_all.sh” (#24173)
  • Fixed “Sink parameters not copied at compile time” (#24175)
  • Fixed “copyDir and copyDirWithPermissions do not handle FIFOs (named pipes)” (#24174)
  • Fixed “Output executable is not updated after changing build mode” (#24008)