diff options
Diffstat (limited to 'web/news.txt')
-rw-r--r-- | web/news.txt | 403 |
1 files changed, 393 insertions, 10 deletions
diff --git a/web/news.txt b/web/news.txt index 9719fb8d7..b417892b9 100644 --- a/web/news.txt +++ b/web/news.txt @@ -2,20 +2,402 @@ News ==== -.. - 2015-05-05 Version 0.11.2 released - ================================== +2015-10-27 Version 0.12.0 released +================================== + +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 +`downloads <downloads.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 +----------------------------------------- +- ``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``. + +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>`_) + + +2015-10-16 First Nim conference +=============================== + +.. raw::html + + <img src="assets/zeo/banner.jpg" alt="First Nim conference in Ukraine!" width="682"/> + +This Autumn you have the unique opportunity to take part in the first Nim event +held in Kyiv and to meet the creator of the Nim programming language - +Andreas Rumpf. The event is hosted by Zeo Alliance and is taking place between +14-15 November 2015 in Kyiv, Ukraine. + +During the workshop you will learn: + +- The basics of the language including its safe and unsafe subsets. +- How to use Nim to develop web applications. +- How Nim's meta programming capabilities make Nim the ultimate glue language, + excellent at interoperability with C++, JavaScript, Java and others. +- Games in Nim and the ability to rapidly prototype without sacrificing speed. + +Registration is free, but the number of places is limited. More details +can be found `here <https://nimworkshop.splashthat.com/>`_. + - Changes affecting backwards compatibility - ----------------------------------------- - Language Additions - ------------------ - Bugfixes - -------- 2015-05-04 Version 0.11.2 released @@ -223,6 +605,7 @@ Library additions space between ``.. <`` and ``.. ^`` is not necessary anymore. - Added ``system.xlen`` for strings and sequences to get back the old ``len`` operation that doesn't check for ``nil`` for efficiency. +- Added sexp.nim to parse and generate sexp. Bugfixes @@ -479,7 +862,7 @@ is the installation of packages containing libraries and/or applications written in Nim. Even though Nimble is still very young it already is very functional. It can install packages by name, it does so by accessing a -packages repository which is hosted on a Github repo. Packages can also be +packages repository which is hosted on a GitHub repo. Packages can also be installed via a Git repo URL or Mercurial repo URL. The package repository is searchable through Nimble. Anyone is free to add their own packages to the package repository by forking the |