Merge branch 'devel' of https://github.com/Araq/Nimrod into devel
Conflicts: compiler/ccgexprs.nim
This commit is contained in:
commit
cf61072cc9
28 changed files with 1125 additions and 389 deletions
|
|
@ -12,6 +12,7 @@ Advanced commands:
|
|||
module dependency graph
|
||||
//dump dump all defined conditionals and search paths
|
||||
//check checks the project for syntax and semantic
|
||||
//pretty homogenizes source code style
|
||||
//idetools compiler support for IDEs: possible options:
|
||||
--track:FILE,LINE,COL track a file/cursor position
|
||||
--trackDirty:DIRTY_FILE,ORIG_FILE,LINE,COL
|
||||
|
|
|
|||
|
|
@ -594,7 +594,8 @@ compiler.
|
|||
|
||||
.. raw:: html
|
||||
|
||||
<div id="officialPkgList"></div>
|
||||
<div id="officialPkgList"><b>If you are reading this you are missing
|
||||
babelpkglist.js or have javascript disabled in your browser.</b></div>
|
||||
|
||||
Unofficial packages
|
||||
-------------------
|
||||
|
|
@ -605,7 +606,8 @@ Nimrod programming language.
|
|||
|
||||
.. raw:: html
|
||||
|
||||
<div id="unofficialPkgList"></div>
|
||||
<div id="unofficialPkgList"><b>If you are reading this you are missing
|
||||
babelpkglist.js or have javascript disabled in your browser.</b></div>
|
||||
|
||||
<script type="text/javascript" src="babelpkglist.js"></script>
|
||||
<script type="text/javascript" src="http://build.nimrod-lang.org/packages?callback=gotPackageList"></script>
|
||||
|
|
|
|||
|
|
@ -1221,38 +1221,8 @@ branch switch ``system.reset`` has to be used.
|
|||
|
||||
Set type
|
||||
--------
|
||||
The set type models the mathematical notion of a set. The set's
|
||||
basetype can only be an ordinal type. The reason is that sets are implemented
|
||||
as high performance bit vectors.
|
||||
|
||||
Sets can be constructed via the set constructor: ``{}`` is the empty set. The
|
||||
empty set is type compatible with any special set type. The constructor
|
||||
can also be used to include elements (and ranges of elements) in the set:
|
||||
|
||||
.. code-block:: nimrod
|
||||
|
||||
{'a'..'z', '0'..'9'} # This constructs a set that contains the
|
||||
# letters from 'a' to 'z' and the digits
|
||||
# from '0' to '9'
|
||||
|
||||
These operations are supported by sets:
|
||||
|
||||
================== ========================================================
|
||||
operation meaning
|
||||
================== ========================================================
|
||||
``A + B`` union of two sets
|
||||
``A * B`` intersection of two sets
|
||||
``A - B`` difference of two sets (A without B's elements)
|
||||
``A == B`` set equality
|
||||
``A <= B`` subset relation (A is subset of B or equal to B)
|
||||
``A < B`` strong subset relation (A is a real subset of B)
|
||||
``e in A`` set membership (A contains element e)
|
||||
``A -+- B`` symmetric set difference (= (A - B) + (B - A))
|
||||
``card(A)`` the cardinality of A (number of elements in A)
|
||||
``incl(A, elem)`` same as A = A + {elem}
|
||||
``excl(A, elem)`` same as A = A - {elem}
|
||||
================== ========================================================
|
||||
|
||||
.. include:: sets_fragment.txt
|
||||
|
||||
Reference and pointer types
|
||||
---------------------------
|
||||
|
|
|
|||
|
|
@ -540,6 +540,58 @@ in C/C++).
|
|||
**Note**: This pragma will not exist for the LLVM backend.
|
||||
|
||||
|
||||
Source code style
|
||||
=================
|
||||
|
||||
Nimrod allows you to `mix freely case and underscores as identifier separators
|
||||
<manual.html#identifiers-keywords>`_, so variables named ``MyPrecioussInt`` and
|
||||
``my_preciouss_int`` are equivalent:
|
||||
|
||||
.. code-block:: Nimrod
|
||||
var MyPrecioussInt = 3
|
||||
# Following line compiles fine!
|
||||
echo my_preciouss_int
|
||||
|
||||
Since this can lead to many variants of the same source code (you can use
|
||||
`nimgrep <nimgrep.html>`_ instead of your typical ``grep`` to ignore style
|
||||
problems) the compiler provides the command ``pretty`` to help unifying the
|
||||
style of source code. Running ``nimrod pretty ugly_test.nim`` with this
|
||||
example will generate a secondary file named ``ugly_test.pretty.nim`` with the
|
||||
following content:
|
||||
|
||||
.. code-block:: Nimrod
|
||||
var MyPrecioussInt = 3
|
||||
# Following line compiles fine!
|
||||
echo MyPrecioussInt
|
||||
|
||||
During execution the ``pretty`` command will also run on Nimrod's standard
|
||||
library, since it doesn't differentiate the standard library as something
|
||||
special, and hence will warn of many *errors* which are out of your hand to
|
||||
fix, creating respective ``.pretty.nim`` files all the way. You can ignore
|
||||
these errors if they don't belong to your source and simply compare your
|
||||
original version to the new pretty one. In fact, running ``pretty`` on our test
|
||||
file will show the following::
|
||||
|
||||
Hint: ugly_test [Processing]
|
||||
ugly_test.nim(1, 4) Error: name should be: myPrecioussInt
|
||||
ugly_test.nim(1, 4) Error: name should be: myPrecioussInt
|
||||
|
||||
At the moment ``pretty`` will homogenize the style of symbols but will leave
|
||||
important changes for you to review. In this case the command is warning that a
|
||||
variable name should not start with a capital letter, which is usually reserved
|
||||
to `object types <tut2.html#objects>`_. To learn about the accepted `camel case
|
||||
style <https://en.wikipedia.org/wiki/Camelcase>`_ read `Coding Guidelines in
|
||||
the Internals of Nimrod Compiler <intern.html#coding-guidelines>`_ or `Coding
|
||||
Guidelines <https://github.com/Araq/Nimrod/wiki/Coding-Guidelines>`_ and `NEP 1
|
||||
: Style Guide for Nimrod Code
|
||||
<https://github.com/Araq/Nimrod/wiki/NEP-1-:-Style-Guide-for-Nimrod-Code>`_
|
||||
from the Nimrod `GitHub wiki<https://github.com/Araq/Nimrod/wiki>`_.
|
||||
|
||||
This command is safe to run because it will never attempt to overwrite your
|
||||
existing sources, but the respective ``.pretty.nim`` files **will** be
|
||||
overwritten without notice.
|
||||
|
||||
|
||||
DynlibOverride
|
||||
==============
|
||||
|
||||
|
|
|
|||
40
doc/sets_fragment.txt
Normal file
40
doc/sets_fragment.txt
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
The set type models the mathematical notion of a set. The set's
|
||||
basetype can only be an ordinal type. The reason is that sets are implemented
|
||||
as high performance bit vectors.
|
||||
|
||||
Sets can be constructed via the set constructor: ``{}`` is the empty set. The
|
||||
empty set is type compatible with any concrete set type. The constructor
|
||||
can also be used to include elements (and ranges of elements):
|
||||
|
||||
.. code-block:: nimrod
|
||||
type
|
||||
TCharSet = set[char]
|
||||
var
|
||||
x: TCharSet
|
||||
x = {'a'..'z', '0'..'9'} # This constructs a set that contains the
|
||||
# letters from 'a' to 'z' and the digits
|
||||
# from '0' to '9'
|
||||
|
||||
These operations are supported by sets:
|
||||
|
||||
================== ========================================================
|
||||
operation meaning
|
||||
================== ========================================================
|
||||
``A + B`` union of two sets
|
||||
``A * B`` intersection of two sets
|
||||
``A - B`` difference of two sets (A without B's elements)
|
||||
``A == B`` set equality
|
||||
``A <= B`` subset relation (A is subset of B or equal to B)
|
||||
``A < B`` strong subset relation (A is a real subset of B)
|
||||
``e in A`` set membership (A contains element e)
|
||||
``e notin A`` A does not contain element e
|
||||
``contains(A, e)`` A contains element e
|
||||
``A -+- B`` symmetric set difference (= (A - B) + (B - A))
|
||||
``card(A)`` the cardinality of A (number of elements in A)
|
||||
``incl(A, elem)`` same as ``A = A + {elem}``
|
||||
``excl(A, elem)`` same as ``A = A - {elem}``
|
||||
================== ========================================================
|
||||
|
||||
Sets are often used to define a type for the *flags* of a procedure. This is
|
||||
a much cleaner (and type safe) solution than just defining integer
|
||||
constants that should be ``or``'ed together.
|
||||
41
doc/tut1.txt
41
doc/tut1.txt
|
|
@ -1117,47 +1117,8 @@ avoid this common programming error.
|
|||
|
||||
Sets
|
||||
----
|
||||
The set type models the mathematical notion of a set. The set's
|
||||
basetype can only be an ordinal type. The reason is that sets are implemented
|
||||
as high performance bit vectors.
|
||||
|
||||
Sets can be constructed via the set constructor: ``{}`` is the empty set. The
|
||||
empty set is type compatible with any concrete set type. The constructor
|
||||
can also be used to include elements (and ranges of elements):
|
||||
|
||||
.. code-block:: nimrod
|
||||
type
|
||||
TCharSet = set[char]
|
||||
var
|
||||
x: TCharSet
|
||||
x = {'a'..'z', '0'..'9'} # This constructs a set that contains the
|
||||
# letters from 'a' to 'z' and the digits
|
||||
# from '0' to '9'
|
||||
|
||||
These operations are supported by sets:
|
||||
|
||||
================== ========================================================
|
||||
operation meaning
|
||||
================== ========================================================
|
||||
``A + B`` union of two sets
|
||||
``A * B`` intersection of two sets
|
||||
``A - B`` difference of two sets (A without B's elements)
|
||||
``A == B`` set equality
|
||||
``A <= B`` subset relation (A is subset of B or equal to B)
|
||||
``A < B`` strong subset relation (A is a real subset of B)
|
||||
``e in A`` set membership (A contains element e)
|
||||
``e notin A`` A does not contain element e
|
||||
``contains(A, e)`` A contains element e
|
||||
``A -+- B`` symmetric set difference (= (A - B) + (B - A))
|
||||
``card(A)`` the cardinality of A (number of elements in A)
|
||||
``incl(A, elem)`` same as ``A = A + {elem}``
|
||||
``excl(A, elem)`` same as ``A = A - {elem}``
|
||||
================== ========================================================
|
||||
|
||||
Sets are often used to define a type for the *flags* of a procedure. This is
|
||||
a much cleaner (and type safe) solution than just defining integer
|
||||
constants that should be ``or``'ed together.
|
||||
|
||||
.. include:: sets_fragment.txt
|
||||
|
||||
Arrays
|
||||
------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue