168 lines
7.9 KiB
ReStructuredText
168 lines
7.9 KiB
ReStructuredText
2012-02-09 Version 0.8.14 released
|
|
==================================
|
|
|
|
.. container:: metadata
|
|
|
|
Posted by Andreas Rumpf on 09/02/2012
|
|
|
|
Version 0.8.14 has been released!
|
|
|
|
Bugfixes
|
|
--------
|
|
|
|
- Fixed a serious memory corruption concerning message passing.
|
|
- Fixed a serious bug concerning different instantiations of a generic proc.
|
|
- Fixed a newly introduced bug where a wrong ``EIO`` exception was raised for
|
|
the end of file for text files that do not end with a newline.
|
|
- Bugfix c2nim, c2pas: the ``--out`` option has never worked properly.
|
|
- Bugfix: forwarding of generic procs never worked.
|
|
- Some more bugfixes for macros and compile-time evaluation.
|
|
- The GC now takes into account interior pointers on the stack which may be
|
|
introduced by aggressive C optimizers.
|
|
- Nimrod's native allocator/GC now works on PowerPC.
|
|
- Lots of other bugfixes: Too many to list them all.
|
|
|
|
|
|
Changes affecting backwards compatibility
|
|
-----------------------------------------
|
|
|
|
- Removed deprecated ``os.AppendFileExt``, ``os.executeShellCommand``,
|
|
``os.iterOverEnvironment``, ``os.pcDirectory``, ``os.pcLinkToDirectory``,
|
|
``os.SplitPath``, ``os.extractDir``, ``os.SplitFilename``,
|
|
``os.extractFileTrunk``, ``os.extractFileExt``, ``osproc.executeProcess``,
|
|
``osproc.executeCommand``.
|
|
- Removed deprecated ``parseopt.init``, ``parseopt.getRestOfCommandLine``.
|
|
- Moved ``strutils.validEmailAddress`` to ``matchers.validEmailAddress``.
|
|
- The pointer dereference operator ``^`` has been removed, so that ``^``
|
|
can now be a user-defined operator.
|
|
- ``implies`` is no keyword anymore.
|
|
- The ``is`` operator is now the ``of`` operator.
|
|
- The ``is`` operator is now used to check type equivalence in generic code.
|
|
- The ``pure`` pragma for procs has been renamed to ``noStackFrame``.
|
|
- The threading API has been completely redesigned.
|
|
- The ``unidecode`` module is now thread-safe and its interface has changed.
|
|
- The ``bind`` expression is deprecated, use a ``bind`` declaration instead.
|
|
- ``system.raiseHook`` is now split into ``system.localRaiseHook`` and
|
|
``system.globalRaiseHook`` to distinguish between thread local and global
|
|
raise hooks.
|
|
- Changed exception handling/error reporting for ``os.removeFile`` and
|
|
``os.removeDir``.
|
|
- The algorithm for searching and loading configuration files has been changed.
|
|
- Operators now have diffent precedence rules: Assignment-like operators
|
|
(like ``*=``) are now special-cased.
|
|
- The fields in ``TStream`` have been renamed to have an ``Impl`` suffix
|
|
because they should not be used directly anymore.
|
|
Wrapper procs have been created that should be used instead.
|
|
- ``export`` is now a keyword.
|
|
- ``assert`` is now implemented in pure Nimrod as a template; it's easy
|
|
to implement your own assertion templates with ``system.astToStr``.
|
|
|
|
|
|
Language Additions
|
|
------------------
|
|
|
|
- Added new ``is`` and ``of`` operators.
|
|
- The built-in type ``void`` can be used to denote the absence of any type.
|
|
This is useful in generic code.
|
|
- Return types may be of the type ``var T`` to return an l-value.
|
|
- The error pragma can now be used to mark symbols whose *usage* should trigger
|
|
a compile-time error.
|
|
- There is a new ``discardable`` pragma that can be used to mark a routine
|
|
so that its result can be discarded implicitly.
|
|
- Added a new ``noinit`` pragma to prevent automatic initialization to zero
|
|
of variables.
|
|
- Constants can now have the type ``seq``.
|
|
- There is a new user-definable syntactic construct ``a{i, ...}``
|
|
that has no semantics yet for built-in types and so can be overloaded to your
|
|
heart's content.
|
|
- ``bind`` (used for symbol binding in templates and generics) is now a
|
|
declarative statement.
|
|
- Nimrod now supports single assignment variables via the ``let`` statement.
|
|
- Iterators named ``items`` and ``pairs`` are implicitly invoked when
|
|
an explicit iterator is missing.
|
|
- The slice assignment ``a[i..j] = b`` where ``a`` is a sequence or string
|
|
now supports *splicing*.
|
|
|
|
|
|
Compiler Additions
|
|
------------------
|
|
|
|
- The compiler can generate C++ code for easier interfacing with C++.
|
|
- The compiler can generate Objective C code for easier interfacing with
|
|
Objective C.
|
|
- The new pragmas ``importcpp`` and ``importobjc`` make interfacing with C++
|
|
and Objective C somewhat easier.
|
|
- Added a new pragma ``incompleteStruct`` to deal with incomplete C struct
|
|
definitions.
|
|
- Added a ``--nimcache:PATH`` configuration option for control over the output
|
|
directory for generated code.
|
|
- The ``--genScript`` option now produces different compilation scripts
|
|
which do not contain absolute paths.
|
|
- Added ``--cincludes:dir``, ``--clibdir:lib`` configuration options for
|
|
modifying the C compiler's header/library search path in cross-platform way.
|
|
- Added ``--clib:lib`` configuration option for specifying additional
|
|
C libraries to be linked.
|
|
- Added ``--mainmodule:file`` configuration options for specifying the main
|
|
project file. This is intended to be used in project configuration files to
|
|
allow commands like ``nimrod c`` or ``nimrod check`` to be executed anywhere
|
|
within the project's directory structure.
|
|
- Added a ``--app:staticlib`` option for creating static libraries.
|
|
- Added a ``--tlsEmulation:on|off`` switch for control over thread local
|
|
storage emulation.
|
|
- The compiler and standard library now support a *taint mode*. Input strings
|
|
are declared with the ``TaintedString`` string type. If the taint
|
|
mode is turned on it is a distinct string type which helps to detect input
|
|
validation errors.
|
|
- The compiler now supports the compilation cache via ``--symbolFiles:on``.
|
|
This potentially speeds up compilations by an order of magnitude, but is
|
|
still highly experimental!
|
|
- Added ``--import:file`` and ``--include:file`` configuration options
|
|
for specifying modules that will be automatically imported/incluced.
|
|
- ``nimrod i`` can now optionally be given a module to execute.
|
|
- The compiler now performs a simple alias analysis to generate better code.
|
|
- The compiler and ENDB now support *watchpoints*.
|
|
- The compiler now supports proper compile time expressions of type ``bool``
|
|
for ``on|off`` switches in pragmas. In order to not break existing code,
|
|
``on`` and ``off`` are now aliases for ``true`` and ``false`` and declared
|
|
in the system module.
|
|
- The compiler finally supports **closures**. This is a preliminary
|
|
implementation, which does not yet support nestings deeper than 1 level
|
|
and still has many known bugs.
|
|
|
|
|
|
Library Additions
|
|
-----------------
|
|
|
|
- Added ``system.allocShared``, ``system.allocShared0``,
|
|
``system.deallocShared``, ``system.reallocShared``.
|
|
- Slicing as implemented by the system module now supports *splicing*.
|
|
- Added explicit channels for thread communication.
|
|
- Added ``matchers`` module for email address etc. matching.
|
|
- Added ``strutils.unindent``, ``strutils.countLines``,
|
|
``strutils.replaceWord``.
|
|
- Added ``system.slurp`` for easy resource embedding.
|
|
- Added ``system.running`` for threads.
|
|
- Added ``system.programResult``.
|
|
- Added ``xmltree.innerText``.
|
|
- Added ``os.isAbsolute``, ``os.dynLibFormat``, ``os.isRootDir``,
|
|
``os.parentDirs``.
|
|
- Added ``parseutils.interpolatedFragments``.
|
|
- Added ``macros.treeRepr``, ``macros.lispRepr``, ``macros.dumpTree``,
|
|
``macros.dumpLisp``, ``macros.parseExpr``, ``macros.parseStmt``,
|
|
``macros.getAst``.
|
|
- Added ``locks`` core module for more flexible locking support.
|
|
- Added ``irc`` module.
|
|
- Added ``ftpclient`` module.
|
|
- Added ``memfiles`` module.
|
|
- Added ``subexes`` module.
|
|
- Added ``critbits`` module.
|
|
- Added ``asyncio`` module.
|
|
- Added ``actors`` module.
|
|
- Added ``algorithm`` module for generic ``sort``, ``reverse`` etc. operations.
|
|
- Added ``osproc.startCmd``, ``osproc.execCmdEx``.
|
|
- The ``osproc`` module now uses ``posix_spawn`` instead of ``fork``
|
|
and ``exec`` on Posix systems. Define the symbol ``useFork`` to revert to
|
|
the old implementation.
|
|
- Added ``intsets.assign``.
|
|
- Added ``system.astToStr`` and ``system.rand``, ``system.doAssert``.
|
|
- Added ``system.pairs`` for built-in types like arrays and strings.
|