From 5a3722410257598d7b07c7b6c719a225a53dbe37 Mon Sep 17 00:00:00 2001 From: Araq Date: Fri, 7 Jun 2019 10:49:56 +0200 Subject: [PATCH] develop version is 0.20.99 [feature] --- changelog.md | 263 +------------------------------------------------ lib/system.nim | 2 +- 2 files changed, 2 insertions(+), 263 deletions(-) diff --git a/changelog.md b/changelog.md index 9ddfd36dcc..87032fc0e3 100644 --- a/changelog.md +++ b/changelog.md @@ -1,294 +1,33 @@ -## v0.20.0 - 2019-06-06 +## v0.20.2 - XXXX-XX-XX ### Changes affecting backwards compatibility -- `shr` is now sign preserving. Use `-d:nimOldShiftRight` to enable - the old behavior globally. - -- The ``isLower``, ``isUpper`` family of procs in strutils/unicode - operating on **strings** have been - deprecated since it was unclear what these do. Note that the much more - useful procs that operate on ``char`` or ``Rune`` are not affected. - -- `strutils.editDistance` has been deprecated, - use `editdistance.editDistance` or `editdistance.editDistanceAscii` - instead. - -- The OpenMP parallel iterator \``||`\` now supports any `#pragma omp directive` - and not just `#pragma omp parallel for`. See - [OpenMP documentation](https://www.openmp.org/wp-content/uploads/OpenMP-4.5-1115-CPP-web.pdf). - - The default annotation is `parallel for`, if you used OpenMP without annotation - the change is transparent, if you used annotations you will have to prefix - your previous annotations with `parallel for`. - - Furthermore, an overload with positive stepping is available. - -- The `unchecked` pragma was removed, instead use `system.UncheckedArray`. - -- The undocumented ``#? strongSpaces`` parsing mode has been removed. - -- The `not` operator is now always a unary operator, this means that code like - ``assert not isFalse(3)`` compiles. - -- `getImpl` on a `var` or `let` symbol will now return the full `IdentDefs` - tree from the symbol declaration instead of just the initializer portion. - -- Methods are now ordinary "single" methods, only the first parameter is - used to select the variant at runtime. For backwards compatibility - use the new `--multimethods:on` switch. - -- Generic methods are now deprecated; they never worked well. - -- Compile time checks for integer and float conversions are now stricter. - For example, `const x = uint32(-1)` now gives a compile time error instead - of being equivalent to `const x = 0xFFFFFFFF'u32`. - -- Using `typed` as the result type in templates/macros now means - "expression with a type". The old meaning of `typed` is preserved - as `void` or no result type at all. - -- A bug allowed `macro foo(): int = 123` to compile even though a - macro has to return a `NimNode`. This has been fixed. - -- With the exception of `uint` and `uint64`, conversion to unsigned types - are now range checked during runtime. - -- Macro arguments of type `typedesc` are now passed to the macro as - `NimNode` like every other type except `static`. Use `typed` for a - behavior that is identical in new and old - Nim. See the RFC [Pass typedesc as NimNode to macros](https://github.com/nim-lang/RFCs/issues/148) - for more details. - #### Breaking changes in the standard library -- `osproc.execProcess` now also takes a `workingDir` parameter. - -- `std/sha1.secureHash` now accepts `openArray[char]`, not `string`. (Former - successful matches should keep working, though former failures will not.) - -- `options.UnpackError` is no longer a ref type and inherits from `system.Defect` - instead of `system.ValueError`. - -- `system.ValueError` now inherits from `system.CatchableError` instead of `system.Defect`. - -- The procs `parseutils.parseBiggestInt`, `parseutils.parseInt`, - `parseutils.parseBiggestUInt` and `parseutils.parseUInt` now raise a - `ValueError` when the parsed integer is outside of the valid range. - Previously they sometimes raised an `OverflowError` and sometimes they - returned `0`. - -- The procs `parseutils.parseBin`, `parseutils.parseOct` and `parseutils.parseHex` - were not clearing their `var` parameter `number` and used to push its value to - the left when storing the parsed string into it. Now they always set the value - of the parameter to `0` before storing the result of the parsing, unless the - string to parse is not valid (then the value of `number` is not changed). - -- `streams.StreamObject` now restricts its fields to only raise `system.Defect`, - `system.IOError` and `system.OSError`. - This change only affects custom stream implementations. - -- nre's `RegexMatch.{captureBounds,captures}[]` no longer return `Option` or - `nil`/`""`, respectively. Use the newly added `n in p.captures` method to - check if a group is captured, otherwise you'll receive an exception. - -- nre's `RegexMatch.{captureBounds,captures}.toTable` no longer accept a - default parameter. Instead uncaptured entries are left empty. Use - `Table.getOrDefault()` if you need defaults. - -- nre's `RegexMatch.captures.{items,toSeq}` now returns an `Option[string]` - instead of a `string`. With the removal of `nil` strings, this is the only - way to indicate a missing match. Inside your loops, instead - of `capture == ""` or `capture == nil`, use `capture.isSome` to check if a capture is - present, and `capture.get` to get its value. - -- nre's `replace()` no longer throws `ValueError` when the replacement string - has missing captures. It instead throws `KeyError` for named captures, and - `IndexError` for unnamed captures. This is consistent with - `RegexMatch.{captureBounds,captures}[]`. - -- `splitFile` now correctly handles edge cases, see #10047. - -- `isNil` is no longer false for undefined in the JavaScript backend: - now it's true for both nil and undefined. - Use `isNull` or `isUndefined` if you need exact equality: - `isNil` is consistent with `===`, `isNull` and `isUndefined` with `==`. - -- several deprecated modules were removed: `ssl`, `matchers`, `httpserver`, - `unsigned`, `actors`, `parseurl` - -- two poorly documented and not used modules (`subexes`, `scgi`) were moved to - graveyard (they are available as Nimble packages) - -- procs `string.add(int)` and `string.add(float)` which implicitly convert - ints and floats to string have been deprecated. - Use `string.addInt(int)` and `string.addFloat(float)` instead. - -- ``case object`` branch transitions via ``system.reset`` are deprecated. - Compile your code with ``-d:nimOldCaseObjects`` for a transition period. - -- base64 module: The default parameter `newLine` for the `encode` procs - was changed from `"\13\10"` to the empty string `""`. - #### Breaking changes in the compiler -- The compiler now implements the "generic symbol prepass" for `when` statements - in generics, see bug #8603. This means that code like this does not compile - anymore: - -```nim -proc enumToString*(enums: openArray[enum]): string = - # typo: 'e' instead 'enums' - when e.low.ord >= 0 and e.high.ord < 256: - result = newString(enums.len) - else: - result = newString(enums.len * 2) -``` - -- ``discard x`` is now illegal when `x` is a function symbol. - -- Implicit imports via ``--import: module`` in a config file are now restricted - to the main package. - ### Library additions -- There is a new stdlib module `std/editdistance` as a replacement for the - deprecated `strutils.editDistance`. - -- There is a new stdlib module `std/wordwrap` as a replacement for the - deprecated `strutils.wordwrap`. - -- Added `split`, `splitWhitespace`, `size`, `alignLeft`, `align`, - `strip`, `repeat` procs and iterators to `unicode.nim`. - -- Added `or` for `NimNode` in `macros`. - -- Added `system.typeof` for more control over how `type` expressions - can be deduced. - -- Added `macros.isInstantiationOf` for checking if the proc symbol - is instantiation of generic proc symbol. - -- Added the parameter ``isSorted`` for the ``sequtils.deduplicate`` proc. - -- There is a new stdlib module `std/diff` to compute the famous "diff" - of two texts by line. - -- Added `os.relativePath`. - -- Added `parseopt.remainingArgs`. - -- Added `os.getCurrentCompilerExe` (implemented as `getAppFilename` at CT), - can be used to retrieve the currently executing compiler. - -- Added `xmltree.toXmlAttributes`. - -- Added ``std/sums`` module for fast summation functions. - -- Added `Rusage`, `getrusage`, `wait4` to the posix interface. - -- Added the `posix_utils` module. - -- Added `system.default`. - -- Added `sequtils.items` for closure iterators, allows closure iterators - to be used by the `mapIt`, `filterIt`, `allIt`, `anyIt`, etc. - ### Library changes -- The string output of `macros.lispRepr` proc has been tweaked - slightly. The `dumpLisp` macro in this module now outputs an - indented proper Lisp, devoid of commas. - -- Added `macros.signatureHash` that returns a stable identifier - derived from the signature of a symbol. - -- In `strutils` empty strings now no longer matched as substrings - anymore. - -- The `Complex` type is now a generic object and not a tuple anymore. - -- The `ospaths` module is now deprecated, use `os` instead. Note that - `os` is available in a NimScript environment but unsupported - operations produce a compile-time error. - -- The `parseopt` module now supports a new flag `allowWhitespaceAfterColon` - (default value: true) that can be set to `false` for better Posix - interoperability. (Bug #9619.) - -- `os.joinPath` and `os.normalizePath` handle edge cases like ``"a/b/../../.."`` - differently. - -- `securehash` was moved to `lib/deprecated`. - -- The switch ``-d:useWinAnsi`` is not supported anymore. - -- In `times` module, procs `format` and `parse` accept a new optional - `DateTimeLocale` argument for formatting/parsing dates in other languages. ### Language additions -- Vm support for float32<->int32 and float64<->int64 casts was added. -- There is a new pragma block `noSideEffect` that works like - the `gcsafe` pragma block. -- added `os.getCurrentProcessId`. -- User defined pragmas are now allowed in the pragma blocks. -- Pragma blocks are no longer eliminated from the typed AST tree to preserve - pragmas for further analysis by macros. -- Custom pragmas are now supported for `var` and `let` symbols. -- Tuple unpacking is now supported for constants and for loop variables. -- Case object branches can be initialized with a runtime discriminator if - possible discriminator values are constrained within a case statement. - ### Language changes -- The standard extension for SCF (source code filters) files was changed from - ``.tmpl`` to ``.nimf``, - it's more recognizable and allows tools like Github to recognize it as Nim, - see [#9647](https://github.com/nim-lang/Nim/issues/9647). - The previous extension will continue to work. - -- Pragma syntax is now consistent. Previous syntax where type pragmas did not - follow the type name is now deprecated. Also pragma before generic parameter - list is deprecated to be consistent with how pragmas are used with a proc. See - [#8514](https://github.com/nim-lang/Nim/issues/8514) and - [#1872](https://github.com/nim-lang/Nim/issues/1872) for further details. - -- Hash sets and tables are initialized by default. The explicit `initHashSet`, - `initTable`, etc. are not needed anymore. - ### Tool changes -- `jsondoc` now includes a `moduleDescription` field with the module - description. `jsondoc0` shows comments as its own objects as shown in the - documentation. -- `nimpretty`: --backup now defaults to `off` instead of `on` and the flag was - undocumented; use `git` instead of relying on backup files. -- `koch` now defaults to build the latest *stable* Nimble version unless you - explicitly ask for the latest master version via `--latest`. ### Compiler changes -- The deprecated `fmod` proc is now unavailable on the VM. -- A new `--outdir` option was added. -- The compiled JavaScript file for the project produced by executing `nim js` - will no longer be placed in the nimcache directory. -- The `--hotCodeReloading` has been implemented for the native targets. - The compiler also provides a new more flexible API for handling the - hot code reloading events in the code. -- The compiler now supports a ``--expandMacro:macroNameHere`` switch - for easy introspection into what a macro expands into. -- The `-d:release` switch now does not disable runtime checks anymore. - For a release build that also disables runtime checks - use `-d:release -d:danger` or simply `-d:danger`. ### Bugfixes diff --git a/lib/system.nim b/lib/system.nim index 4b15a18828..fb2e504a09 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -3454,7 +3454,7 @@ const NimMinor* {.intdefine.}: int = 20 ## is the minor number of Nim's version. - NimPatch* {.intdefine.}: int = 0 + NimPatch* {.intdefine.}: int = 99 ## is the patch number of Nim's version. NimVersion*: string = $NimMajor & "." & $NimMinor & "." & $NimPatch