blob: 54cb7f4346fe5995fa52cb0029388a863a58c734 [file] [log] [blame]
<!DOCTYPE html >
<html>
<head>
<title>scalar - Ignite Scalar - org.apache.ignite.scalar</title>
<meta name="description" content="scalar - Ignite Scalar - org.apache.ignite.scalar" />
<meta name="keywords" content="scalar Ignite Scalar org.apache.ignite.scalar" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link href="../../../../lib/template.css" media="screen" type="text/css" rel="stylesheet" />
<link href="../../../../lib/diagrams.css" media="screen" type="text/css" rel="stylesheet" id="diagrams-css" />
<script type="text/javascript" src="../../../../lib/jquery.js" id="jquery-js"></script>
<script type="text/javascript" src="../../../../lib/jquery-ui.js"></script>
<script type="text/javascript" src="../../../../lib/template.js"></script>
<script type="text/javascript" src="../../../../lib/tools.tooltip.js"></script>
<script type="text/javascript">
if(top === self) {
var url = '../../../../index.html';
var hash = 'org.apache.ignite.scalar.package';
var anchor = window.location.hash;
var anchor_opt = '';
if (anchor.length >= 1)
anchor_opt = '@' + anchor.substring(1);
window.location.href = url + '#' + hash + anchor_opt;
}
</script>
<link rel='shortcut icon' href='https://ignite.apache.org/favicon.ico'/>
</head>
<body class="value">
<div id="definition">
<img alt="Package" src="../../../../lib/package_big.png" />
<p id="owner"><a href="../../../package.html" class="extype" name="org">org</a>.<a href="../../package.html" class="extype" name="org.apache">apache</a>.<a href="../package.html" class="extype" name="org.apache.ignite">ignite</a></p>
<h1>scalar</h1><span class="permalink">
<a href="../../../../index.html#org.apache.ignite.scalar.package" title="Permalink" target="_top">
<img src="../../../../lib/permalink.png" alt="Permalink" />
</a>
</span>
</div>
<h4 id="signature" class="signature">
<span class="modifier_kind">
<span class="modifier"></span>
<span class="kind">package</span>
</span>
<span class="symbol">
<span class="name">scalar</span>
</span>
</h4>
<div id="comment" class="fullcommenttop"></div>
<div id="mbrsel">
<div id="textfilter"><span class="pre"></span><span class="input"><input id="mbrsel-input" type="text" accesskey="/" /></span><span class="post"></span></div>
<div id="visbl">
<span class="filtertype">Visibility</span>
<ol><li class="public in"><span>Public</span></li><li class="all out"><span>All</span></li></ol>
</div>
</div>
<div id="template">
<div id="allMembers">
<div id="types" class="types members">
<h3>Type Members</h3>
<ol><li name="org.apache.ignite.scalar.ScalarConversions" visbl="pub" data-isabs="true" fullComment="yes" group="Ungrouped">
<a id="ScalarConversionsextendsAnyRef"></a>
<a id="ScalarConversions:ScalarConversions"></a>
<h4 class="signature">
<span class="modifier_kind">
<span class="modifier"></span>
<span class="kind">trait</span>
</span>
<span class="symbol">
<a href="ScalarConversions.html"><span class="name">ScalarConversions</span></a><span class="result"> extends <span class="extype" name="scala.AnyRef">AnyRef</span></span>
</span>
</h4><span class="permalink">
<a href="../../../../index.html#org.apache.ignite.scalar.package@ScalarConversionsextendsAnyRef" title="Permalink" target="_top">
<img src="../../../../lib/permalink.png" alt="Permalink" />
</a>
</span>
<p class="shortcomment cmt">Mixin for <code>scalar</code> object providing <code>implicit</code> and <code>explicit</code> conversions between
Java and Scala Ignite components.</p><div class="fullcomment"><div class="comment cmt"><h4>Overview</h4><p>Mixin for <code>scalar</code> object providing <code>implicit</code> and <code>explicit</code> conversions between
Java and Scala Ignite components.</p><p>It is very important to review this class as it defines what <code>implicit</code> conversions
will take place when using Scalar. Note that object <code>scalar</code> mixes in this
trait and therefore brings with it all implicits into the scope.
</p></div></div>
</li></ol>
</div>
<div id="values" class="values members">
<h3>Value Members</h3>
<ol><li name="org.apache.ignite.scalar.lang" visbl="pub" data-isabs="false" fullComment="no" group="Ungrouped">
<a id="lang"></a>
<a id="lang:lang"></a>
<h4 class="signature">
<span class="modifier_kind">
<span class="modifier"></span>
<span class="kind">package</span>
</span>
<span class="symbol">
<a href="lang/package.html"><span class="name">lang</span></a>
</span>
</h4><span class="permalink">
<a href="../../../../index.html#org.apache.ignite.scalar.package@lang" title="Permalink" target="_top">
<img src="../../../../lib/permalink.png" alt="Permalink" />
</a>
</span>
<p class="shortcomment cmt">Contains Scala side adapters for implicits conversion.</p>
</li><li name="org.apache.ignite.scalar.pimps" visbl="pub" data-isabs="false" fullComment="no" group="Ungrouped">
<a id="pimps"></a>
<a id="pimps:pimps"></a>
<h4 class="signature">
<span class="modifier_kind">
<span class="modifier"></span>
<span class="kind">package</span>
</span>
<span class="symbol">
<a href="pimps/package.html"><span class="name">pimps</span></a>
</span>
</h4><span class="permalink">
<a href="../../../../index.html#org.apache.ignite.scalar.package@pimps" title="Permalink" target="_top">
<img src="../../../../lib/permalink.png" alt="Permalink" />
</a>
</span>
<p class="shortcomment cmt">Contains Scala &quot;Pimp&quot; implementations for main Ignite entities.</p>
</li><li name="org.apache.ignite.scalar.scalar" visbl="pub" data-isabs="false" fullComment="yes" group="Ungrouped">
<a id="scalar"></a>
<a id="scalar:scalar"></a>
<h4 class="signature">
<span class="modifier_kind">
<span class="modifier"></span>
<span class="kind">object</span>
</span>
<span class="symbol">
<a href="scalar$.html"><span class="name">scalar</span></a><span class="result"> extends <a href="ScalarConversions.html" class="extype" name="org.apache.ignite.scalar.ScalarConversions">ScalarConversions</a></span>
</span>
</h4><span class="permalink">
<a href="../../../../index.html#org.apache.ignite.scalar.package@scalar" title="Permalink" target="_top">
<img src="../../../../lib/permalink.png" alt="Permalink" />
</a>
</span>
<p class="shortcomment cmt"></p><div class="fullcomment"><div class="comment cmt"><p></p><pre>________ ______ ______ _______
__ ___/_____________ ____ /______ _________ __/__ \ __ __ \
_____ \ _ ___/_ __ `/__ / _ __ `/__ ___/ ____/ / _ / / /
____/ / / /__ / /_/ / _ / / /_/ / _ / _ __/___/ /_/ /
/____/ \___/ \__,_/ /_/ \__,_/ /_/ /____/_(_)____/</pre><h4>Overview</h4><p><code>scalar</code> is the main object that encapsulates Scalar DSL. It includes global functions
on &quot;scalar&quot; keyword, helper converters as well as necessary implicit conversions. <code>scalar</code> also
mimics many methods in <code>Ignite</code> class from Java side.</p><p>The idea behind Scalar DSL - <b>zero additional logic and only conversions</b> implemented
using Scala &quot;Pimp&quot; pattern. Note that most of the Scalar DSL development happened on Java
side of Ignite 3.0 product line - Java APIs had to be adjusted quite significantly to
support natural adaptation of functional APIs. That basically means that all functional
logic must be available on Java side and Scalar only provides conversions from Scala
language constructs to Java constructs. Note that currently Ignite supports Scala 2.8
and up only.</p><p>This design approach ensures that Java side does not starve and usage paradigm
is mostly the same between Java and Scala - yet with full power of Scala behind.
In other words, Scalar only adds Scala specifics, but not greatly altering semantics
of how Ignite APIs work. Most of the time the code in Scalar can be written in
Java in almost the same number of lines.</p><h4>Suffix '$' In Names</h4><p>Symbol <code>$</code> is used in names when they conflict with the names in the base Java class
that Scala pimp is shadowing or with Java package name that your Scala code is importing.
Instead of giving two different names to the same function we've decided to simply mark
Scala's side method with <code>$</code> suffix.</p><h4>Importing</h4><p>Scalar needs to be imported in a proper way so that necessary objects and implicit
conversions got available in the scope:
<pre name="code" class="scala">
import org.apache.ignite.scalar._
import scalar._
</pre>
This way you import object <code>scalar</code> as well as all methods declared or inherited in that
object as well.</p><h4>Examples</h4><p>Here are few short examples of how Scalar can be used to program routine distributed
task. All examples below use default Ignite configuration and default grid. All these
examples take an implicit advantage of auto-discovery and failover, load balancing and
collision resolution, zero deployment and many other underlying technologies in the
Ignite - while remaining absolutely distilled to the core domain logic.</p><p>This code snippet prints out full topology:
<pre name="code" class="scala">
scalar {
grid$ foreach (n => println("Node: " + n.id8))
}
</pre>
The obligatory example - cloud enabled <code>Hello World!</code>. It splits the phrase
into multiple words and prints each word on a separate grid node:
<pre name="code" class="scala">
scalar {
grid$ *< (SPREAD, (for (w <- "Hello World!".split(" ")) yield () => println(w)))
}
</pre>
This example broadcasts message to all nodes:
<pre name="code" class="scala">
scalar {
grid$ *< (BROADCAST, () => println("Broadcasting!!!"))
}
</pre>
This example &quot;greets&quot; remote nodes only (note usage of Java-side closure):
<pre name="code" class="scala">
scalar {
val me = grid$.localNode.id
grid$.remoteProjection() *< (BROADCAST, F.println("Greetings from: " + me))
}
</pre></p><p>Next example creates a function that calculates lengths of the string
using MapReduce type of processing by splitting the input string into
multiple substrings, calculating each substring length on the remote
node and aggregating results for the final length of the original string:
<pre name="code" class="scala">
def count(msg: String) =
grid$ @< (SPREAD, for (w <- msg.split(" ")) yield () => w.length, (s: Seq[Int]) => s.sum)
</pre>
This example shows a simple example of how Scalar can be used to work with in-memory data grid:
<pre name="code" class="scala">
scalar {
val t = cache$[Symbol, Double]("partitioned")
t += ('symbol -> 2.0)
t -= ('symbol)
}
</pre>
</p></div></div>
</li></ol>
</div>
</div>
<div id="inheritedMembers">
</div>
<div id="groupedMembers">
<div class="group" name="Ungrouped">
<h3>Ungrouped</h3>
</div>
</div>
</div>
<div id="tooltip"></div>
<div id="footer"> </div>
</body>
</html>