documentation updates

This commit is contained in:
Araq 2014-10-11 01:30:17 +02:00
commit 5272213da4
7 changed files with 99 additions and 59 deletions

View file

@ -13,8 +13,8 @@
const const
MaxSetElements* = 1 shl 16 # (2^16) to support unicode character sets? MaxSetElements* = 1 shl 16 # (2^16) to support unicode character sets?
VersionMajor* = 0 VersionMajor* = 0
VersionMinor* = 9 VersionMinor* = 10
VersionPatch* = 6 VersionPatch* = 0
VersionAsString* = $VersionMajor & "." & $VersionMinor & "." & $VersionPatch VersionAsString* = $VersionMajor & "." & $VersionMinor & "." & $VersionPatch
RodFileVersion* = "1215" # modify this if the rod-format changes! RodFileVersion* = "1215" # modify this if the rod-format changes!

View file

@ -93,14 +93,33 @@ The following keywords are reserved and cannot be used as identifiers:
Some keywords are unused; they are reserved for future developments of the Some keywords are unused; they are reserved for future developments of the
language. language.
Nim is a `style-insensitive`:idx: language. This means that it is not
case-sensitive and even underscores are ignored: Identifier equality
**type** is a reserved word, and so is **TYPE** or **T_Y_P_E**. The idea behind -------------------
this is that this allows programmers to use their own preferred spelling style
and libraries written by different programmers cannot use incompatible Two identifiers are considered equal if the following algorithm returns true:
conventions. A Nim-aware editor or IDE can show the identifiers as
.. code-block:: nim
proc sameIdentifier(a, b: string): bool =
a[0] == b[0] and a.replace("_", "").toLower == b.replace("_", "").toLower
That means only the first letters are compared in a case sensitive manner. Other
letters are compared case insensitively and underscores are ignored.
This rather strange way to do identifier comparisons is called
`partial case insensitivity`:idx: and has some advantages over the conventional
case sensitivity:
It allows programmers to mostly use their own preferred
spelling style and libraries written by different programmers cannot use
incompatible conventions. A Nim-aware editor or IDE can show the identifiers as
preferred. Another advantage is that it frees the programmer from remembering preferred. Another advantage is that it frees the programmer from remembering
the exact spelling of an identifier. the exact spelling of an identifier. The exception with respect to the first
letter allows common code like ``var foo: Foo`` to be parsed unambiguously.
Historically, Nim was a `style-insensitive`:idx: language. This means that it
was not case-sensitive and underscores were ignored and there was no distinction
between ``foo`` and ``Foo``.
String literals String literals

View file

@ -1,7 +1,6 @@
version 0.10 version 0.10
============ ============
- fix the bug that keeps 'defer' template from working
- Test nimfix on various babel packages - Test nimfix on various babel packages
@ -37,6 +36,7 @@ Misc
Bugs Bugs
==== ====
- fix the bug that keeps 'defer' template from working
- VM: Pegs do not work at compile-time - VM: Pegs do not work at compile-time
- VM: ptr/ref T cannot work in general - VM: ptr/ref T cannot work in general
- scopes are still broken for generic instantiation! - scopes are still broken for generic instantiation!

16
tools/restorecc.nim Normal file
View file

@ -0,0 +1,16 @@
import os, strutils
proc main(dir: string, wanted: string) =
for kind, path in walkDir(dir):
case kind
of pcFile:
let name = extractFilename(path)
if name == wanted:
let newLoc = path.replace("mingw_backup", "mingw")
echo "creating ", newLoc
copyFile(path, newLoc)
of pcDir: main(path, wanted)
else: discard
main("dist/mingw_backup", paramStr(1))

View file

@ -2,13 +2,13 @@
Home Home
==== ====
Welcome to Nimrod Welcome to Nim
----------------- --------------
**Nimrod** is a statically typed, imperative programming language that tries to **Nim** (formerly known as "Nimrod") is a statically typed, imperative
give the programmer ultimate power without compromises on runtime efficiency. programming language that tries to give the programmer ultimate power without
This means it focuses on compile-time mechanisms in all their compromises on runtime efficiency. This means it focuses on compile-time
various forms. mechanisms in all their various forms.
Beneath a nice infix/indentation based syntax with a Beneath a nice infix/indentation based syntax with a
powerful (AST based, hygienic) macro system lies a semantic model that supports powerful (AST based, hygienic) macro system lies a semantic model that supports
@ -18,10 +18,10 @@ shared memory heap is also provided for the increased efficiency that results
from that model. from that model.
Nimrod looks like this: Nim looks like this:
======================= ====================
.. code-block:: nimrod .. code-block:: nim
# compute average line length # compute average line length
var count = 0 var count = 0
var sum = 0 var sum = 0
@ -34,11 +34,11 @@ Nimrod looks like this:
if count > 0: sum / count else: 0 if count > 0: sum / count else: 0
Nimrod is efficient Nim is efficient
=================== ================
* Native code generation (currently via compilation to C), not dependent on a * Native code generation (currently via compilation to C), not dependent on a
virtual machine: **Nimrod produces small executables without dependencies virtual machine: **Nim produces small executables without dependencies
for easy redistribution.** for easy redistribution.**
* A fast **non-tracing** garbage collector that supports soft * A fast **non-tracing** garbage collector that supports soft
real-time systems (like games). real-time systems (like games).
@ -55,11 +55,11 @@ Nimrod is efficient
the stack. the stack.
Nimrod is expressive Nim is expressive
==================== =================
* **The Nimrod compiler and all of the standard library are implemented in * **The Nim compiler and all of the standard library are implemented in
Nimrod.** Nim.**
* Built-in high level datatypes: strings, sets, sequences, etc. * Built-in high level datatypes: strings, sets, sequences, etc.
* Modern type system with local type inference, tuples, variants, * Modern type system with local type inference, tuples, variants,
generics, etc. generics, etc.
@ -69,31 +69,31 @@ Nimrod is expressive
* Macros can modify the abstract syntax tree at compile time. * Macros can modify the abstract syntax tree at compile time.
Nimrod is elegant Nim is elegant
================= ==============
* Macros can use the imperative paradigm to construct parse trees. Nimrod * Macros can use the imperative paradigm to construct parse trees. Nim
does not require a different coding style for meta programming. does not require a different coding style for meta programming.
* Macros cannot change Nimrod's syntax because there is no need for it. * Macros cannot change Nim's syntax because there is no need for it.
Nimrod's syntax is flexible enough. Nim's syntax is flexible enough.
* Statements are grouped by indentation but can span multiple lines. * Statements are grouped by indentation but can span multiple lines.
Indentation must not contain tabulators so the compiler always sees Indentation must not contain tabulators so the compiler always sees
the code the same way as you do. the code the same way as you do.
Nimrod plays nice with others Nim plays nice with others
============================= ==========================
* The Nimrod Compiler runs on Windows, Linux, BSD and Mac OS X. * The Nim Compiler runs on Windows, Linux, BSD and Mac OS X.
Porting to other platforms is easy. Porting to other platforms is easy.
* **The Nimrod Compiler can also generate C++ or Objective C for easier * **The Nim Compiler can also generate C++ or Objective C for easier
interfacing.** interfacing.**
* There are lots of bindings: for example, bindings to GTK2, the Windows API, * There are lots of bindings: for example, bindings to GTK2, the Windows API,
the POSIX API, OpenGL, SDL, Cairo, Python, Lua, TCL, X11, libzip, PCRE, the POSIX API, OpenGL, SDL, Cairo, Python, Lua, TCL, X11, libzip, PCRE,
libcurl, mySQL and SQLite are included in the standard distribution or libcurl, mySQL and SQLite are included in the standard distribution or
can easily be obtained via the can easily be obtained via the
`Babel package manager <https://github.com/nimrod-code/babel>`_. `Babel package manager <https://github.com/nimrod-code/babel>`_.
* A C to Nimrod conversion utility: New bindings to C libraries are easily * A C to Nim conversion utility: New bindings to C libraries are easily
generated by ``c2nim``. generated by ``c2nim``.

View file

@ -3,8 +3,8 @@ News
==== ====
.. ..
2014-06-29 Version 0.9.6 released 2014-10-11 Version 0.10.0 released
================================= ==================================
Changes affecting backwards compatibility Changes affecting backwards compatibility
----------------------------------------- -----------------------------------------
@ -47,6 +47,10 @@ News
found under the `nim-code <https://github.com/nimrod-code>`_ organisation. found under the `nim-code <https://github.com/nimrod-code>`_ organisation.
- Removed the deprecated ``web`` module, the ``httpclient`` module should - Removed the deprecated ``web`` module, the ``httpclient`` module should
be used instead. be used instead.
- Large parts of the stdlib got rid of the T/P type prefixes. Instead most
types now simply start with an uppercased letter. The
so called "partial case sensitivity" is now active allowing code
like ``var foo: Foo``.
- String case (or any non-ordinal case) statements - String case (or any non-ordinal case) statements
without 'else' are deprecated. without 'else' are deprecated.
- Recursive tuple types are not allowed anymore. Use ``object`` instead. - Recursive tuple types are not allowed anymore. Use ``object`` instead.

View file

@ -6,11 +6,12 @@
General General
======= =======
What is Nimrod? What is Nim?
--------------- ------------
Nimrod is a statically typed, imperative programming language that tries to Nim (formerly known as "Nimrod") is a statically typed, imperative programming
give the programmer ultimate power without compromises on runtime efficiency. language that tries to give the programmer ultimate power without compromises
on runtime efficiency.
This means it focuses on compile-time mechanisms in all their This means it focuses on compile-time mechanisms in all their
various forms. Beneath a nice infix/indentation based syntax with a various forms. Beneath a nice infix/indentation based syntax with a
powerful (AST based, hygienic) macro system lies a semantic model that supports powerful (AST based, hygienic) macro system lies a semantic model that supports
@ -23,7 +24,7 @@ from that model.
Why yet another programming language? Why yet another programming language?
------------------------------------- -------------------------------------
Nimrod is one of the very few *programmable* statically typed languages, and Nim is one of the very few *programmable* statically typed languages, and
one of the even fewer that produces native binaries that require no one of the even fewer that produces native binaries that require no
runtime or interpreter. runtime or interpreter.
@ -36,29 +37,29 @@ C++, Python, Lisp, Oberon.
What is Nimrod's take on concurrency? What is Nim's take on concurrency?
------------------------------------- ----------------------------------
Nimrod primarily focusses on thread local (and garbage collected) heaps and Nim primarily focusses on thread local (and garbage collected) heaps and
asynchronous message passing between threads. Each thread has its own GC, so no message passing between threads. Each thread has its own GC, so no
"stop the world" mechanism is necessary. An unsafe shared memory heap is also "stop the world" mechanism is necessary. An unsafe shared memory heap is also
provided. provided.
Future versions will additionally include a GC "per thread group" Future versions will additionally include a GC "per thread group"
and Nimrod's type system will be enhanced to accurately model this shared and Nim's type system will be enhanced to accurately model this shared
memory heap. memory heap.
How is Nimrod licensed? How is Nim licensed?
----------------------- --------------------
The Nimrod compiler and the library are MIT licensed. The Nim compiler and the library are MIT licensed.
This means that you can use any license for your own programs developed with This means that you can use any license for your own programs developed with
Nimrod. Nim.
How stable is Nimrod? How stable is Nim?
--------------------- ------------------
The compiler is in development and some important features are still missing. The compiler is in development and some important features are still missing.
However, the compiler is quite stable already: It is able to compile itself However, the compiler is quite stable already: It is able to compile itself
@ -66,11 +67,11 @@ and a substantial body of other code. Until version 1.0.0 is released,
minor incompatibilities with older versions of the compiler will be introduced. minor incompatibilities with older versions of the compiler will be introduced.
How fast is Nimrod? How fast is Nim?
------------------- ----------------
Benchmarks show it to be comparable to C. Some language features (methods, Benchmarks show it to be comparable to C. Some language features (methods,
closures, message passing) are not yet as optimized as they could and will be. closures, message passing) are not yet as optimized as they could and will be.
The only overhead Nimrod has over C is the GC which has been tuned The only overhead Nim has over C is the GC which has been tuned
for years but still needs some work. for years but still needs some work.
@ -84,7 +85,7 @@ but would require much work.
What about editor support? What about editor support?
-------------------------- --------------------------
- Nimrod IDE: https://github.com/nimrod-code/Aporia - Nim IDE: https://github.com/nimrod-code/Aporia
- Emacs: https://github.com/Tass/nimrod-mode - Emacs: https://github.com/Tass/nimrod-mode
- Vim: https://github.com/zah/nimrod.vim/ - Vim: https://github.com/zah/nimrod.vim/
- Scite: Included - Scite: Included