e005_version_0_8_14.rst 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. 2012-02-09 Version 0.8.14 released
  2. ==================================
  3. .. container:: metadata
  4. Posted by Andreas Rumpf on 09/02/2012
  5. Version 0.8.14 has been released!
  6. Bugfixes
  7. --------
  8. - Fixed a serious memory corruption concerning message passing.
  9. - Fixed a serious bug concerning different instantiations of a generic proc.
  10. - Fixed a newly introduced bug where a wrong ``EIO`` exception was raised for
  11. the end of file for text files that do not end with a newline.
  12. - Bugfix c2nim, c2pas: the ``--out`` option has never worked properly.
  13. - Bugfix: forwarding of generic procs never worked.
  14. - Some more bugfixes for macros and compile-time evaluation.
  15. - The GC now takes into account interior pointers on the stack which may be
  16. introduced by aggressive C optimizers.
  17. - Nimrod's native allocator/GC now works on PowerPC.
  18. - Lots of other bugfixes: Too many to list them all.
  19. Changes affecting backwards compatibility
  20. -----------------------------------------
  21. - Removed deprecated ``os.AppendFileExt``, ``os.executeShellCommand``,
  22. ``os.iterOverEnvironment``, ``os.pcDirectory``, ``os.pcLinkToDirectory``,
  23. ``os.SplitPath``, ``os.extractDir``, ``os.SplitFilename``,
  24. ``os.extractFileTrunk``, ``os.extractFileExt``, ``osproc.executeProcess``,
  25. ``osproc.executeCommand``.
  26. - Removed deprecated ``parseopt.init``, ``parseopt.getRestOfCommandLine``.
  27. - Moved ``strutils.validEmailAddress`` to ``matchers.validEmailAddress``.
  28. - The pointer dereference operator ``^`` has been removed, so that ``^``
  29. can now be a user-defined operator.
  30. - ``implies`` is no keyword anymore.
  31. - The ``is`` operator is now the ``of`` operator.
  32. - The ``is`` operator is now used to check type equivalence in generic code.
  33. - The ``pure`` pragma for procs has been renamed to ``noStackFrame``.
  34. - The threading API has been completely redesigned.
  35. - The ``unidecode`` module is now thread-safe and its interface has changed.
  36. - The ``bind`` expression is deprecated, use a ``bind`` declaration instead.
  37. - ``system.raiseHook`` is now split into ``system.localRaiseHook`` and
  38. ``system.globalRaiseHook`` to distinguish between thread local and global
  39. raise hooks.
  40. - Changed exception handling/error reporting for ``os.removeFile`` and
  41. ``os.removeDir``.
  42. - The algorithm for searching and loading configuration files has been changed.
  43. - Operators now have diffent precedence rules: Assignment-like operators
  44. (like ``*=``) are now special-cased.
  45. - The fields in ``TStream`` have been renamed to have an ``Impl`` suffix
  46. because they should not be used directly anymore.
  47. Wrapper procs have been created that should be used instead.
  48. - ``export`` is now a keyword.
  49. - ``assert`` is now implemented in pure Nimrod as a template; it's easy
  50. to implement your own assertion templates with ``system.astToStr``.
  51. Language Additions
  52. ------------------
  53. - Added new ``is`` and ``of`` operators.
  54. - The built-in type ``void`` can be used to denote the absence of any type.
  55. This is useful in generic code.
  56. - Return types may be of the type ``var T`` to return an l-value.
  57. - The error pragma can now be used to mark symbols whose *usage* should trigger
  58. a compile-time error.
  59. - There is a new ``discardable`` pragma that can be used to mark a routine
  60. so that its result can be discarded implicitly.
  61. - Added a new ``noinit`` pragma to prevent automatic initialization to zero
  62. of variables.
  63. - Constants can now have the type ``seq``.
  64. - There is a new user-definable syntactic construct ``a{i, ...}``
  65. that has no semantics yet for built-in types and so can be overloaded to your
  66. heart's content.
  67. - ``bind`` (used for symbol binding in templates and generics) is now a
  68. declarative statement.
  69. - Nimrod now supports single assignment variables via the ``let`` statement.
  70. - Iterators named ``items`` and ``pairs`` are implicitly invoked when
  71. an explicit iterator is missing.
  72. - The slice assignment ``a[i..j] = b`` where ``a`` is a sequence or string
  73. now supports *splicing*.
  74. Compiler Additions
  75. ------------------
  76. - The compiler can generate C++ code for easier interfacing with C++.
  77. - The compiler can generate Objective C code for easier interfacing with
  78. Objective C.
  79. - The new pragmas ``importcpp`` and ``importobjc`` make interfacing with C++
  80. and Objective C somewhat easier.
  81. - Added a new pragma ``incompleteStruct`` to deal with incomplete C struct
  82. definitions.
  83. - Added a ``--nimcache:PATH`` configuration option for control over the output
  84. directory for generated code.
  85. - The ``--genScript`` option now produces different compilation scripts
  86. which do not contain absolute paths.
  87. - Added ``--cincludes:dir``, ``--clibdir:lib`` configuration options for
  88. modifying the C compiler's header/library search path in cross-platform way.
  89. - Added ``--clib:lib`` configuration option for specifying additional
  90. C libraries to be linked.
  91. - Added ``--mainmodule:file`` configuration options for specifying the main
  92. project file. This is intended to be used in project configuration files to
  93. allow commands like ``nimrod c`` or ``nimrod check`` to be executed anywhere
  94. within the project's directory structure.
  95. - Added a ``--app:staticlib`` option for creating static libraries.
  96. - Added a ``--tlsEmulation:on|off`` switch for control over thread local
  97. storage emulation.
  98. - The compiler and standard library now support a *taint mode*. Input strings
  99. are declared with the ``TaintedString`` string type. If the taint
  100. mode is turned on it is a distinct string type which helps to detect input
  101. validation errors.
  102. - The compiler now supports the compilation cache via ``--symbolFiles:on``.
  103. This potentially speeds up compilations by an order of magnitude, but is
  104. still highly experimental!
  105. - Added ``--import:file`` and ``--include:file`` configuration options
  106. for specifying modules that will be automatically imported/incluced.
  107. - ``nimrod i`` can now optionally be given a module to execute.
  108. - The compiler now performs a simple alias analysis to generate better code.
  109. - The compiler and ENDB now support *watchpoints*.
  110. - The compiler now supports proper compile time expressions of type ``bool``
  111. for ``on|off`` switches in pragmas. In order to not break existing code,
  112. ``on`` and ``off`` are now aliases for ``true`` and ``false`` and declared
  113. in the system module.
  114. - The compiler finally supports **closures**. This is a preliminary
  115. implementation, which does not yet support nestings deeper than 1 level
  116. and still has many known bugs.
  117. Library Additions
  118. -----------------
  119. - Added ``system.allocShared``, ``system.allocShared0``,
  120. ``system.deallocShared``, ``system.reallocShared``.
  121. - Slicing as implemented by the system module now supports *splicing*.
  122. - Added explicit channels for thread communication.
  123. - Added ``matchers`` module for email address etc. matching.
  124. - Added ``strutils.unindent``, ``strutils.countLines``,
  125. ``strutils.replaceWord``.
  126. - Added ``system.slurp`` for easy resource embedding.
  127. - Added ``system.running`` for threads.
  128. - Added ``system.programResult``.
  129. - Added ``xmltree.innerText``.
  130. - Added ``os.isAbsolute``, ``os.dynLibFormat``, ``os.isRootDir``,
  131. ``os.parentDirs``.
  132. - Added ``parseutils.interpolatedFragments``.
  133. - Added ``macros.treeRepr``, ``macros.lispRepr``, ``macros.dumpTree``,
  134. ``macros.dumpLisp``, ``macros.parseExpr``, ``macros.parseStmt``,
  135. ``macros.getAst``.
  136. - Added ``locks`` core module for more flexible locking support.
  137. - Added ``irc`` module.
  138. - Added ``ftpclient`` module.
  139. - Added ``memfiles`` module.
  140. - Added ``subexes`` module.
  141. - Added ``critbits`` module.
  142. - Added ``asyncio`` module.
  143. - Added ``actors`` module.
  144. - Added ``algorithm`` module for generic ``sort``, ``reverse`` etc. operations.
  145. - Added ``osproc.startCmd``, ``osproc.execCmdEx``.
  146. - The ``osproc`` module now uses ``posix_spawn`` instead of ``fork``
  147. and ``exec`` on Posix systems. Define the symbol ``useFork`` to revert to
  148. the old implementation.
  149. - Added ``intsets.assign``.
  150. - Added ``system.astToStr`` and ``system.rand``, ``system.doAssert``.
  151. - Added ``system.pairs`` for built-in types like arrays and strings.