Go to file
Reimer Behrends f664c576c2 Fix code generation issues with TNimType.
This is an alternative attempt to fix issue #2841 in a way that does not
rely on non-standard C compiler behavior.

The underlying problem is that the typeinfo module includes
system/hti.nim, but system/hti.nim is also included by system.nim. The
result is that the compiler at any given point has two instances of
TNimType with the same external name and will generate code either for
one or both of them. Code generation for the second version is normally
suppressed by using {.importc.}, but that results in a missing type
declaration for modules that only use the second version. This happens
for modules that import typeinfo, because the the second component of
typeinfo.Any has type PNimType = ptr TNimType, which generates a
"TNimType *" struct member.

The previous solution was to have a typedef for TNimType in nimbase.h;
however, this results in duplicate typedefs (specifically, but not only
for the code generated for typeinfo.nim). Duplicate typedefs with the
same type name are allowed in C++ and C11, but are explicitly forbidden
in C89 and C99. Modern versions of gcc and clang accept them anyway, but
this is not standard-compliant and may break for other C compilers or
older versions of gcc and clang.

This patch attempts to fix the issue by making the second component of
typeinfo.Nim a pointer instead of a PNimType and casting back and forth
as needed. Thus, the second version of TNimType occurs only within the
code for typeinfo.nim, where it can be safely omitted.
2015-12-15 13:33:38 +01:00
2015-10-14 14:35:44 +02:00
2015-02-14 19:00:11 +01:00
2015-11-18 13:32:29 +01:00
2015-05-26 14:16:22 +03:00
2015-10-26 14:57:22 +01:00
2015-10-28 14:19:12 +01:00
2015-08-16 13:41:25 +02:00
2015-09-07 19:51:52 -05:00
2015-07-29 17:57:47 -04:00
2015-09-22 13:33:37 -07:00
2015-10-07 16:45:48 -07:00
2015-02-03 09:04:24 +01:00
2015-06-15 01:30:25 +02:00
2015-11-03 14:52:35 +01:00
2015-11-18 12:33:09 +01:00

Nim Compiler

Join the chat at https://gitter.im/nim-lang/Nim

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.

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/nim-lang/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, but lots of things don't work then so don't do that. Add it to your PATH instead. 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.

Nimble

Nimble is Nim's package manager. For the source based installations where you added Nim's bin directory to your PATH the easiest way of installing Nimble is via:

$ nim e install_nimble.nims

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-2015 Andreas Rumpf. All rights reserved.

Build Status

Build Waterfall

Linux Windows Mac
x86 linux-x86 windows-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 699 MiB
Languages
Nim 96.2%
HTML 1.8%
Python 0.5%
C 0.4%
Shell 0.4%
Other 0.6%