summary refs log tree commit diff stats
path: root/compiler/ccgstmts.nim
Commit message (Expand)AuthorAgeFilesLines
* fixes #12961 (#13019)Andreas Rumpf2020-01-031-9/+12
* --exception:goto switch for deterministic exception handling (#12977)Andreas Rumpf2020-01-011-24/+157
* fixes #12826Araq2019-12-241-2/+2
* Fix #12785 (#12943)RSDuck2019-12-211-0/+4
* ARC related bugfixes and refactorings (#12781)Andreas Rumpf2019-12-051-3/+10
* better support for PROGMEM like annotations for lets/vars; fixes #12216 (#12799)Andreas Rumpf2019-12-051-12/+26
* Cosmetic compiler cleanup (#12718)Clyybber2019-11-281-174/+165
* --gc:destructors now means Nim uses pure refcounting (#12557)Andreas Rumpf2019-10-301-1/+1
* refactoring: --newruntime consists of 3 different switchesAraq2019-10-201-4/+4
* Fix spellings (#12277) [backport]Federico Ceratto2019-09-271-1/+1
* Small ast.nim cleanup (#12156)Clyybber2019-09-091-20/+20
* allows access to .compileTime vars at runtime (#12128)Andreas Rumpf2019-09-051-11/+12
* Remove ENDB (#12095)Clyybber2019-08-311-26/+0
* only store finally block in exception stack (#11876)Jacek Sieka2019-08-281-9/+11
* fixes #11891Andreas Rumpf2019-08-101-1/+3
* int128 on firstOrd, lastOrd and lengthOrd (#11701)Arne Döring2019-08-071-5/+5
* styleCheck: make the compiler and large parts of the stdlib compatible with -...Araq2019-07-101-1/+1
* msgs, ccgstmts: fixes #11572 (#11621)alaviss2019-06-301-1/+1
* Warn about object case transitions at compile time (#11378)genotrance2019-06-021-0/+1
* fixes #11205Araq2019-05-281-1/+26
* Small cleanup (#11185)Andreas Rumpf2019-05-081-10/+10
|\
| * Replace countup(x, y) with x .. yClyybber2019-05-071-8/+8
| * Replace countup(x, y-1) with x ..< yClyybber2019-05-071-2/+2
* | no 'defers' in my backendAraq2019-05-081-16/+15
* | cleanup (#11192)Jasper Jenkins2019-05-071-2/+0
|/
* Fixes for ptr array deref codegen (#11191)Jasper Jenkins2019-05-071-37/+12
* newruntime: make 'discard new RootObj' workAraq2019-04-261-2/+3
* fixes #11082Andreas Rumpf2019-04-231-3/+5
* fewer ropes (#11037)Arne Döring2019-04-191-2/+2
* Less ropes (#10979)Arne Döring2019-04-111-52/+53
* newruntime: raising an exception works but currently leaks memory because cur...Araq2019-04-101-0/+2
* don't emit an implicit try finally when in system.nim in order to prevent end...Araq2019-04-091-1/+2
* Add OpenMP overload with stepping (#10891)Mamy Ratsimbazafy2019-03-221-5/+15
* --newruntime: progressAndreas Rumpf2019-03-141-0/+1
* --newruntime: work in progressAndreas Rumpf2019-03-141-2/+6
* Initial version of the hot-code reloading support for native targets (#10729)zah2019-02-261-10/+74
* Merge branch 'devel' into araq-quirky-exceptionsAndreas Rumpf2019-02-081-4/+5
|\
| * Fix codegen when debugger is enabled (#10595)LemonBoy2019-02-071-4/+5
* | --define:nimQuirky exception handling for Nim; in preparation of a blog postAndreas Rumpf2019-01-031-23/+35
|/
* megatest can be executedArne Döring2018-12-111-1/+2
* Fixes 9716 [backport] (#9790)Yuriy Glukhov2018-11-241-4/+6
* undo try breakArne Döring2018-10-301-4/+5
* fixes #5549Arne Döring2018-10-301-9/+9
* Implements #9434. Minimal Stacktrace for Exceptions in release mode (#9480)cooldome2018-10-281-2/+4
* Openmp parallel iterator improvements (#9493)Mamy Ratsimbazafy2018-10-251-1/+1
* fixes #9276 (#9317)Arne Döring2018-10-241-31/+52
* fixes #9297 (#9298)cooldome2018-10-111-1/+1
* compiler: minor documentation improvementAraq2018-10-011-1/+1
* fixes #9076Araq2018-09-261-1/+1
* fixes merge conflictAndreas Rumpf2018-08-191-2/+10
|\
.highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #666666 } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008800; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008800; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008800 } /* Keyword.Pseudo */ .highlight .kr { color: #008800; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #888888; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #0000DD; font-weight: bold } /* Literal.Number */ .highlight .s { color: #dd2200; background-color: #fff0f0 } /* Literal.String */ .highlight .na { color: #336699 } /* Name.Attribute */ .highlight .nb { color: #003388 } /* Name.Builtin */ .highlight .nc { color: #bb0066; font-weight: bold } /* Name.Class */ .highlight .no { color: #003366; font-weight: bold } /* Name.Constant */ .highlight .nd { color: #555555 } /* Name.Decorator */ .highlight .ne { color: #bb0066; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #0066bb; font-weight: bold } /* Name.Function */ .highlight .nl { color: #336699; font-style: italic } /* Name.Label */ .highlight .nn { color: #bb0066; font-weight: bold } /* Name.Namespace */ .highlight .py { color: #336699; font-weight: bold } /* Name.Property */ .highlight .nt { color: #bb0066; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #336699 } /* Name.Variable */ .highlight .ow { color: #008800 } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mb { color: #0000DD; font-weight: bold } /* Literal.Number.Bin */ .highlight .mf { color: #0000DD; font-weight: bold } /* Literal.Number.Float */ .highlight .mh { color: #0000DD; font-weight: bold } /* Literal.Number.Hex */ .highlight .mi { color: #0000DD; font-weight: bold } /* Literal.Number.Integer */ .highlight .mo { color: #0000DD; font-weight: bold } /* Literal.Number.Oct */ .highlight .sa { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Affix */ .highlight .sb { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Backtick */ .highlight .sc { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Char */ .highlight .dl { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Delimiter */ .highlight .sd { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Doc */ .highlight .s2 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Double */ .highlight .se { color: #0044dd; background-color: #fff0f0 } /* Literal.String.Escape */ .highlight .sh { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Heredoc */ .highlight .si { color: #3333bb; background-color: #fff0f0 } /* Literal.String.Interpol */ .highlight .sx { color: #22bb22; background-color: #f0fff0 } /* Literal.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
====
News
====

2010-XX-XX Version 0.8.8 released
=================================

Version 0.8.8 has been released! Get it `here <download.html>`_. 


Bugfixes
--------
- The Posix version of ``os.copyFile`` has better error handling.
- Fixed bug #502670 (underscores in identifiers).
- Fixed a bug in the ``parsexml`` module concerning the parsing of
  ``<tag attr="value" />``.
- Fixed a bug in the ``parsexml`` module concerning the parsing of
  enities like ``&ltXX``.
- ``system.write(f: TFile, s: string)`` now works even if ``s`` contains binary
  zeros.
- Fixed a bug in ``os.setFilePermissions`` for Windows.
- An overloadable symbol can now have the same name as an imported module.
- Fixed a serious bug in ``strutils.cmpIgnoreCase``. 
- Fixed ``unicode.toUTF8``. 
- The compiler now rejects ``'\n'``. 
- ``times.getStartMilsecs()`` now works on Mac OS X.


Additions
---------
- Added ``system.cstringArrayToSeq``.
- Added ``system.lines(f: TFile)`` iterator.
- Added ``system.delete``, ``system.del`` and ``system.insert`` for sequences.
- Exported ``system.newException`` template.
- Added ``cgi.decodeData(data: string): tuple[key, value: string]``.
- Added ``ropes`` module.
- Added ``sockets`` module.
- Added ``browsers`` module.
- Added ``httpserver`` module.
- Added ``httpclient`` module.
- Added ``parseutils`` module.
- Added ``unidecode`` module.
- Added ``xmldom`` module.
- Added ``xmldomparser`` module.
- Added ``xmltree`` module.
- Added ``xmlparser`` module.
- Added ``htmlparser`` module.
- Many wrappers now do not contain redundant name prefixes (like ``GTK_``,
  ``lua``). The new wrappers are available in ``lib/newwrap``. Change
  your configuration file to use these.
- Triple quoted strings allow for ``"`` in more contexts.
- ``""`` within raw string literals stands for a single quotation mark.
- More extensive subscript operator overloading. See 
  `subscript overloading <manual.html#subscript-overloading>`_ for further
  information.
- The documentation generator supports the ``.. raw:: html`` directive.


Changes affecting backwards compatibility
-----------------------------------------

- Overloading of the subscript operator only works if the type does not provide
  a built-in one.
- The search order for libraries which is affected by the ``path`` option 
  has been reversed, so that the project's path is searched before 
  the standard library's path. 
- The compiler does not include a Pascal parser for bootstrapping purposes any
  more. Instead there is a ``pas2nim`` tool that contains the old functionality.
- The procs ``os.copyFile`` and ``os.moveFile`` have been deprecated
  temporarily, so that the compiler warns about their usage. Use them with
  named arguments only, because the parameter order will change the next
  version!
- ``atomic`` and ``let`` are now keywords.


2009-12-21 Version 0.8.6 released
=================================

The version jump from 0.8.2 to 0.8.6 acknowledges the fact that all development
of the compiler is now done in Nimrod.


Bugfixes
--------
- The pragmas ``hint[X]:off`` and ``warning[X]:off`` now work.
- Method call syntax for iterators works again (``for x in lines.split()``).
- Fixed a typo in ``removeDir`` for POSIX that lead to an infinite recursion.
- The compiler now checks that module filenames are valid identifiers.
- Empty patterns for the ``dynlib`` pragma are now possible. 
- ``os.parseCmdLine`` returned wrong results for trailing whitespace.
- Inconsequent tuple usage (using the same tuple with and without named fields)
  does not crash the code generator anymore.
- A better error message is provided when the loading of a proc within a
  dynamic lib fails.


Additions
---------
- Added ``system.contains`` for open arrays.
- The PEG module now supports the *search loop operator* ``@``.
- Grammar/parser: ``SAD|IND`` is allowed before any kind of closing bracket.
  This allows for more flexible source code formating.
- The compiler now uses a *bind* table for symbol lookup within a ``bind``
  context. (See `<manual.html#templates>`_ for details.)
- ``discard """my long comment"""`` is now optimized away.
- New ``--floatChecks: on|off`` switches and pragmas for better debugging
  of floating point operations. (See
  `<manual.html#pre-defined-floating-point-types>`_ for details.)
- The manual has been improved. (Many thanks to Philippe Lhoste!)


Changes affecting backwards compatibility
-----------------------------------------
- The compiler does not skip the linking step anymore even if no file
  has changed.
- ``os.splitFile(".xyz")`` now returns ``("", ".xyz", "")`` instead of
  ``("", "", ".xyz")``. So filenames starting with a dot are handled
  differently. 
- ``strutils.split(s: string, seps: set[char])`` never yields the empty string
  anymore. This behaviour is probably more appropriate for whitespace splitting. 
- The compiler now stops after the ``--version`` command line switch.
- Removed support for enum inheritance in the parser; enum inheritance has 
  never been documented anyway.
- The ``msg`` field of ``system.E_base`` has now the type ``string``, instead
  of ``cstring``. This improves memory safety.


2009-10-21 Version 0.8.2 released
=================================

Bugfixes
--------
- Passing ``--hint[X]:off`` or ``--warning[X]:off`` as command line arguments 
  to the compiler now works.
- Default parameters for templates now work.
- Fixed security issue in ``system.copy``.
- String case without an ``else`` part generated wrong code.
- Various fixes for the ``osproc`` module; it now works on Windows.


Additions
---------
- Implemented multi-methods.
- The compiler now detects the number of available processors and
  executes the C compiler concurrently. This can be adjusted by the
  ``--parallel_build: number_of_processors`` command line switch.
- PEG-based pattern matching via the `pegs <pegs.html>`_ module.
- Added ``system.definedInScope``.
- Added ``system.accumulateResult``.
- Added ``os.walkDirRec``.
- Added ``osproc.countProcessors``.
- Added ``osproc.execProcesses``.
- The configuration system now supports ``$cc.options.linker``.
- Merged ``expr`` and ``typeDesc`` in the grammar/parser: this will allow for
  anonymous procs without ``lambda``.
- Many scripts have no need for a GC: The new ``--gc:none`` command line switch
  can be used to exclude the GC from the executable.


Changes affecting backwards compatibility
-----------------------------------------
- Taking the address of an object discriminant is now invalid.
- Passing a proc to a proc var is only allowed for procs marked with 
  ``procvar`` or a calling convention != ``nimcall``. For now this only causes 
  a warning, but this will turn into an error soon.
- ``system.&`` and ``system.add`` now receive ``openArray`` instead of ``seq``
  parameters.
- Removed ``strutils.findSubStr`` and ``strutils.findChars``. They have been 
  deprecated for 3 versions.
- The unicode module uses a distinct type for ``TRune``.
- Deprecated ``strutils.toString``: use ``$`` instead.
- Deprecated ``os.splitPath``: use ``os.splitPath`` that returns a tuple 
  instead.
- Deprecated ``os.extractDir``: use ``splitFile(path).dir`` instead.
- Deprecated ``os.splitFilename``: use ``splitFile`` instead.
- Deprecated ``os.extractFileExt``: use ``splitFile`` instead.
- Deprecated ``os.extractFileTrunk``: use ``splitFile`` instead.
- Deprecated ``os.appendFileExt``: use ``os.addFileExt`` instead.
- Deprecated ``os.executeShellCommand``: use ``os.execShellCmd`` instead.
- Deprecated ``os.iterOverEnvironment``: use ``os.envPairs`` instead.
- Deprecated ``parseopt.init``: use ``parseopt.initOptParser`` instead.
- Deprecated ``parseopt.getRestOfCommandLine``: use ``parseopt.cmdLineRest``
  instead.
- Deprecated ``os.pcDirectory``: use ``os.pcDir`` instead.
- Deprecated ``os.pcLinkToDirectory``: use ``os.pcLinkToDir`` instead.
- Deprecated ``osproc.executeProcess``: use ``osproc.execProcess`` instead.
- Deprecated ``osproc.executeCommand``: use ``osproc.execCmd`` instead.


2009-09-12 Version 0.8.0 released
=================================

Bugfixes
--------
- fixed a small bug that caused the compiler to not report unused
  overloaded symbols
- fixed a small bug concerning symbol overloading
- fixed a typo: it's "ambiguous", not "ambigious" ;-)
- the compiler now detects recursive include files
- ``system.card`` should work again
- ``items`` for ``set[char]`` and ``array[char, T]`` should work now


Additions
---------

- implemented generic types and two phase symbol lookup in generic routines 
- template parameters can now have real types
- implemented generalized raw string literals: ``ident"abc"`` is a shortcut for
  ``ident(r"abc")``
- in overloading resolution iterators are separated from procs; iterators now
  can have the same name+signature as procs
- symbol lookup in templates can be affected by the new ``bind`` keyword
- the compiler now accepts a ``--no_main`` switch for better link
  interoperability with other compiled languages
- implemented tuple unpacking in ``var`` sections
- the code generator emits ``default: __assume(0);`` for Visual C++
  (for optimization)
- the compiler now checks if a proc has side effects; procs that are declared
  to have no side effects are rejected if the compiler cannot verify this
- the format operator ``strutils.%`` now supports ``$#`` for automatic argument
  counting
- implemented ``strutils.join``


Changes affecting backwards compatibility
-----------------------------------------

- two phase symbol lookup is performed in generic routines
- ``bind`` is now a reserved word; ``exception`` is no reserved word anymore
- abstract types have been renamed to distinct types; thus
  ``distinct`` is now a reserved word; ``abstract`` is no reserved word anymore
- ``system.openFile`` deprecated: use ``system.open`` instead
- ``system.closeFile`` deprecated: use ``system.close`` instead
- ``strutils.replaceStr`` deprecated: use ``strutils.replace`` instead
- ``strutils.deleteStr`` deprecated: use ``strutils.delete`` instead
- ``strutils.splitSeq`` deprecated: use ``strutils.split`` instead
- ``strutils.splitLinesSeq`` deprecated: use ``strutils.splitLines`` instead
- ``strutils.parseFloat`` does not accept an additional ``start`` parameter 
  anymore


Documentation
-------------

- the manual has been improved



2009-06-08 Version 0.7.10 released
==================================

Nimrod version 0.7.10 has been released! 

Bugfixes
--------

- fixed bug #374441, #376113
- the posix module works for Mac OS X again
- returning an array should now work
- fixed a serious bug in several parsers: the cached buf pointer 
  must be updated after a reallocation of the buffer
- fixed a CSS bug that kept Firefox from rendering parts of
  the generated documentation properly
- fixed a bug concerning evaluation of command statements
- overloading of ``inc``, ``dec``, ``pred``, ``succ`` should now work
- ``removeDir`` now works as the documentation says: it even removes
  directories that are not empty
 

Additions
---------

* zero argument templates/macros can now be invoked without ``()``,
  because this is not ambiguous
* new modules in the library:
  - ``dynlib``: load symbols from a shared library
  - ``python``: wrapper for the Python programming language
  - ``tcl``: wrapper for the TCL programming language
* added ``system.max``, ``system.min`` for open arrays
* added ``system.each`` built-in
* added ``os.getFilePermissions``, ``os.setFilePermissions``, 
  ``os.inclFilePermissions``, ``os.exclFilePermissions``
* the ``dynlib`` import mechanism now supports a flexible versioning scheme: 

  .. code-block:: nimrod 
  
    proc Tcl_Eval(interp: pTcl_Interp, script: cstring): int {.cdecl, 
      importc, dynlib: "libtcl(8.5|8.4|8.3|8.2|8.1).so.(1|0)".}

* implemented ``abstract`` types


Changes affecting backwards compatibility
-----------------------------------------

- the organization within the ``lib`` folder now reflects the documentation;
  as a result old configuration files need to be updated
- ``abstract`` is now a reserved keyword
- ``echo`` is now a built-in macro that accepts a variable numer of 
  arguments of different types (and calls ``$`` for the arguments that need 
  it); as a result it cannot be overloaded anymore
- ``where`` is no keyword anymore
- installation on UNIX produces a release version of the compiler


2009-05-08 Version 0.7.8 released
=================================

Nimrod version 0.7.8 has been released!
Apart from bugfixes and added libraries the biggest change is that Nimrod
now has a new memory manager which: 

- interacts much better with the GC
- uses less memory
- is faster than the old memory manager (``dlmalloc``)
- releases memory back to the operating system


Bugfixes
--------

- generics are now processed earlier in the pipeline; thus 
  generics can be used within macros
- changed bootstrapping in ``koch.py`` and ``boot.nim`` to fix 
  bug #369607
- the compiler now checks that ``yield`` is used inside a loop
- fixed a bug in the evaluation code for ``system.len``, 
  ``system.setlen`` and ``system.newSeq``
- overflow checking for ``newSeq`` fixes a security issue


Additions
---------

- new module: ``parsecsv`` for parsing CSV files
- new module: ``xmlgen`` for generating XML or HTML
- new module: ``osproc`` for OS process communication
- added ``math.TRunningStat`` object and its methods
- added ``strutils.validIdentifier``
- the reStructuredText parser now supports the ``container`` directive that
  translates to the HTML ``div`` element
- the ``cgi`` module registers a handler, so that stack traces contain the
  HTML ``<br />`` element making CGI applications easier to debug
- added the ``cgi.decodeData`` iterator
- ``copy`` and ``newString`` can now be evaluated at compile time. As a 
  result more procedures from the ``strutils`` module can be evaluated at
  compile time.
- ``macros.error`` now prints a stack trace
- Nimrod now supports the Boehm-Demers-Weiser conservative garbage collector: 
  The ``--gc:boehm`` command line switch activates it. However, the native 
  Nimrod collector is faster!
  

Documentation
-------------

- Nimrod's abstract syntax trees are now documented in the 
  `macros <macros.html>`_ module. Unfortunately the documentation is still
  incomplete.


2009-04-22 Version 0.7.6 released
=================================

Nimrod version 0.7.6 has been released! 
This is mostly a bugfix release. Some new features and libraries have 
also been implemented.

Bugfixes
--------

- installation on Windows Vista may now work out of the box; please try!
- fixed a bug that kept the "recursive modules" example from working
- mixing named and unnamed parameters in a procedure call now works
- octal numbers with the prefix ``0c`` are now properly supported
- enumerations now may start with negative values
- ``parseInt``, ``ParseBiggestInt`` now throw an exception if the
  string does not end after the parsed number
- the compiler now handles top-level statements correctly
- generated ``nimcache`` directory never ends in a slash
- ``createDir`` now works for global directories under UNIX ("/somepath/here")
- the compiler now executes the executable with a leading "./" under UNIX
- the compiler now supports constant arrays of procedure pointers
- ``elif`` in ``case`` statements now works
- iterators using an open array parameter now work
- fixed a bug where in some contexts ``$myEnum`` did not work


Additions
---------
- implemented the passing of a code-block to the last parameter of a 
  template/macro:
  
  .. code-block:: nimrod

    template withFile(f, filename, mode: expr, 
                      actions: stmt): stmt =
      block:
        var f: TFile
        if openFile(f, filename, mode):
          try:
            actions
          finally:
            closeFile(f)
        else:
          quit("cannot open: " & filename)
        
    withFile(txt, "ttempl3.txt", fmWrite):
      txt.writeln("line 1")
      txt.writeln("line 2")

- new pragma ``deprecated`` can be used to mark deprecated identifiers
- added ``system.pop`` built-in for sequences
- added ``addf``, ``addSep`` and ``validEmailAddress`` to the
  ``strutils`` module
- nice ``=~`` template operator for the ``regexprs`` module
- the scoping rules for ``for``, ``while``, ``if``, ``case`` changed
  in a subtle way to support the new ``=~`` template
- added common regular expressions for regexprs
- ``posix`` module now declares socket stuff
- new module: ``cgi`` for creating CGI applications
- new module: ``terminal`` for simple terminal output customization
- new module: ``parsexml`` for HTML/XML parsing with some support for
  parsing *dirty* HTML
- new module: ``web`` for retrieving web pages
- new module: ``md5`` for computation of MD5 checksums
- new wrappers: ``mysql``, ``sqlite3``, ``libcurl``


Changes affecting backwards compatibility
-----------------------------------------

- ``strutils.findSubStr``, ``strutils.findChars`` deprecated: 
  use ``strutils.find`` instead


Documentation
-------------

- The library is now divided into *pure libraries*, *impure libraries* 
  and *wrappers*.


2009-01-22 Forum added
======================
We now have a `forum <http://www.ethexor.com/heimdall>`_ where you can discuss 
Nimrod. 


2009-01-07 Version 0.7.4 released
=================================

Nimrod version 0.7.4 has been released! 

Bugfixes
--------

- installation on Windows should work now if the directory contains spaces
- the documentation generator now only renders documentation comments
- ``\`` is allowed for operators as the manual says
- in rare cases, the index check has been optimized away, even though
  it would have been necessary
- several bugfixes for tuple types

Additions
---------

- added an ``unicode`` module for UTF-8 handling
- added ``hostOS`` and ``hostCPU`` magics to the ``system`` module
- ``system.echo`` now accepts multiple arguments
- added optimization: in some cases inlining of iterators now produces 
  substantially better code
- added whole program dead code elimination
- the magic ``$`` operator now works for enumerations
- in ``const`` sections advanced compile time evaluation is done: 

.. code-block:: nimrod
  proc fac(n: int): int = 
    if n <= 1: return 1
    else: return n*(fac(n-1))
    
  const
    z = fac(3)  # computes 6 at compile time

Changes affecting backwards compatibility
-----------------------------------------

- renamed ``in_Operator`` to ``contains``: ``in`` is now a template that 
  translates to ``contains``
- changed ``strutils.quoteIfSpaceExists`` to ``strutils.quoteIfContainsWhite``
- the parser is now much more picky about missings commas, etc. If this affects
  your code too much, try to run your code through the pretty printer.
- the ``macros`` API is no longer part of the ``system`` module, to use this
  API you now have to import the ``macros`` module

Documentation
-------------

- added a tutorial



2008-12-12 Version 0.7.2 released
=================================

Nimrod version 0.7.2 has been released! This is a bugfix release. This most 
important fix is that Nimrod now works again on AMD64 (x86_64) processors. No 
new features have been implemented.


2008-11-16 Version 0.7.0 released
=================================

Nimrod version 0.7.0 has been released!
Changes:
* various bug fixes, too many to list them here
* the installation for UNIX-based systems does not depend on Python any longer
* the ``koch.py`` script now works with older Python versions (including 1.5.2)
* changed integer operations and conversions rules
* added ``GC_ref`` and ``GC_unref`` procs
* sequences now need to be constructed with the ``@`` operator. This leads to
  less ambiguities.
* the compiler now uses less memory and is much faster
* the GC is now much faster
* new bindings: zlib, SDL, Xlib, OpenGL, ODBC, Lua
* the generated C code is much faster to optimize with GCC
* new libraries: streams, zipfiles
* the Nimrod compiler has been ported to FreeBSD: it should work on
  other BSD's too


2008-08-22 Version 0.6.0 released
=================================

Nimrod version 0.6.0 has been released!
**This is the first version of the compiler that is able to compile itself!**
A nice side-effect from this is that a source-based installation does not
depend on FreePascal any longer.

Changes:
* various bug fixes, too many to list them here
* cleaned up the type system: records are now superfluous and not
  supported anymore
* improved the performance of the garbage collector
* new modules in the library:
  - ``parseopt``: a simple to use command line parser
  - ``hashes``: efficient computation of hash values
  - ``strtabs``: efficient mapping from strings to strings
  - ``parsecfg``: an efficient configuration file parser
* macros and compile-time evaluation implemented (however, still experimental)
* generics implemented (however, still experimental)