d79c897404
Changelog extracted from the unspecific changelog.md on the 1.2.6 tag. Unable to get a Changelog diff for 1.2.4 and 1.2.6. # v1.4.0 - yyyy-mm-dd ## Standard library additions and changes For `net` and `nativesockets`, an `inheritable` flag has been added to all `proc`s that create sockets, allowing the user to control whether the resulting socket is inheritable. This flag is provided to ease the writing of multi-process servers, where sockets inheritance is desired. For a transistion period, define `nimInheritHandles` to enable file handle inheritance by default. This flag does **not** affect the `selectors` module due to the differing semantics between operating systems. `system.setInheritable` and `nativesockets.setInheritable` is also introduced for setting file handle or socket inheritance. Not all platform have these `proc`s defined. - The file descriptors created for internal bookkeeping by `ioselector_kqueue` and `ioselector_epoll` will no longer be leaked to child processes. - `strutils.formatFloat` with `precision = 0` has been restored to the version 1 behaviour that produces a trailing dot, e.g. `formatFloat(3.14159, precision = 0)` is now `3.`, not `3`. - `critbits` adds `commonPrefixLen`. - `relativePath(rel, abs)` and `relativePath(abs, rel)` used to silently give wrong results (see #13222); instead they now use `getCurrentDir` to resolve those cases, and this can now throw in edge cases where `getCurrentDir` throws. `relativePath` also now works for js with `-d:nodejs`. - JavaScript and NimScript standard library changes: `streams.StringStream` is now supported in JavaScript, with the limitation that any buffer `pointer`s used must be castable to `ptr string`, any incompatible pointer type will not work. The `lexbase` and `streams` modules used to fail to compile on NimScript due to a bug, but this has been fixed. The following modules now compile on both JS and NimScript: `parsecsv`, `parsecfg`, `parsesql`, `xmlparser`, `htmlparser` and `ropes`. Additionally supported for JS is `cstrutils.startsWith` and `cstrutils.endsWith`, for NimScript: `json`, `parsejson`, `strtabs` and `unidecode`. - Added `streams.readStr` and `streams.peekStr` overloads to accept an existing string to modify, which avoids memory allocations, similar to `streams.readLine` (#13857). - Added high-level `asyncnet.sendTo` and `asyncnet.recvFrom`. UDP functionality. - `paramCount` & `paramStr` are now defined in os.nim instead of nimscript.nim for nimscript/nimble. - `dollars.$` now works for unsigned ints with `nim js` - Improvements to the `bitops` module, including bitslices, non-mutating versions of the original masking functions, `mask`/`masked`, and varargs support for `bitand`, `bitor`, and `bitxor`. - `sugar.=>` and `sugar.->` changes: Previously `(x, y: int)` was transformed into `(x: auto, y: int)`, it now becomes `(x: int, y: int)` in consistency with regular proc definitions (although you cannot use semicolons). Pragmas and using a name are now allowed on the lefthand side of `=>`. Here is an aggregate example of these changes: ```nim import sugar foo(x, y: int) {.noSideEffect.} => x + y # is transformed into proc foo(x: int, y: int): auto {.noSideEffect.} = x + y ``` - The fields of `times.DateTime` are now private, and are accessed with getters and deprecated setters. - The `times` module now handles the default value for `DateTime` more consistently. Most procs raise an assertion error when given an uninitialized `DateTime`, the exceptions are `==` and `$` (which returns `"Uninitialized DateTime"`). The proc `times.isInitialized` has been added which can be used to check if a `DateTime` has been initialized. - Fix a bug where calling `close` on io streams in osproc.startProcess was a noop and led to hangs if a process had both reads from stdin and writes (eg to stdout). - The callback that is passed to `system.onThreadDestruction` must now be `.raises: []`. - The callback that is assigned to `system.onUnhandledException` must now be `.gcsafe`. - `osproc.execCmdEx` now takes an optional `input` for stdin, `workingDir` and `env` parameters. - Added a `ssl_config` module containing lists of secure ciphers as recommended by [Mozilla OpSec](https://wiki.mozilla.org/Security/Server_Side_TLS) - `net.newContext` now defaults to the list of ciphers targeting ["Intermediate compatibility"](https://wiki.mozilla.org/Security/Server_Side_TLS#Intermediate_compatibility_.28recommended.29) per Mozilla's recommendation instead of `ALL`. This change should protect users from the use of weak and insecure ciphers while still provides adequate compatibility with the majority of the Internet. - A new module `std/jsonutils` with hookable `jsonTo,toJson,fromJson` operations for json serialization/deserialization of custom types was added. - A new proc `heapqueue.find[T](heap: HeapQueue[T], x: T): int` to get index of element ``x`` was added. - Added `rstgen.rstToLatex` convenience proc for `renderRstToOut` and `initRstGenerator` with `outLatex` output. - Added `os.normalizeExe`, e.g.: `koch` => `./koch`. - `macros.newLit` now preserves named vs unnamed tuples; use `-d:nimHasWorkaround14720` to keep old behavior. - Added `random.gauss`, that uses the ratio of uniforms method of sampling from a Gaussian distribution. - Added `typetraits.elementType` to get element type of an iterable. - `typetraits.$` changes: `$(int,)` is now `"(int,)"` instead of `"(int)"`; `$tuple[]` is now `"tuple[]"` instead of `"tuple"`; `$((int, float), int)` is now `"((int, float), int)"` instead of `"(tuple of (int, float), int)"` - Added `macros.extractDocCommentsAndRunnables` helper - `strformat.fmt` and `strformat.&` support `= specifier`. `fmt"{expr=}"` now expands to `fmt"expr={expr}"`. - deprecations: `os.existsDir` => `dirExists`, `os.existsFile` => `fileExists` - Added `jsre` module, [Regular Expressions for the JavaScript target.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions) - Made `maxLines` argument `Positive` in `logging.newRollingFileLogger`, because negative values will result in a new file being created for each logged line which doesn't make sense. - Changed `log` in `logging` to use proper log level on JavaScript target, e.g. `debug` uses `console.debug`, `info` uses `console.info`, `warn` uses `console.warn`, etc. - Tables, HashSets, SharedTables and deques don't require anymore that the passed initial size must be a power of two - this is done internally. Proc `rightSize` for Tables and HashSets is deprecated, as it is not needed anymore. `CountTable.inc` takes `val: int` again not `val: Positive`; I.e. it can "count down" again. - Removed deprecated symbols from `macros` module, deprecated as far back as `0.15`. ## Language changes - In newruntime it is now allowed to assign discriminator field without restrictions as long as case object doesn't have custom destructor. Discriminator value doesn't have to be a constant either. If you have custom destructor for case object and you do want to freely assign discriminator fields, it is recommended to refactor object into 2 objects like this: ```nim type MyObj = object case kind: bool of true: y: ptr UncheckedArray[float] of false: z: seq[int] proc `=destroy`(x: MyObj) = if x.kind and x.y != nil: deallocShared(x.y) x.y = nil ``` Refactor into: ```nim type MySubObj = object val: ptr UncheckedArray[float] MyObj = object case kind: bool of true: y: MySubObj of false: z: seq[int] proc `=destroy`(x: MySubObj) = if x.val != nil: deallocShared(x.val) x.val = nil ``` |
||
---|---|---|
.. | ||
a60 | ||
abcl | ||
adoptopenjdk11-bin | ||
algol68g | ||
asn1c | ||
awka | ||
baci | ||
boomerang | ||
brandybasic | ||
bwbasic | ||
caml-light | ||
camlp4 | ||
camlp5 | ||
cbmbasic | ||
ccsh | ||
cdl3 | ||
Cg-compiler | ||
chibi-scheme | ||
chicken | ||
chicken5 | ||
cim | ||
cint | ||
clang | ||
clang-tools-extra | ||
classpath | ||
classpath-gui | ||
clisp | ||
clojure | ||
compiler-rt | ||
coq | ||
coreclr | ||
cparser | ||
cu-prolog | ||
duktape | ||
eag | ||
ecl | ||
eieio | ||
elisp-manual | ||
elixir | ||
elk | ||
embryo | ||
erlang | ||
erlang-doc | ||
erlang-luerl | ||
erlang-man | ||
f2c | ||
ficl | ||
focal | ||
fort77 | ||
forth-retro | ||
g95 | ||
gambc | ||
gauche | ||
gawk | ||
gcc-aux | ||
gcc2 | ||
gcc3 | ||
gcc3-c | ||
gcc3-c++ | ||
gcc3-f77 | ||
gcc3-objc | ||
gcc5 | ||
gcc5-aux | ||
gcc5-libs | ||
gcc6 | ||
gcc6-aux | ||
gcc6-libs | ||
gcc7 | ||
gcc7-libs | ||
gcc8 | ||
gcc8-libs | ||
gcc9 | ||
gcc10 | ||
gcc34 | ||
gcc44 | ||
gcc48 | ||
gcc48-libs | ||
gcc49 | ||
gcc49-libs | ||
gforth | ||
ghc | ||
ghc-bootstrap | ||
ghc7 | ||
ghc80 | ||
ghc84 | ||
ghc88 | ||
gjs | ||
gnat_util | ||
gnucobol | ||
go | ||
go-bin | ||
go-hcl | ||
go14 | ||
go19 | ||
go110 | ||
go113 | ||
go114 | ||
gpc | ||
gprolog | ||
guile | ||
guile20 | ||
guile22 | ||
gwydion-dylan | ||
heirloom-awk | ||
hs-hslua | ||
hugs | ||
icon | ||
idris | ||
inform | ||
intercal | ||
ja-gawk | ||
jamvm | ||
janet | ||
japhar | ||
jasmin | ||
java-lang-spec | ||
java-vm-spec | ||
jikes | ||
jimtcl | ||
joos | ||
js | ||
kaffe | ||
kaffe-x11 | ||
kali | ||
konoha | ||
ksi | ||
libBlocksRuntime | ||
libcxx | ||
libcxxabi | ||
libduktape | ||
libLLVM | ||
libLLVM4 | ||
libLLVM34 | ||
libobjc2 | ||
librep | ||
libunwind | ||
likepython | ||
llvm | ||
lua | ||
lua-moonscript | ||
lua51 | ||
lua52 | ||
lua53 | ||
lua54 | ||
LuaJIT2 | ||
lush | ||
maude | ||
mawk | ||
mercury | ||
micropython | ||
minischeme | ||
mit-scheme-bin | ||
mono | ||
mono-basic | ||
mono6 | ||
moscow_ml | ||
mozjs60 | ||
mozjs68 | ||
mpd | ||
nawk | ||
neko | ||
newlisp | ||
newsqueak | ||
nhc98 | ||
nim | ||
nodejs | ||
nodejs8 | ||
nodejs10 | ||
nodejs12 | ||
npm | ||
nqp | ||
nuitka | ||
objc | ||
ocaml | ||
oo2c | ||
open-cobol-ce | ||
opencobol | ||
openjdk-bin | ||
openjdk8 | ||
openjdk11 | ||
opensource-cobol | ||
oracle-jdk8 | ||
oracle-jre8 | ||
ossp-js | ||
owl-lisp | ||
p2c | ||
p5-Switch | ||
parrot | ||
pc-lisp | ||
pcc | ||
pcc-current | ||
pear | ||
perl5 | ||
pfe | ||
pforth | ||
php | ||
php56 | ||
php72 | ||
php73 | ||
php74 | ||
picoc | ||
pict | ||
polyml | ||
py-asttokens | ||
py-basicproperty | ||
py-byterun | ||
py-cmake-language-server | ||
py-cxfreeze | ||
py-execjs | ||
py-hy | ||
py-inflect | ||
py-js2py | ||
py-jsparser | ||
py-mypy | ||
py-mypy_extensions | ||
py-parso | ||
py-paver | ||
py-py3c | ||
py-pygls | ||
py-pyrex | ||
py-python-language-server | ||
py-python-lua | ||
py-pythonz | ||
py-six | ||
py-spark-parser | ||
py-uncompyle6 | ||
py27-html-docs | ||
py36-html-docs | ||
py37-html-docs | ||
py38-html-docs | ||
python | ||
python27 | ||
python36 | ||
python37 | ||
python38 | ||
qore | ||
quickjs | ||
R-sourcetools | ||
racket | ||
racket-textual | ||
rakudo | ||
rakudo-star | ||
rcfunge | ||
rexx-imc | ||
rexx-regina | ||
ruby | ||
ruby-coffee-script | ||
ruby-coffee-script-source | ||
ruby-cucumber-gherkin | ||
ruby-doc-stdlib | ||
ruby-execjs | ||
ruby-rkelly-remix | ||
ruby25 | ||
ruby25-base | ||
ruby26 | ||
ruby26-base | ||
ruby27 | ||
ruby27-base | ||
runawk | ||
rust | ||
rust-bin | ||
sablevm | ||
sablevm-classpath | ||
sablevm-classpath-gui | ||
sather | ||
sbcl | ||
scala | ||
scala-sbt | ||
scheme48 | ||
scm | ||
see | ||
sigscheme | ||
siod | ||
smalltalk | ||
smlnj | ||
smlnj11072 | ||
snobol | ||
spidermonkey | ||
spidermonkey52 | ||
spidermonkey185 | ||
spl | ||
squeak | ||
squeak-vm | ||
sr | ||
sr-examples | ||
stalin | ||
STk | ||
sun-jdk7 | ||
sun-jre7 | ||
swi-prolog | ||
swi-prolog-jpl | ||
swi-prolog-lite | ||
swi-prolog-packages | ||
tcl | ||
tcl-expect | ||
tcl-otcl | ||
tcl85 | ||
tcltutor | ||
tinyscheme | ||
ucblogo | ||
umb-scheme | ||
utilisp | ||
vala | ||
vscm | ||
vslisp | ||
wsbasic | ||
yabasic | ||
yap | ||
zenlisp | ||
zig | ||
Makefile |