mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-19 02:57:10 +00:00
5.1 KiB
5.1 KiB
1.2 - xxxx-xx-xx
Changes affecting backwards compatibility
Breaking changes in the standard library
base64.encodeno longer supportslineLenandnewLine. Usebase64.encodeMIMEinstead.os.splitPath()behavior synchronized withos.splitFile()to return "/" as the dir component of "/root_sub_dir" instead of the empty string.sequtils.zipnow returns a sequence of anonymous tuples i.e. those tuples now do not have fields named "a" and "b".strutils.formatFloatwithprecision = 0has 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
lchas been removed from sugar.nim. distinctBasehas been moved from sugar.nim to typetraits and now implemented as compiler type trait instead of macro.distinctBasein sugar module is now deprecated.
Breaking changes in the compiler
- Implicit conversions for
constbehave correctly now, meaning that code likeconst SOMECONST = 0.int; procThatTakesInt32(SOMECONST)will be illegal now. Simply writeconst SOMECONST = 0instead.
Library additions
macros.newLitnow works for ref object types.system.writeFilehas been overloaded to also supportopenarray[byte].- Added overloaded
strformat.fmtmacro 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.clearoverload that reuses the existing mode. - Added
sugar.outplacefor turning in-place algorithms likesortandshuffleinto operations that work on a copy of the data and return the mutated copy. As the existingsorteddoes. - Added
sugar.collectthat does comprehension for seq/set/table collections. - Added
sugar.capturefor capturing some local loop variables when creating a closure. This is an enhanced version ofclosureScope. - Added
typetraits.lenTupleto get number of elements of a tuple/type tuple, andtypetraits.getto get the ith element of a type tuple. - Added
typetraits.genericParamsto return a tuple of generic params from a generic instantiation - Added
os.normalizePathEndfor additional path sanitization. - Added
times.fromUnixFloat,toUnixFloat, subsecond resolution versions offromUnix,toUnixFloat. - Added
wrapnilsmodule 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. Eg:echo ?.n.typ.kind - Added
minIndexandmaxIndexto thesequtilsmodule - Added
os.isRelativeToto tell whether a path is relative to another - Added
resetOutputFormatterstounittest
Library changes
asyncdispatch.drainnow properly takes into accountselector.hasPendingOperationsand only returns once all pending async operations are guaranteed to have completed.asyncdispatch.drainnow 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.drainto be more efficient.base64.encodeandbase64.decodewas made faster by about 50%.htmlgenadds MathML support (ISO 40314).macros.eqIdentis now invariant to export markers and backtick quotes.htmlgen.htmlallowslangon the<html>tag and common valid attributes.macros.basenameandbasename=got support forPragmaExpr, so that an expression likeMyEnum {.pure.}is handled correctly.httpclient.maxredirectschanged frominttoNatural, because negative values serve no purpose whatsoever.httpclient.newHttpClientandhttpclient.newAsyncHttpClientaddedheadersargument to set initial HTTP Headers, instead of a hardcoded emptynewHttpHeader().
Language additions
-
An
alignpragma can now be used for variables and object fields, similar to thealignasdeclaration modifier in C/C++. -
=sinktype bound operator is now optional. Compiler can now use combination of=destroyandcopyMemto move objects efficiently.
Language changes
- 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 https://github.com/nim-lang/RFCs/issues/175 for more details.
Tool changes
Compiler changes
- JS target indent is all spaces, instead of mixed spaces and tabs, for generated JavaScript.
- The Nim compiler now supports the
--asmcommand option for easier inspection of the produced assembler code. - The Nim compiler now supports a new pragma called
.localPasscto pass specific compiler options to the C(++) backend for the C(++) file that was produced from the current Nim module.
Bugfixes
- The
FDvariant ofselector.unregisterforioselector_epollandioselector_selectnow properly handle theEvent.Userselect event type.