Go to file
Charles Blake 5fbcf93860 Add hcode,rightSize,rawGetKnownHC. Fix inf loop.
Make similar changes to those made in sets.nim, including hcode, rightSize
rawGet/rawGetKnownHC result protocol, nextTry probe sequence to be the cache
friendlier h=h+1 which in turn allows supporting changing deletion to fix the
infinite loop bug with local rehashing which in turn has desirable properties
of graceful table aging when deletes do happen and also making insert-only
usage patterns no longer pay any time/space cost to check deleted status.

Unlike collections.sets, this module has add() for duplicate key inserts and
a 3rd type of table, CountTable.  The first wrinkle is handled by introducing
a rawGetDeep for unconditionally adding entries along collision chains.  This
point of CountTable seems to be space efficiency at 2 items per slot.  These
changes retain that by keeping the val==0 => EMPTY rule and not caching hash
codes.  putImpl is expanded in-place for CountTable since the new putImpl() is
too different. { Depending on table size relative to caches & key expense,
regular Table[A,B] may become faster than CountTable, especially if the basic
count update could be something like inc(mGetOrPut(t, key, 0)). }

Unit tests pass, but in this module those are much more of just a demo than
probing for bugs.  Should exercise/test this a little more before merging.
2015-02-12 05:22:04 -05:00
2015-02-08 13:38:04 +01:00
2015-02-10 20:19:48 +01:00
2015-01-28 19:31:36 +01:00
2015-02-10 22:23:38 +01:00
2015-02-10 20:19:48 +01:00
2015-02-10 20:19:48 +01:00
2014-11-12 08:37:02 -05:00
2015-01-16 21:47:26 +00:00
2015-02-10 20:19:48 +01:00
2014-12-11 23:36:42 -05:00
2015-02-10 20:19:48 +01:00
2015-02-03 09:04:24 +01:00
2015-02-07 16:06:50 -05:00
2014-10-20 08:44:00 +02:00
2015-02-10 20:19:48 +01:00

Nim Compiler

This repo contains the Nim compiler, Nim's stdlib, tools and documentation.

Compiling

Compiling the Nim compiler is quite straightforward. Because the Nim compiler itself is written in the Nim programming language the C source of an older version of the compiler are needed to bootstrap the latest version. The C sources are available in a separate repo here.

Pre-compiled snapshots of the compiler are also available on Nimbuild. Your platform however may not currently be built for.

The compiler currently supports the following platform and architecture combinations:

  • Windows (Windows XP or greater) - x86 and x86_64
  • Linux (most, if not all, distributions) - x86, x86_64, ppc64 and armv6l
  • Mac OS X 10.04 or higher - x86, x86_64 and ppc64

In reality a lot more are supported, however they are not tested regularly.

To build from source you will need:

  • gcc 3.x or later recommended. Other alternatives which may work are: clang, Visual C++, Intel's C++ compiler
  • git or wget

If you are on a fairly modern *nix system, the following steps should work:

$ git clone git://github.com/Araq/Nim.git
$ cd Nim
$ git clone --depth 1 git://github.com/nim-lang/csources
$ cd csources && sh build.sh
$ cd ..
$ bin/nim c koch
$ ./koch boot -d:release

koch install [dir] may then be used to install Nim, or you can simply add it to your PATH. More koch related options are documented in doc/koch.txt.

The above steps can be performed on Windows in a similar fashion, the build.bat and build64.bat (for x86_64 systems) are provided to be used instead of build.sh.

Getting help

A forum is available if you have any questions, and you can also get help in the IRC channel on Freenode in #nim. If you ask questions on StackOverflow use the nim tag.

License

The compiler and the standard library are licensed under the MIT license, except for some modules where the documentation suggests otherwise. This means that you can use any license for your own programs developed with Nim, allowing you to create commercial applications.

Read copying.txt for more details.

Copyright (c) 2006-2014 Andreas Rumpf. All rights reserved.

Build Status

Build Waterfall

Linux Windows Mac
x86 linux-x86 windows-x86 mac-x86
x86_64 linux-x86_64 windows-x86_64 mac-x86_64
arm linux-armv5
linux-armv6
linux-armv7
Description
Nim is a statically typed compiled systems programming language. It combines successful concepts from mature languages like Python, Ada and Modula. Its design focuses on efficiency, expressiveness, and elegance (in that order of priority).
Readme 639 MiB
Languages
Nim 96.6%
HTML 1.8%
Python 0.5%
C 0.4%
Shell 0.4%
Other 0.2%