| <!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 "Pimp" 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 "scalar" 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 "Pimp" 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 "greets" 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> |