Difference between revisions of "Int"
m (6 revisions imported) |
|||
| (4 intermediate revisions by the same user not shown) | |||
| Line 5: | Line 5: | ||
== Semantics == | == Semantics == | ||
| − | A single whole, 32 bit, number | + | A single whole, 32 bit, number. This is also the type of integer constants. |
| + | |||
| + | === Default typing === | ||
| + | |||
| + | {{ElementDefaultTypes}} | ||
== Example == | == Example == | ||
| − | var i:Int; | + | function void main() { |
| − | + | var i:Int; | |
| + | var b:=12; | ||
| + | }; | ||
| + | |||
| + | In this example variable ''i'' is explicitly declared to be of type ''Int''. On line 2, variable ''b'' is declared and via type inference will also be of type ''Int''. | ||
| − | + | ''Since: Version 0.41b'' | |
== Communication == | == Communication == | ||
Latest revision as of 15:44, 15 April 2019
Contents
Syntax
Int
Semantics
A single whole, 32 bit, number. This is also the type of integer constants.
Default typing
In the absence of further type information, the following types are added to the chain:
Example
function void main() {
var i:Int;
var b:=12;
};
In this example variable i is explicitly declared to be of type Int. On line 2, variable b is declared and via type inference will also be of type Int.
Since: Version 0.41b
Communication
When a variable is assigned to another, depending on where each variable is allocated to, there may be communication required to achieve this assignment. Table \ref{tab:eltypecomm} details the communication rules in the assignment \emph{assignmed variable := assigning variable}. If the communication is issued from MPMD programming style then this will be one sided. The default communication listed here is guaranteed to be safe, which may result in a small performance hit.
| Assigned Variable | Assigning Variable | Semantics |
|---|---|---|
| multiple[] | multiple[] | local assignment |
| single[on[i]] | multiple[] | individual processes write values to process i |
| multiple[] | single[on[i]] | individual processes read values from process i |
| single[on[i]] | single[on[i]] | local assignment where i==i |
| single[on[i]] | single[on[j]] | communication from j to i where i!=j |
Communication Example
var a:Int;
var b:Int :: allocated[single[on[2]]];
var p;
par p from 0 to 3 {
if (p==2) b:=p;
a:=b;
sync;
};
This code will result in each process reading the value of b from process 2 and then writing this into a. As already noted, in absence of allocation information the default of allocating to all processes is used. In this example the variable a can be assumed to additionally have the type allocated[multiple]. Note that communication groups are the same as multiple in this context and share the same semantics. All variables marked multiple are private to their containing process.