Scala

Η Scala είναι μια γλώσσα προγραμματισμού πολλαπλών παραδειγμάτων που σχεδιάστηκε για να ενσωματώσει χαρακτηριστικά του αντικειμενοστρεφούς προγραμματισμού και του συναρτησιακού προγραμματισμού. Το όνομα Scala προέρχεται από την αγγλική φράση "scalable language", που δηλώνει ότι έχει σχεδιαστεί για να μπορεί να μεγαλώνει παράλληλα με τις ανάγκες των χρηστών της.

Πλατφόρμες και άδεια

Η Scala εκτελείται στην εικονική μηχανή της πλατφόρμας της Java και είναι συμβατή με τα υπάρχοντα προγράμμα σε Java. Μπορεί επίσης να εκτελείται σε Java Platform, Micro Edition Connected Limited Device Configuration. Υπάρχει μια εναλλακτική υλοποίηση για την πλατφόρμα .NET, αλλά δεν αναπτύσσεται ενεργά.
Η Scala έχει το ίδιο μοντέλο μεταγλώττισης με τη Java και τη C# (ξεχωριστή μεταγλώττιση, δυναμική φόρτωση κλάσεων), επομένως ο κώδικας σε Scala μπορεί να καλεί βιβλιοθήκες της Java (ή βιβλιοθήκες της πλατφόρμας .NET στην υλοποίηση για .NET).
Τα λειτουργικά χαρακτηριστικά της Scala είναι ίδια με αυτά της Java. ο μεταγλωττιστής της Scala παράγει κώδικα byte (byte code) που είναι σχεδόν ίδιος με αυτόν του μεταγλωττιστή της Java. Στην πραγματικότητα, είναι δυνατόν να απο-μεταγλωττιστεί (decompile) ο κώδικας της Scala σε ευανάγνωστο κώδικα της Java, με την εξαίρεση κάποιων λειτουργιών κατασκευαστών. Όσον αφορά την εικονική μηχανή (JVM), δε γίνεται κάποια διάκριση μεταξύ κώδικα Scala και κώδικα Java. Η μόνη διαφορά είναι μια επιπλέον βιβλιοθήκη χρόνου εκτέλεσης, η scala-library.jar.
Η διανομή λογισμικού της Scala, που περιέχει το μεταγλωττιστή και τις βιβλιοθήκες, διανέμεται κάτω από την άδεια λογισμικού BSD.

Ιστορία

Η σχεδίαση της Scala άρχισε το 2001 στο École Polytechnique Fédérale de Lausanne (EPFL) από τον Martin Odersky, σαν συνέχεια δουλειάς πάνω στη Funnel, μια γλώσσα προγραμματισμού που συνδύαζε ιδέες από το συναρτησιακό προγραμματισμό και τα δίκτυα Petri (Petri nets). Ο Odersky είχε πιο πριν εργαστεί στην Generic Java και στον javac, τον μεταγλωττιστή της Sun για τη Java. Η Scala κυκλοφόρησε στην περίοδο τέλος του 2003 - αρχές του 2004  στην πλατφόρμα της Java, και τον Ιούνιο του 2004 στην πλατφόρμα .NET. Μια δεύτερη έκδοση της γλώσσας, η v2.0, κυκλοφόρησε το Μάρτιο του 2006.

Αντικειμενοστρεφή χαρακτηριστικά

Η Scala είναι μια αμιγώς αντικειμενοστρεφής γλώσσα, δηλαδή κάθε τιμή είναι ένα αντικείμενο. Οι τύποι των δεδομένων και οι συμπεριφορές των αντικειμένων περιγράφονται από κλάσεις και traits. Οι αφαιρέσεις κλάσεων μπορούν να επεκταθούν με υποκλάσεις και μέσω ενός ευέλικτου μηχανισμού σύνθεσης βασισμένου στα mixins, για να αποφεύγονται τα προβλήματα της πολλαπλής κληρονομικότητας.

Συναρτησιακός προγραμματισμός

Η Scala επίσης υποστηρίζει το συναρτησιακό προγραμματισμό. Η γλώσσα παρέχει μια ελαφρή σύνταξη για τον ορισμό ανώνυμων συναρτήσεων, υποστηρίζει συναρτήσεις ανώτερης τάξης, επιτρέπει την ένθεση συναρτήσεων και υποστηρίζει το currying (μερική εφαρμογή συναρτήσεων σε λιγότερα ορίσματα από αυτά που δέχονται). Η χρήση της δεσμευμένης λέξης "lazy" μεταθέτει την αρχικοποίηση μιας μεταβλητής μέχρι το χρόνο χρήσης της. 
Ακολουθεί μια υλοποίηση του αλγόριθμου ταξινόμησης Quicksort σε συναρτησιακό στυλ, για σύγκριση με τον αντίστοιχο της Erlang:
def qsort: List[Int] => List[Int] = {
  case Nil => Nil
  case pivot :: tail =>
    val (smaller, rest) = tail.partition(_ < pivot)
    qsort(smaller) ::: pivot :: qsort(rest)}

Λογισμικό που χρησιμοποιεί Scala

Το Lift είναι ελεύθερο λογισμικό για εφαρμογές web με παρόμοιους στόχους με το Ruby on Rails. Η χρήση της Scala συνεπάγεται ότι στην εκτέλεση εφαρμογών σε Lift μπορεί να χρησιμοποιηθεί κάθε υπάρχουσα βιβλιοθήκη ή Web container της Java.
Τον Απρίλιο του 2009 το Twitter ανακοίνωσε ότι μετέφεραν μεγάλα τμήματα του πίσω κώδικά τους από Ruby σε Scala με σκοπό να συνεχίσουν αυτήν τη μετατροπή και στον υπόλοιπο κώδικά τους. Επιπλέον, η Wattzon δήλωσε δημόσια ότι ολόκληρη η πλατφόρμα της γράφτηκε πάλι από την αρχή σε Scala.
Το Foursquare χρησιμοποιεί τη Scala και το Lift.

Παράδειγμα "Hello world"

Ακολουθεί το κλασικό παράδειγμα ενός προγράμματος που εμφανίζει τη φράση "Hello world" σε Scala:
 object HelloWorld extends Application {
   println("Hello, world!")
 }
ή
 object HelloWorld {
   def main(args: Array[String]) {
     println("Hello, world!")
   }
 }
Το πρόγραμμα μοιάζει αρκετά με τον αντίστοιχο της Java με τη διαφορά ότι τίποτα δε δηλώνεται στατικό αλλά χρησιμοποιείται το Singleton pattern που δηλώνεται από τη δεσμευμένη λέξη object.
Θεωρώντας ότι το πρόγραμμα αποθηκεύτηκε σαν ένα αρχείο με το όνομα HelloWorld.scala, μπορεί να μεταγλωττιστεί με την εξής εντολή από τη γραμμή εντολών:
> scalac HelloWorld.scala
Για να εκτελεστεί χρειάζεται η εξής εντολή:
> scala -classpath . HelloWorld
Η παραπάνω διαδικασία είναι ανάλογη με τη διαδικασί α που ακολουθείται για τη μεταγλώττιση και εκτέλεση του ίδιου προγράμματος σε Java. Το μοντέλο μεταγλώττισης και εκτέλεσης της Scala είναι ταυτόσημο με αυτό της Java, με αποτέλεσμα να υπάρχει συμβατότητα με τα εργαλεία ανάπτυξης και μεταγλώττσιης της Java όπως το Ant.
Επίσης το ίδιο πρόγραμμα μπορεί να πληκτρολογηθεί κατευθείαν στο διερμηνέα της Scala, με την επιλογή -i (για να φορτώσει τον κώδικα από το αρχείο) και την επιλογή -e (για να εκτελέσει τον επιπλέον κώδικα που χρειάζεται για να κληθεί η μέθοδος του αντικειμένου του HelloWorld):
> scala -i HelloWorld.scala -e 'HelloWorld.main(null)'