Difference between revisions of "String"
m |
|||
Line 17: | Line 17: | ||
In this example variable ''i'' is explicitly declared to be of type ''String''. Variable ''p'' is found, via type inference, also to be of type ''String''. | In this example variable ''i'' is explicitly declared to be of type ''String''. Variable ''p'' is found, via type inference, also to be of type ''String''. | ||
+ | |||
+ | ''Since: Version 0.41b'' | ||
== Communication == | == Communication == |
Revision as of 18:27, 13 January 2013
Contents
Syntax
String
Semantics
A string of characters. All strings are immutable, concatenation of strings will in fact create a new string.
Default typing
In the absence of further type information, the following types are added to the chain:
Example
var i:String; var p:="Hello World!";
In this example variable i is explicitly declared to be of type String. Variable p is found, via type inference, also to be of type String.
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.