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
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
on 2010/12/24 00:59
Change comment:
There is no comment for this version
Summary
-
Page properties (1 modified, 0 added, 0 removed)
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 makesit 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 beendesignedwith 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 thenyou will have to create anEclipselaunch 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 mu table ##val## e.g:##NSMutableArray##, ##scala.collection.mutable.ListBuffer##whichyou will have to synchronizethe 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: