Changes for page WebObjects with Scala

Last modified by Ravi Mendis on 2011/05/10 02:10

From version 494.1
edited by Ravi Mendis
on 2010/12/24 00:25
Change comment: There is no comment for this version
To version 497.1
edited by Ravi Mendis
on 2010/12/24 00:59
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,15 +1,15 @@
1 1  === What is Scala? ===
2 2  
3 -[[Scala>>http://en.wikipedia.org/wiki/Scala_(programming_language)]] is a modern, multi-paradigm JVM language that is most often compared to [[Groovy>>http://en.wikipedia.org/wiki/Groovy_(programming_language)]], [[Clojure>>http://en.wikipedia.org/wiki/Clojure]] or [[Erlang>>http://en.wikipedia.org/wiki/Erlang_(programming_language)]]. Its [[functional language>>http://en.wikipedia.org/wiki/Functional_programming]] foundations and built-in Actors library makes it especially attractive for concurrent computing. Scala is an abbreviation for "scalable" hinting at its design goals. In this day and age of multi-core processors concurrent computing can not be ignored.
3 +[[Scala>>http://www.scala-lang.org/]] is a modern, multi-paradigm JVM language that is most often compared to [[Groovy>>http://en.wikipedia.org/wiki/Groovy_(programming_language)]], [[Clojure>>http://en.wikipedia.org/wiki/Clojure]] or [[Erlang>>http://en.wikipedia.org/wiki/Erlang_(programming_language)]]. Its [[functional language>>http://en.wikipedia.org/wiki/Functional_programming]] foundations and built-in Actors library make it especially attractive for concurrent computing. (Scala is an abbreviation for "scalable" hinting at its design goals). In this day and age of multi-core processors concurrent computing can not be ignored.
4 4  
5 -Many of Scala's features have been designed with concurrency in mind, some of which may not be unfamiliar to Objective-C or WebObjects developers. Here's a summary:
5 +Many of the design features of Scala have been chosen with concurrency in mind, some of which may not be unfamiliar to Objective-C or WebObjects developers. Here's a summary:
6 6  
7 7  |= |= Objective-C |= Java |= Scala
8 -|= Immutability | Collections //e.g: NSArray/NSMutableArray// | No | Yes
9 -|= Closures | Blocks (//Extension//) | No | Anonymous Functions
8 +|= Immutability | Partial - via Collections //e.g: NSArray/NSMutableArray// | No | Yes
9 +|= Closures | Yes - via Blocks (//Extension//) | No | Yes - via Anonymous Functions
10 10  |= Static variables | Yes | Yes | No
11 11  |= Static methods or functions | Yes | Yes | No
12 -|= Concurrency | [[Grand Central Dispatch>>http://en.wikipedia.org/wiki/Grand_Central_Dispatch]] (//Extension//) | //Threads// | [[Actors>>http://en.wikipedia.org/wiki/Actor_model]]
12 +|= Concurrency | Yes - via [[Grand Central Dispatch>>http://en.wikipedia.org/wiki/Grand_Central_Dispatch]] (//Extension//) | //Yes - via Threads// | Yes - via [[Actors>>http://en.wikipedia.org/wiki/Actor_model]]
13 13  |= |= Weakly Typed |= --Strongly Typed-- |= Strongly Typed
14 14  
15 15  Other notable features include:
... ... @@ -25,13 +25,13 @@
25 25  === Can WebObjects be Programmed In Scala? ===
26 26  
27 27  Yes. It is very simple.
28 -Scala compiles to java bytecode.
28 +By virtue of being a JVM-language, Scala compiles to java bytecode.
29 29  
30 30  Furthermore, being a multi-paradigm language grants Scala easy WebObjects-interoperability.
31 31  
32 32  ===== Caveats =====
33 33  
34 -Legacy tool support is often cited as a weak point. If your Application class is in Scala then you will have to create an Eclipse launch configuration manually. Also the [[Scala plugin>>http://www.scala-ide.org]] can be slow at times and sometimes buggy.
34 +Legacy tool support is often cited as a weak point. The [[Eclipse Scala plugin>>http://www.scala-ide.org]] has been found to be slow at times and sometimes buggy.
35 35  
36 36  = WebObjects In Scala =
37 37  
... ... @@ -44,7 +44,7 @@
44 44  Scala doesn't have static variables or methods. Instead Scala employs the [[Singleton Pattern>>http://en.wikipedia.org/wiki/Singleton_pattern]] which is built into the language and is **thread-safe**: a class can have a //Companion Object// that will allow you to achieve something equivalent to static variables - but better.
45 45  
46 46  You don't have to worry about synchronizing access to shared mutable fields in a concurrent application.
47 -This is not however true for mutable ##val## e.g: ##NSMutableArray##, ##scala.collection.mutable.ListBuffer## which you will have to synchronize the adding to or removing from.
47 +(This is not however true when for example you have a ##val## declared as a ##NSMutableArray##. You will still have to synchronize when adding to or removing from this mutable field).
48 48  
49 49  The following is an example of the use of a //Companion Object// for Talent in Scala instead of Talent static fields in Java.
50 50  
... ... @@ -61,7 +61,7 @@
61 61  
62 62  {{code}}
63 63  
64 -object Talent extends EOGenericRecord {
64 +object Talent {
65 65   val ENTITY_NAME = "Talent"
66 66  
67 67  {{/code}}
... ... @@ -76,8 +76,6 @@
76 76  
77 77  ==== Compacted imports ====
78 78  
79 -Two lines in Java are compacted into one in Scala.
80 -
81 81  In Java:
82 82  
83 83  {{code value="java"}}
... ... @@ -196,18 +196,12 @@
196 196  
197 197  {{/code}}
198 198  
199 -After that, you may access the typical Scala collection methods directly on NSArray.  This employs a feature of Scala known as implicit conversions to automagically cast a NSArray (a Java Iterable) into a Scala Iterable while leaving the actual object unchanged.  Alternatively, you could generate an actual new scala.List instance by calling myNSArray.toList.
197 +After that, you may access the typical Scala collection methods directly on NSArray.  This employs a feature of Scala known as implicit conversions to automagically cast a NSArray (a Java Iterable) into a Scala Iterable while leaving the actual object unchanged.
200 200  
201 -== How to Add Scala to a WO Project ==
199 +== How to Add Scala to a WO Project (in Eclipse) ==
202 202  
203 203  {{include value="WOL:Adding Scala Support to a WOLips Project"}}{{/include}}
204 204  
205 -{{note}}
206 -
207 -This is for Eclipse/WOLips IDE
208 -
209 -{{/note}}
210 -
211 211  == WO Scala Example ==
212 212  
213 213  The following example is an almost 100% Scala WO app. In reality it is a mixed Java/Scala app: