base64.encode
no longer supportslineLen
andnewLine
. Usebase64.encodeMIME
instead.os.splitPath()
behavior synchronized withos.splitFile()
to return "/" as the dir component of "/root_sub_dir" instead of the empty string.sequtils.zip
now returns a sequence of anonymous tuples i.e. those tuples now do not have fields named "a" and "b".strutils.formatFloat
withprecision = 0
has the same behavior in all backends, and it is compatible with Python's behavior, e.g.formatFloat(3.14159, precision = 0)
is now3
, not3.
.- Global variable
lc
has been removed from sugar.nim. distinctBase
has been moved from sugar.nim to typetraits and now implemented as compiler type trait instead of macro.distinctBase
in sugar module is now deprecated.CountTable.mget
has been removed fromtables.nim
. It didn't work, and it was an oversight to be included in v1.0.tables.merge(CountTable, CountTable): CountTable
has been removed. It didn't work well together with the existing inplace version of the same proc (tables.merge(var CountTable, CountTable)
). It was an oversight to be included in v1.0.options
now treatsproc
like other pointer types, meaningnil
proc variables are converted toNone
.relativePath("foo", "foo")
is now"."
, not""
, as""
means invalid path and shouldn't be conflated with"."
; use -d:nimOldRelativePathBehavior to restore the old behaviorjoinPath(a,b)
now honors trailing slashes inb
(ora
ifb
= "")times.parse
now only uses input to compute its result, and notnow
:parse("2020", "YYYY", utc())
is now2020-01-01T00:00:00Z
instead of2020-03-02T00:00:00Z
if run on 03-02; it also doesn't crash anymore when used on 29th, 30th, 31st of each month.
- Implicit conversions for
const
behave correctly now, meaning that code likeconst SOMECONST = 0.int; procThatTakesInt32(SOMECONST)
will be illegal now. Simply writeconst SOMECONST = 0
instead. - The
{.dynlib.}
pragma is now required for exporting symbols when making shared objects on POSIX and macOS, which make it consistent with the behavior on Windows. - The compiler is now more strict about type conversions concerning proc
types: Type conversions cannot be used to hide
.raise
effects or side effects, instead acast
must be used. With the flag--useVersion:1.0
the old behaviour is emulated.
-
macros.newLit
now works for ref object types. -
system.writeFile
has been overloaded to also supportopenarray[byte]
. -
Added overloaded
strformat.fmt
macro that use specified characters as delimiter instead of '{' and '}'. -
introduced new procs in
tables.nim
:OrderedTable.pop
,CountTable.del
,CountTable.pop
,Table.pop
-
To
strtabs.nim
, addedStringTable.clear
overload that reuses the existing mode. -
Added
browsers.osOpen
const alias for the operating system specific "open" command. -
Added
sugar.dup
for turning in-place algorithms likesort
andshuffle
into operations that work on a copy of the data and return the mutated copy. As the existingsorted
does. -
Added
sugar.collect
that does comprehension for seq/set/table collections. -
Added
sugar.capture
for capturing some local loop variables when creating a closure. This is an enhanced version ofclosureScope
. -
Added
typetraits.tupleLen
to get number of elements of a tuple/type tuple, andtypetraits.get
to get the ith element of a type tuple. -
Added
typetraits.genericParams
to return a tuple of generic params from a generic instantiation -
Added
os.normalizePathEnd
for additional path sanitization. -
Added
times.fromUnixFloat,toUnixFloat
, subsecond resolution versions offromUnix
,toUnixFloat
. -
Added
wrapnils
module for chains of field-access and indexing where the LHS can be nil. This simplifies code by reducing need for if-else branches around intermediate maybe nil values. E.g.echo ?.n.typ.kind
-
Added
minIndex
,maxIndex
andunzip
to thesequtils
module. -
Added
os.isRelativeTo
to tell whether a path is relative to another -
Added
resetOutputFormatters
tounittest
-
Added
expectIdent
to themacros
module. -
Added
os.isValidFilename
that returnstrue
iffilename
argument is valid for crossplatform use. -
Added a
with
macro for easy function chaining that's available everywhere, there is no need to concern your APIs with returning the first argument to enable "chaining", instead use the dedicated macrowith
that was designed for it. For example:
type
Foo = object
col, pos: string
proc setColor(f: var Foo; r, g, b: int) = f.col = $(r, g, b)
proc setPosition(f: var Foo; x, y: float) = f.pos = $(x, y)
var f: Foo
with(f, setColor(2, 3, 4), setPosition(0.0, 1.0))
echo f
- Added
times.isLeapDay
- Added a new module,
std / compilesettings
for querying the compiler about diverse configuration settings.
asyncdispatch.drain
now properly takes into accountselector.hasPendingOperations
and only returns once all pending async operations are guaranteed to have completed.asyncdispatch.drain
now consistently uses the passed timeout value for all iterations of the event loop, and not just the first iteration. This is more consistent with the other asyncdispatch apis, and allowsasyncdispatch.drain
to be more efficient.base64.encode
andbase64.decode
was made faster by about 50%.htmlgen
adds MathML support (ISO 40314).macros.eqIdent
is now invariant to export markers and backtick quotes.htmlgen.html
allowslang
on the<html>
tag and common valid attributes.macros.basename
andbasename=
got support forPragmaExpr
, so that an expression likeMyEnum {.pure.}
is handled correctly.httpclient.maxredirects
changed fromint
toNatural
, because negative values serve no purpose whatsoever.httpclient.newHttpClient
andhttpclient.newAsyncHttpClient
addedheaders
argument to set initial HTTP Headers, instead of a hardcoded emptynewHttpHeader()
.parseutils.parseUntil
has now a different behaviour if theuntil
parameter is empty. This was required for intuitive behaviour of the strscans module (see bug #13605).
-
An
align
pragma can now be used for variables and object fields, similar to thealignas
declaration modifier in C/C++. -
=sink
type bound operator is now optional. Compiler can now use combination of=destroy
andcopyMem
to move objects efficiently.
- Unsigned integer operators have been fixed to allow promotion of the first operand.
- Conversions to unsigned integers are unchecked at runtime, imitating earlier Nim versions. The documentation was improved to acknowledge this special case. See nim-lang/RFCs#175 for more details.
- Fix Nimpretty must not accept negative indentation argument because breaks file.
- JS target indent is all spaces, instead of mixed spaces and tabs, for generated JavaScript.
- The Nim compiler now supports the
--asm
command option for easier inspection of the produced assembler code. - The Nim compiler now supports a new pragma called
.localPassc
to pass specific compiler options to the C(++) backend for the C(++) file that was produced from the current Nim module. - The compiler now inferes "sink parameters". To disable this for a specific routine,
annotate it with
.nosinks
. To disable it for a section of code, use{.push sinkInference: off.}
...{.pop.}
. - The compiler now supports a new switch
--panics:on
that turns runtime errors likeIndexError
orOverflowError
into fatal errors that cannot be caught via Nim'stry
statement.--panics:on
can improve the runtime efficiency and code size of your program significantly. - The compiler now warns about inheriting directly from
system.Exception
as this is very bad style. You should inherit fromValueError
,IOError
,OSError
or from a different specific exception type that inherits fromCatchableError
and cannot be confused with aDefect
.
- The
FD
variant ofselector.unregister
forioselector_epoll
andioselector_select
now properly handle theEvent.User
select event type. joinPath
path normalization when/
is the first argument works correctly:assert "/" / "/a" == "/a"
. Fixed the edgecase:assert "" / "" == ""
.xmltree
now adds indentation consistently to child nodes for any number of children nodes.