diff options
Diffstat (limited to 'web/news/e017_version_0_12_0.rst')
-rw-r--r-- | web/news/e017_version_0_12_0.rst | 403 |
1 files changed, 0 insertions, 403 deletions
diff --git a/web/news/e017_version_0_12_0.rst b/web/news/e017_version_0_12_0.rst deleted file mode 100644 index 63088f9e2..000000000 --- a/web/news/e017_version_0_12_0.rst +++ /dev/null @@ -1,403 +0,0 @@ -2015-10-27 Version 0.12.0 released -================================== - -.. container:: metadata - - Posted by Dominik Picheta on 27/10/2015 - -The Nim community of developers is proud to announce the new version of the -Nim compiler. This has been a long time coming as the last release has been -made over 5 months ago! - -This release includes some changes which affect backwards compatibility, -one major change is that now the hash table ``[]`` operators now raise a -``KeyError`` exception when the key does not exist. - -Some of the more exciting new features include: the ability to unpack tuples -in any assignment context, the introduction of `NimScript <docs/nims.html>`_, -and improvements to the type inference of lambdas. - -There are of course many many many bug fixes included with this release. -We are getting closer and closer to a 1.0 release and are hoping that only -a few 0.x releases will be necessary before we are happy to release version 1.0. - -As always you can download the latest version of Nim from the -`download <download.html>`_ page. - -For a more detailed list of changes look below. Some of the upcoming breaking -changes are also documented in this forum -`thread <http://forum.nim-lang.org/t/1708>`_. - -Changes affecting backwards compatibility ------------------------------------------ -- The regular expression modules, ``re`` and ``nre`` now depend on version - 8.36 of PCRE. If you have an older version you may see a message similar - to ``could not import: pcre_free_study`` output when you start your - program. See `this issue <https://github.com/docopt/docopt.nim/issues/13>`_ - for more information. -- ``tables.[]``, ``strtabs.[]``, ``critbits.[]`` **now raise** - the ``KeyError`` **exception when the key does not exist**! Use the - new ``getOrDefault`` instead to get the old behaviour. Compile all your - code with ``-d:nimTableGet`` to get a listing of where your code - uses ``[]``! -- The ``rawsockets`` module has been renamed to ``nativesockets`` to avoid - confusion with TCP/IP raw sockets, so ``newNativeSocket`` should be used - instead of ``newRawSocket``. -- The ``miliseconds`` property of ``times.TimeInterval`` is now ``milliseconds``. - Code accessing that property is deprecated and code using ``miliseconds`` - during object initialization or as a named parameter of ``initInterval()`` - will need to be updated. -- ``std.logging`` functions no longer do formatting and semantically treat - their arguments just like ``echo`` does. Affected functions: ``log``, - ``debug``, ``info``, ``warn``, ``error``, ``fatal``. Custom subtypes of - ``Logger`` also need to be adjusted accordingly. -- Floating point numbers can now look like ``2d`` (float64) - and ``2f`` (float32) which means imports like ``import scene/2d/sprite`` - do not work anymore. Instead quotes have to be - used: ``import "scene/2d/sprite"``. The former code never was valid Nim. -- The Windows API wrapper (``windows.nim``) is now not part of the official - distribution anymore. Instead use the ``oldwinapi`` Nimble package. -- There is now a clear distinction between ``--os:standalone`` - and ``--gc:none``. So if you use ``--os:standalone`` ensure you also use - ``--gc:none``. ``--os:standalone`` without ``--gc:none`` is now a version - that doesn't depend on any OS but includes the GC. However this version - is currently untested! -- All procedures which construct a ``Socket``/``AsyncSocket`` now need to - specify the socket domain, type and protocol. The param name - ``typ: SockType`` (in ``newSocket``/``newAsyncSocket`` procs) was also - renamed to ``sockType``. The param ``af`` in the ``connect`` procs was - removed. This affects ``asyncnet``, ``asyncdispatch``, ``net``, and - ``rawsockets``. -- ``varargs[typed]`` and ``varargs[untyped]`` have been refined and now work - as expected. However ``varargs[untyped]`` is not an alias anymore for - ``varargs[expr]``. So if your code breaks for ``varargs[untyped]``, use - ``varargs[expr]`` instead. The same applies to ``varargs[typed]`` vs - ``varargs[stmt]``. -- ``sequtils.delete`` doesn't take confusing default arguments anymore. -- ``system.free`` was an error-prone alias to ``system.dealloc`` and has - been removed. -- ``macros.high`` never worked and the manual says ``high`` cannot be - overloaded, so we removed it with no deprecation cycle. -- To use the ``parallel`` statement you now have to - use the ``--experimental`` mode. -- Toplevel procs of calling convention ``closure`` never worked reliably - and are now deprecated and will be removed from the language. Instead you - have to insert type conversions - like ``(proc (a, b: int) {.closure.})(myToplevelProc)`` if necessary. -- The modules ``libffi``, ``sdl``, ``windows``, ``zipfiles``, ``libzip``, - ``zlib``, ``zzip``, ``dialogs``, ``expat``, ``graphics``, ``libcurl``, - ``sphinx`` have been moved out of the stdlib and are Nimble packages now. -- The constant fights between 32 and 64 bit DLLs on Windows have been put to - an end: The standard distribution now ships with 32 and 64 bit versions - of all the DLLs the standard library needs. This means that the following - DLLs are now split into 32 and 64 versions: - - * ``pcre.dll``: Split into ``pcre32.dll`` and ``pcre64.dll``. - * ``pdcurses.dll``: Split into ``pdcurses32.dll`` and ``pdcurses64.dll``. - * ``sqlite3.dll``: Split into ``sqlite3_32.dll`` and ``sqlite3_64.dll``. - * ``ssleay32.dll``: Split into ``ssleay32.dll`` and ``ssleay64.dll``. - * ``libeay32.dll``: Split into ``libeay32.dll`` and ``libeay64.dll``. - - Compile with ``-d:nimOldDLLs`` to make the stdlib use the old DLL names. -- Nim VM now treats objects as ``nkObjConstr`` nodes, and not ``nkPar`` nodes - as it was previously. Macros that generate ``nkPar`` nodes when object is - expected are likely to break. Macros that expect ``nkPar`` nodes to which - objects are passed are likely to break as well. -- Base methods now need to be annotated with the ``base`` pragma. This makes - multi methods less error-prone to use with the effect system. -- Nim's parser directive ``#!`` is now ``#?`` in order to produce no conflicts - with Unix's ``#!``. -- An implicit return type for an iterator is now deprecated. Use ``auto`` if - you want more type inference. -- The type ``auto`` is now a "multi-bind" metatype, so the following compiles: - - .. code-block:: nim - proc f(x, y: auto): auto = - result = $x & y - - echo f(0, "abc") -- The ``ftpclient`` module is now deprecated in favour of the - ``asyncftpclient`` module. -- In sequtils.nim renamed ``repeat`` function to ``cycle`` (concatenating - a sequence by itself the given times), and also introduced ``repeat``, - which repeats an element the given times. -- The function ``map`` is moved to sequtils.nim. The inplace ``map`` version - is renamed to ``apply``. -- The template ``mapIt`` now doesn't require the result's type parameter. - Also the inplace ``mapIt`` is renamed to ``apply``. -- The compiler is now stricter with what is allowed as a case object - discriminator. The following code used to compile but was not supported - completely and so now fails: - -.. code-block:: nim - type - DataType* {.pure.} = enum - Char = 1, - Int8 = 2, - Int16 = 3, - Int32 = 4, - Int64 = 5, - Float32 = 6, - Float64 = 7 - - DataSeq* = object - case kind* : DataType - of DataType.Char: charSeq* : seq[char] - of DataType.Int8: int8Seq* : seq[int8] - of DataType.Int16: int16Seq* : seq[int16] - of DataType.Int32: int32Seq* : seq[int32] - of DataType.Int64: int64Seq* : seq[int64] - of DataType.Float32: float32Seq* : seq[float32] - of DataType.Float64: float64Seq* : seq[float64] - - length* : int - - - -Library Additions ------------------ - -- The nre module has been added, providing a better interface to PCRE than re. -- The ``expandSymlink`` proc has been added to the ``os`` module. -- The ``tailDir`` proc has been added to the ``os`` module. -- Define ``nimPinToCpu`` to make the ``threadpool`` use explicit thread - affinities. This can speed up or slow down the thread pool; it's up to you - to benchmark it. -- ``strutils.formatFloat`` and ``formatBiggestFloat`` do not depend on the C - locale anymore and now take an optional ``decimalSep = '.'`` parameter. -- Added ``unicode.lastRune``, ``unicode.graphemeLen``. - - -Compiler Additions ------------------- - -- The compiler now supports a new configuration system based on - `NimScript <docs/nims.html>`_. -- The compiler finally considers symbol binding rules in templates and - generics for overloaded ``[]``, ``[]=``, ``{}``, ``{}=`` operators - (issue `#2599 <https://github.com/nim-lang/Nim/issues/2599>`_). -- The compiler now supports a `bitsize pragma <docs/manual.html#pragmas-bitsize-pragma>`_ - for constructing bitfields. -- Added a new ``--reportConceptFailures`` switch for better debugging of - concept related type mismatches. This can also be used to debug - ``system.compiles`` failures. - - -Language Additions ------------------- - -- ``system.unsafeAddr`` can be used to access the address of a ``let`` - variable or parameter for C interoperability. Since technically this - makes parameters and ``let`` variables mutable, it is considered even more - unsafe than the ordinary ``addr`` builtin. -- Added ``macros.getImpl`` that can be used to access the implementation of - a routine or a constant. This allows for example for user-defined inlining - of function calls. -- Tuple unpacking finally works in a non-var/let context: ``(x, y) = f()`` - is allowed. Note that this doesn't declare ``x`` and ``y`` variables, for - this ``let (x, y) = f()`` still needs to be used. -- ``when nimvm`` can now be used for compiletime versions of some code - sections. Click `here <docs/manual.html#when-nimvm-statement>`_ for details. -- Usage of the type ``NimNode`` in a proc now implicitly annotates the proc - with ``.compileTime``. This means generics work much better for ``NimNode``. - - -Bugfixes --------- -- Fixed "Compiler internal error on iterator it(T: typedesc[Base]) called with it(Child), where Child = object of Base" - (`#2662 <https://github.com/Araq/Nim/issues/2662>`_) -- Fixed "repr() misses base object field in 2nd level derived object" - (`#2749 <https://github.com/Araq/Nim/issues/2749>`_) -- Fixed "nimsuggest doesn't work more than once on the non-main file" - (`#2694 <https://github.com/Araq/Nim/issues/2694>`_) -- Fixed "JS Codegen. Passing arguments by var in certain cases leads to invalid JS." - (`#2798 <https://github.com/Araq/Nim/issues/2798>`_) -- Fixed ""check" proc in unittest.nim prevents the propagation of changes to var parameters." - (`#964 <https://github.com/Araq/Nim/issues/964>`_) -- Fixed "Excessive letters in integer literals are not an error" - (`#2523 <https://github.com/Araq/Nim/issues/2523>`_) -- Fixed "Unicode dashes as "lisp'ish" alternative to hump and snake notation" - (`#2811 <https://github.com/Araq/Nim/issues/2811>`_) -- Fixed "Bad error message when trying to construct an object incorrectly" - (`#2584 <https://github.com/Araq/Nim/issues/2584>`_) -- Fixed "Determination of GC safety of globals is broken " - (`#2854 <https://github.com/Araq/Nim/issues/2854>`_) -- Fixed "v2 gc crashes compiler" - (`#2687 <https://github.com/Araq/Nim/issues/2687>`_) -- Fixed "Compile error using object in const array" - (`#2774 <https://github.com/Araq/Nim/issues/2774>`_) -- Fixed "httpclient async requests with method httpPOST isn't sending Content-Length header" - (`#2884 <https://github.com/Araq/Nim/issues/2884>`_) -- Fixed "Streams module not working with JS backend" - (`#2148 <https://github.com/Araq/Nim/issues/2148>`_) -- Fixed "Sign of certain short constants is wrong" - (`#1179 <https://github.com/Araq/Nim/issues/1179>`_) -- Fixed "Symlinks to directories reported as symlinks to files" - (`#1985 <https://github.com/Araq/Nim/issues/1985>`_) -- Fixed "64-bit literals broken on x86" - (`#2909 <https://github.com/Araq/Nim/issues/2909>`_) -- Fixed "import broken for certain names" - (`#2904 <https://github.com/Araq/Nim/issues/2904>`_) -- Fixed "Invalid UTF-8 strings in JavaScript" - (`#2917 <https://github.com/Araq/Nim/issues/2917>`_) -- Fixed "[JS][Codegen] Initialising object doesn't create unmentioned fields." - - (`#2617 <https://github.com/Araq/Nim/issues/2617>`_) -- Fixed "Table returned from proc computed at compile time is missing keys:" - (`#2297 <https://github.com/Araq/Nim/issues/2297>`_) -- Fixed "Clarify copyright status for some files" - (`#2949 <https://github.com/Araq/Nim/issues/2949>`_) -- Fixed "math.nim: trigonometry: radians to degrees conversion" - (`#2881 <https://github.com/Araq/Nim/issues/2881>`_) -- Fixed "xoring unsigned integers yields RangeError in certain conditions" - (`#2979 <https://github.com/Araq/Nim/issues/2979>`_) -- Fixed "Directly checking equality between procs" - (`#2985 <https://github.com/Araq/Nim/issues/2985>`_) -- Fixed "Compiler crashed, but there have to be meaningful error message" - (`#2974 <https://github.com/Araq/Nim/issues/2974>`_) -- Fixed "repr is broken" - (`#2992 <https://github.com/Araq/Nim/issues/2992>`_) -- Fixed "Ipv6 devel - add IPv6 support for asyncsockets, make AF_INET6 a default" - (`#2976 <https://github.com/Araq/Nim/issues/2976>`_) -- Fixed "Compilation broken on windows" - (`#2996 <https://github.com/Araq/Nim/issues/2996>`_) -- Fixed "'u64 literal conversion compiler error" - (`#2731 <https://github.com/Araq/Nim/issues/2731>`_) -- Fixed "Importing 'impure' libraries while using threads causes segfaults" - (`#2672 <https://github.com/Araq/Nim/issues/2672>`_) -- Fixed "Uncatched exception in async procedure on raise statement" - (`#3014 <https://github.com/Araq/Nim/issues/3014>`_) -- Fixed "nim doc2 fails in Mac OS X due to system.nim (possibly related to #1898)" - (`#3005 <https://github.com/Araq/Nim/issues/3005>`_) -- Fixed "IndexError when rebuilding Nim on iteration 2" - (`#3018 <https://github.com/Araq/Nim/issues/3018>`_) -- Fixed "Assigning large const set to variable looses some information" - (`#2880 <https://github.com/Araq/Nim/issues/2880>`_) -- Fixed "Inconsistent generics behavior" - (`#3022 <https://github.com/Araq/Nim/issues/3022>`_) -- Fixed "Compiler breaks on float64 division" - (`#3028 <https://github.com/Araq/Nim/issues/3028>`_) -- Fixed "Confusing error message comparing string to nil " - (`#2935 <https://github.com/Araq/Nim/issues/2935>`_) -- Fixed "convert 64bit number to float on 32bit" - (`#1463 <https://github.com/Araq/Nim/issues/1463>`_) -- Fixed "Type redefinition and construction will break nim check" - (`#3032 <https://github.com/Araq/Nim/issues/3032>`_) -- Fixed "XmlParser fails on very large XML files without new lines" - (`#2429 <https://github.com/Araq/Nim/issues/2429>`_) -- Fixed "Error parsing arguments with whitespaces" - (`#2874 <https://github.com/Araq/Nim/issues/2874>`_) -- Fixed "Crash when missing one arg and used a named arg" - (`#2993 <https://github.com/Araq/Nim/issues/2993>`_) -- Fixed "Wrong number of arguments in assert will break nim check" - (`#3044 <https://github.com/Araq/Nim/issues/3044>`_) -- Fixed "Wrong const definition will break nim check" - (`#3041 <https://github.com/Araq/Nim/issues/3041>`_) -- Fixed "Wrong set declaration will break nim check" - (`#3040 <https://github.com/Araq/Nim/issues/3040>`_) -- Fixed "Compiler segfault (type section)" - (`#2540 <https://github.com/Araq/Nim/issues/2540>`_) -- Fixed "Segmentation fault when compiling this code" - (`#3038 <https://github.com/Araq/Nim/issues/3038>`_) -- Fixed "Kill nim i" - (`#2633 <https://github.com/Araq/Nim/issues/2633>`_) -- Fixed "Nim check will break on wrong array declaration" - (`#3048 <https://github.com/Araq/Nim/issues/3048>`_) -- Fixed "boolVal seems to be broken" - (`#3046 <https://github.com/Araq/Nim/issues/3046>`_) -- Fixed "Nim check crashes on wrong set/array declaration inside ref object" - (`#3062 <https://github.com/Araq/Nim/issues/3062>`_) -- Fixed "Nim check crashes on incorrect generic arg definition" - (`#3051 <https://github.com/Araq/Nim/issues/3051>`_) -- Fixed "Nim check crashes on iterating nonexistent var" - (`#3053 <https://github.com/Araq/Nim/issues/3053>`_) -- Fixed "Nim check crashes on wrong param set declaration + iteration" - (`#3054 <https://github.com/Araq/Nim/issues/3054>`_) -- Fixed "Wrong sharing of static_t instantations" - (`#3112 <https://github.com/Araq/Nim/issues/3112>`_) -- Fixed "Automatically generated proc conflicts with user-defined proc when .exportc.'ed" - (`#3134 <https://github.com/Araq/Nim/issues/3134>`_) -- Fixed "getTypeInfo call crashes nim" - (`#3099 <https://github.com/Araq/Nim/issues/3099>`_) -- Fixed "Array ptr dereference" - (`#2963 <https://github.com/Araq/Nim/issues/2963>`_) -- Fixed "Internal error when `repr`-ing a type directly" - (`#3079 <https://github.com/Araq/Nim/issues/3079>`_) -- Fixed "unknown type name 'TNimType' after importing typeinfo module" - (`#2841 <https://github.com/Araq/Nim/issues/2841>`_) -- Fixed "Can export a template twice and from inside a block" - (`#1738 <https://github.com/Araq/Nim/issues/1738>`_) -- Fixed "C Codegen: C Types are defined after their usage in certain cases" - (`#2823 <https://github.com/Araq/Nim/issues/2823>`_) -- Fixed "s.high refers to the current seq instead of the old one" - (`#1832 <https://github.com/Araq/Nim/issues/1832>`_) -- Fixed "Error while unmarshaling null values" - (`#3149 <https://github.com/Araq/Nim/issues/3149>`_) -- Fixed "Inference of `static[T]` in sequences" - (`#3144 <https://github.com/Araq/Nim/issues/3144>`_) -- Fixed "Argument named "closure" to proc inside template interfere with closure pragma" - (`#3171 <https://github.com/Araq/Nim/issues/3171>`_) -- Fixed "Internal error with aliasing inside template" - (`#3158 <https://github.com/Araq/Nim/issues/3158>`_) -- Fixed "Cardinality of sets prints unexpected value" - (`#3135 <https://github.com/Araq/Nim/issues/3135>`_) -- Fixed "Nim crashes on const assignment from function returning var ref object" - (`#3103 <https://github.com/Araq/Nim/issues/3103>`_) -- Fixed "`repr` cstring" - (`#3080 <https://github.com/Araq/Nim/issues/3080>`_) -- Fixed "Nim check crashes on wrong enum declaration" - (`#3052 <https://github.com/Araq/Nim/issues/3052>`_) -- Fixed "Compiler assertion when evaluating template with static[T]" - (`#1858 <https://github.com/Araq/Nim/issues/1858>`_) -- Fixed "Erroneous overflow in iterators when compiler built with overflowChecks enabled" - (`#3140 <https://github.com/Araq/Nim/issues/3140>`_) -- Fixed "Unicode dashes as "lisp'ish" alternative to hump and snake notation" - (`#2811 <https://github.com/Araq/Nim/issues/2811>`_) -- Fixed "Calling discardable proc from a defer is an error." - (`#3185 <https://github.com/Araq/Nim/issues/3185>`_) -- Fixed "Defer statement at the end of a block produces ICE" - (`#3186 <https://github.com/Araq/Nim/issues/3186>`_) -- Fixed "Call to `createU` fails to compile" - (`#3193 <https://github.com/Araq/Nim/issues/3193>`_) -- Fixed "VM crash when accessing array's element" - (`#3192 <https://github.com/Araq/Nim/issues/3192>`_) -- Fixed "Unexpected proc invoked when different modules add procs to a type from a 3rd module" - (`#2664 <https://github.com/Araq/Nim/issues/2664>`_) -- Fixed "Nim crashes on conditional declaration inside a template" - (`#2670 <https://github.com/Araq/Nim/issues/2670>`_) -- Fixed "Iterator names conflict within different scopes" - (`#2752 <https://github.com/Araq/Nim/issues/2752>`_) -- Fixed "VM: Cannot assign int value to ref variable" - (`#1329 <https://github.com/Araq/Nim/issues/1329>`_) -- Fixed "Incorrect code generated for tagged unions with enums not starting at zero" - (`#3096 <https://github.com/Araq/Nim/issues/3096>`_) -- Fixed "Compile time procs using forward declarations are silently ignored" - (`#3066 <https://github.com/Araq/Nim/issues/3066>`_) -- Fixed "re binding error in generic" - (`#1965 <https://github.com/Araq/Nim/issues/1965>`_) -- Fixed "os.getCreationTime is incorrect/impossible on Posix systems" - (`#1058 <https://github.com/Araq/Nim/issues/1058>`_) -- Fixed "Improve error message for osproc.startProcess when command does not exist" - (`#2183 <https://github.com/Araq/Nim/issues/2183>`_) -- Fixed "gctest segfaults with --gc:markandsweep on x86_64" - (`#2305 <https://github.com/Araq/Nim/issues/2305>`_) -- Fixed "Coroutine changes break compilation on unsupported architectures" - (`#3245 <https://github.com/Araq/Nim/issues/3245>`_) -- Fixed "Bugfix: Windows 32bit TinyCC support issue fixed" - (`#3237 <https://github.com/Araq/Nim/issues/3237>`_) -- Fixed "db_mysql getValue() followed by exec() causing error" - (`#3220 <https://github.com/Araq/Nim/issues/3220>`_) -- Fixed "xmltree.newEntity creates xnCData instead of xnEntity" - (`#3282 <https://github.com/Araq/Nim/issues/3282>`_) -- Fixed "Methods and modules don't work together" - (`#2590 <https://github.com/Araq/Nim/issues/2590>`_) -- Fixed "String slicing not working in the vm" - (`#3300 <https://github.com/Araq/Nim/issues/3300>`_) -- Fixed "internal error: evalOp(mTypeOf)" - (`#3230 <https://github.com/Araq/Nim/issues/3230>`_) -- Fixed "#! source code prefix collides with Unix Shebang" - (`#2559 <https://github.com/Araq/Nim/issues/2559>`_) -- Fixed "wrong codegen for constant object" - (`#3195 <https://github.com/Araq/Nim/issues/3195>`_) -- Fixed "Doc comments inside procs with implicit returns don't work" - (`#1528 <https://github.com/Araq/Nim/issues/1528>`_) |