-
-d:nimStrictDelete
becomes the default. An index error is produced when the index passed tosystem.delete
was out of bounds. Use-d:nimAuditDelete
to mimic the old behavior for backwards compatibility. -
The default user-agent in
std/httpclient
has been changed toNim-httpclient/<version>
instead ofNim httpclient/<version>
which was incorrect according to the HTTP spec. -
Methods now support implementations based on a VTable by using
--experimental:vtables
. Methods are then confined to be in the same module where their type has been defined. -
With
-d:nimPreviewNonVarDestructor
, non-var destructors become the default. -
A bug where tuple unpacking assignment with a longer tuple on the RHS than the LHS was allowed has been fixed, i.e. code like:
var a, b: int (a, b) = (1, 2, 3, 4)
will no longer compile.
-
internalNew
is removed from system, usenew
instead. -
bindMethod
instd/jsffi
is deprecated, don't use it with closures.
- Changed
std/osfiles.copyFile
to allow to specifybufferSize
instead of a hardcoded one. - Changed
std/osfiles.copyFile
to usePOSIX_FADV_SEQUENTIAL
hints for kernel-level aggressive sequential read-aheads. std/htmlparser
has been moved to a nimble package, usenimble
oratlas
to install it.
- Added
newStringUninit
to system, which creates a new string of lengthlen
likenewString
but with uninitialized content. - Added
setLenUninit
to system, which doesn't initalize slots when enlarging a sequence. - Added
hasDefaultValue
tostd/typetraits
to check if a type has a valid default value. - Added Viewport API for the JavaScript targets in the
dom
module. - Added
toSinglyLinkedRing
andtoDoublyLinkedRing
tostd/lists
to convert fromopenArray
s. - ORC: To be enabled via
nimOrcStats
there is a new API calledGC_orcStats
that can be used to query how many objects the cyclic collector did free. If the number is zero that is a strong indicator that you can use--mm:arc
instead of--mm:orc
. - A
$
template is provided forPath
instd/paths
.
- Deprecates
system.newSeqUninitialized
, which is replaced bynewSeqUninit
.
-
noInit
can be used in types and fields to disable member initializers in the C++ backend. -
C++ custom constructors initializers see https://nim-lang.org/docs/manual_experimental.htm#constructor-initializer
-
member
can be used to attach a procedure to a C++ type. -
C++
constructor
now reusesresult
instead creatingthis
. -
Tuple unpacking changes:
- 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"))
- Tuple unpacking assignment now supports using underscores to discard values.
-
An experimental option
genericsOpenSym
has been added to allow captured symbols in generic routine bodies to be replaced by symbols injected locally by templates/macros at instantiation time.bind
may be used to keep the captured symbols over the injected ones regardless of enabling the option.Since this change may affect runtime behavior, the experimental switch
genericsOpenSym
needs to be enabled, and a warning is given in the case where an injected symbol would replace a captured symbol not bound bybind
and the experimental switch isn't enabled.const value = "captured" template foo(x: int, body: untyped) = let value {.inject.} = "injected" body proc old[T](): string = foo(123): return value # warning: a new `value` has been injected, use `bind` or turn on `experimental:genericsOpenSym` echo old[int]() # "captured" {.experimental: "genericsOpenSym".} proc bar[T](): string = foo(123): return value assert bar[int]() == "injected" # previously it would be "captured" proc baz[T](): string = bind value foo(123): return value assert baz[int]() == "captured"
--nimcache
using a relative path as the argument in a config file is now relative to the config file instead of the current directory.
- koch now allows bootstrapping with
-d:nimHasLibFFI
, replacing the older option of building the compiler directly w/ thelibffi
nimble package in tow.