Μετάβαση στο περιεχόμενο

Scala

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια

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

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

[Επεξεργασία | επεξεργασία κώδικα]

Η Scala εκτελείται στην εικονική μηχανή της πλατφόρμας της Java και είναι συμβατή με τα υπάρχοντα προγράμμα σε Java. Μπορεί επίσης να εκτελείται σε Java Platform, Micro Edition Connected Limited Device Configuration[2]. Υπάρχει μια εναλλακτική υλοποίηση για την πλατφόρμα .NET, αλλά δεν αναπτύσσεται ενεργά.[3].

Η Scala έχει το ίδιο μοντέλο μεταγλώττισης με τη Java και τη C# (ξεχωριστή μεταγλώττιση, δυναμική φόρτωση κλάσεων), επομένως ο κώδικας σε Scala μπορεί να καλεί βιβλιοθήκες της Java (ή βιβλιοθήκες της πλατφόρμας .NET στην υλοποίηση για .NET).

Τα λειτουργικά χαρακτηριστικά της Scala είναι ίδια με αυτά της Java. ο μεταγλωττιστής της Scala παράγει κώδικα byte (byte code) που είναι σχεδόν ίδιος με αυτόν του μεταγλωττιστή της Java. Στην πραγματικότητα, είναι δυνατόν να απο-μεταγλωττιστεί (decompile) ο κώδικας της Scala σε ευανάγνωστο κώδικα της Java, με την εξαίρεση κάποιων λειτουργιών κατασκευαστών. Όσον αφορά την εικονική μηχανή (JVM), δε γίνεται κάποια διάκριση μεταξύ κώδικα Scala και κώδικα Java. Η μόνη διαφορά είναι μια επιπλέον βιβλιοθήκη χρόνου εκτέλεσης, η scala-library.jar[4].

Η διανομή λογισμικού της Scala, που περιέχει το μεταγλωττιστή και τις βιβλιοθήκες, διανέμεται κάτω από την άδεια λογισμικού BSD[5].

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

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

[Επεξεργασία | επεξεργασία κώδικα]

Η 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 έχει ένα εκφραστικό στατικό σύστημα τύπων που επιβάλλει την ασφαλή και συνεπή χρήση των αφαιρέσεων. Το σύστημα τύπων υποστηρίζει:

  • γενικές κλάσεις (generic classes),
  • variance annotations,
  • άνω και κάτω όρια τύπων,
  • τοπική εξαγωγή τύπων,
  • κλάσεις και αφηρημένους τύπους σαν μέλη αντικειμένων,
  • σύνθετους τύπους (compound types),
  • ρητά τυποποιημένες αυτοαναφορές,
  • views, και
  • πολυμορφικές μεθόδους.

Η σχεδίαση της Scala αναγνωρίζει το γεγονός ότι, στην πράξη, η ανάπτυξη εφαρμογών εξειδικευμένων σε κάποιο πεδίο συνήθως απαιτεί επεκτάσεις σχετικά με αυτό το πεδίο στη γλώσσα (domain-specific language extensions). Η Scala παρέχει ένα μοναδικό συνδυασμό μηχανισμών στη γλώσσα που διευκολύνουν την προσθήκη στη γλώσσα μέσω βιβλιοθηκών:

  • κάθε μέθοδος μπορεί να χρησιμοποιηθεί σαν ενθεματικός ή προθεματικός τελεστής, και
  • τα κλεισίματα κατασκευάζονται αυτόματα ανάλογα με τον τύπο που απαιτείται (target typing).

Η συνδυασμένη χρήση αυτών των δύο χαρακτηριστικών διευκολύνει τον ορισμό νέων εντολών χωρίς να πρέπει να επεκταθεί η σύνταξη της γλώσσας και χωρίς τη χρήση τεχνικών μακρο-προγραμματισμού ή μετα-προγραμματισμού.

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

[Επεξεργασία | επεξεργασία κώδικα]

Το Lift είναι ελεύθερο λογισμικό για εφαρμογές διαδικτύου (web-apps) με παρόμοιους στόχους με το Ruby on Rails. Η χρήση της Scala συνεπάγεται ότι στην εκτέλεση εφαρμογών σε Lift μπορεί να χρησιμοποιηθεί κάθε υπάρχουσα βιβλιοθήκη ή Web container της Java.

Τον Απρίλιο του 2009 το Twitter ανακοίνωσε ότι μετέφεραν μεγάλα τμήματα του πίσω κώδικά τους από Ruby σε Scala με σκοπό να συνεχίσουν αυτήν τη μετατροπή και στον υπόλοιπο κώδικά τους[8]. Επιπλέον, η Wattzon δήλωσε δημόσια ότι ολόκληρη η πλατφόρμα της γράφτηκε πάλι από την αρχή σε Scala.[9].

Το 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)'

Δοκιμή λογισμικού

[Επεξεργασία | επεξεργασία κώδικα]

Υπάρχουν αρκετοί τρόποι να ελέγξει κανείς κώδικα σε Scala:

  • ScalaTest
  • ScalaCheck, μια βιβλιοθήκη που μοιάζει με τη βιβλιοθήκη QuickCheck της Haskell
  • specs, μια βιβλιοθήκη ανάπτυξης καθοδηγούμενης από τη συμπεριφορά, για Scala
  • JUnit
  1. 1,0 1,1 1,2 Martin Odersky et al., An Overview of the Scala Programming Language, 2nd Edition
  2. «Scala on .NET». Programming Methods Laboratory of EPFL. 7 Ιανουαρίου 2008. Αρχειοθετήθηκε από το πρωτότυπο στις 9 Οκτωβρίου 2007. Ανακτήθηκε στις 15 Ιανουαρίου 2008. Scala is primarily developed for the JVM and embodies some of its features. Nevertheless, its .NET support is designed to make it as portable across the two platforms as possible. 
  3. http://www.artima.com/weblogs/viewpost.jsp?thread=163733
  4. «Αρχειοθετημένο αντίγραφο». Αρχειοθετήθηκε από το πρωτότυπο στις 31 Αυγούστου 2010. Ανακτήθηκε στις 24 Σεπτεμβρίου 2019. 
  5. http://www.scala-lang.org/node/146
  6. 6,0 6,1 6,2 Martin Odersky, "A Brief History of Scala", Artima.com weblogs, June 9, 2006
  7. Martin Odersky, "The Scala Language Specification Version 2.7"
  8. Greene, Kate (1 Απριλίου 2009). «The Secret Behind Twitter's Growth, How a new Web programming language is helping the company handle its increasing popularity». Technology Review. MIT. Αρχειοθετήθηκε από το πρωτότυπο στις 17 Απριλίου 2012. Ανακτήθηκε στις 6 Απριλίου 2009. 
  9. Cloud, Jeremy (10 Μαρτίου 2009). «Scala + WattzOn, sitting in a tree...». 

Επιπλέον πηγές για διάβασμα

[Επεξεργασία | επεξεργασία κώδικα]

Εξωτερικοί σύνδεσμοι

[Επεξεργασία | επεξεργασία κώδικα]