Changes for page WebObjects with Scala

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

From version 476.1
edited by Ravi Mendis
on 2010/12/24 00:49
Change comment: There is no comment for this version
To version 479.1
edited by Ravi Mendis
on 2010/12/23 23:54
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,8 +1,8 @@
1 1  === What is Scala? ===
2 2  
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.
3 +[[Scala>>http://en.wikipedia.org/wiki/Scala_(programming_language)]] is a JVM language that is a hybrid of Object-Oriented and Functional styles. Its [[functional language>>http://en.wikipedia.org/wiki/Functional_programming]] foundations and built-in Actors library makes it especially attractive for concurrent computing. In this day and age of multi-core processors concurrent computing can not be ignored.
4 4  
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:
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:
6 6  
7 7  |= |= Objective-C |= Java |= Scala
8 8  |= Immutability | Collections //e.g: NSArray/NSMutableArray// | No | Yes
... ... @@ -20,18 +20,21 @@
20 20  
21 21  === Why Use Scala? ===
22 22  
23 -For WebObjects developers, Scala offers itself as a powerful, safe and easy-to-use solution for [[concurrent computing>>Building Concurrent Applications with WebObjects and Scala]]. (In other words, Scala Actors can be used for problems that would have normally required threads).
23 +Scala can help you to write thread-safe code.
24 +It has concurrency that is built-in to the standard library, primarily via Actors.
24 24  
26 +So for WebObjects developers, Scala offers itself as a powerful, safe and easy-to-use solution for [[concurrent applications>>Building Concurrent Applications with WebObjects and Scala]]. (In other words, Scala Actors can be used for problems that would have normally required threads).
27 +
25 25  === Can WebObjects be Programmed In Scala? ===
26 26  
27 27  Yes. It is very simple.
28 -By virtue of being a JVM-language, Scala compiles to java bytecode.
31 +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. The [[Eclipse Scala plugin>>http://www.scala-ide.org]] has been found to be slow at times and sometimes buggy.
37 +Tool support is 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]] is rather slow and still very buggy.
35 35  
36 36  = WebObjects In Scala =
37 37  
... ... @@ -41,10 +41,9 @@
41 41  
42 42  === Thread-Safe Shared Vars ===
43 43  
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.
47 +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. This is not however true for mutable ##val## e.g: ##NSMutableArray##, ##scala.collection.mutable.ListBuffer##
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 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 {
66 +object Talent extends EOGenericRecord {
65 65   val ENTITY_NAME = "Talent"
66 66  
67 67  {{/code}}
... ... @@ -76,6 +76,8 @@
76 76  
77 77  ==== Compacted imports ====
78 78  
81 +Two lines in Java are compacted into one in Scala.
82 +
79 79  In Java:
80 80  
81 81  {{code value="java"}}
... ... @@ -196,10 +196,16 @@
196 196  
197 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.  Alternatively, you could generate an actual new scala.List instance by calling myNSArray.toList.
198 198  
199 -== How to Add Scala to a WO Project (in Eclipse) ==
203 +== How to Add Scala to a WO Project ==
200 200  
201 201  {{include value="WOL:Adding Scala Support to a WOLips Project"}}{{/include}}
202 202  
207 +{{note}}
208 +
209 +This is for Eclipse/WOLips IDE
210 +
211 +{{/note}}
212 +
203 203  == WO Scala Example ==
204 204  
205 205  The following example is an almost 100% Scala WO app. In reality it is a mixed Java/Scala app:
... ... @@ -215,12 +215,8 @@
215 215  1. [[Install the Scala eclipse IDE>>http://www.scala-ide.org/]]
216 216  1. Right-click on Application.java and run as a WOApplication (as usual).
217 217  
218 -{{note}}
219 -
220 220  Application can be made into a Scala class as well, but then you will have to create a launcher in Eclipse manually.
221 221  
222 -{{/note}}
223 -
224 224  == EO Templates ==
225 225  
226 226  When you create your ##.eogen## file, be sure to make the following changes in the EOGenerator Editor: