documentation updates
This commit is contained in:
parent
8b93e4132c
commit
5272213da4
7 changed files with 99 additions and 59 deletions
|
|
@ -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!
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
2
todo.txt
2
todo.txt
|
|
@ -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
16
tools/restorecc.nim
Normal 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))
|
||||||
|
|
@ -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``.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue