Scala (programspråk)

Scala
Paradigmmulti-paradigm: funktionell, objektorienterad, imperativ
Gavs ut2003
Skapat avMartin Odersky vid Tekniska högskolan i Lausanne
UtvecklareProgramming Methods Laboratory of EPFL
Senaste version3.3.1 (9 september 2023[1])
Datatypsdisciplinstatic, strong, inferred, structural
Influerat avJava, Pizza,[2] Haskell, Erlang, Standard ML, Objective Caml, Smalltalk, Scheme
InflueratFantom, Ceylon
PlattformJVM, CLR
LicensBSD
Webbplatswww.scala-lang.org

Scala är ett programspråk som förenar funktionell programmering med objektorientering. Namnet anspelar på att skala, i betydelsen att språket är avsett att kunna växa med användarnas behov.

Programmen kompileras till bytekod som exekveras på Javas virtuella maskin. Ett Scalaprogram kan därför anropa Javabibliotek, vilket gör det möjligt att gradvis övergå från Java till Scala. Det är också med smärre begränsningar möjligt för Javaprogram att använda Scalaklasser. Interoperabiliteten gör att Scalas bytekod kan dekompileras så att den blir läsbar Javakod, med undantag för några konstruktoroperationer, och att Scalakoden kör ett eller flera extra runtime-bibliotek till exempel scala-library.jar.

Utvecklingen av Scala påbörjades av Martin Odersky 2001, och språket släpptes 2003 eller tidigt 2004 på Javaplattformen. En version för .NET-plattformen släpptes 2004, men den har inte uppdaterats. Version 2.0 släpptes mars 2006.

Det som utmärker Scala är:

  • Öppen källkod - kompilatorer och bibliotek är släppta under BSD-licens.
  • Rent objektorienterat språk - varje värde är ett objekt och varje datatyp en klass. Språket innefattar arv.
  • Traits och object composition ökar möjligheterna att återanvända kod. På så sätt kan man kompensera för att den underliggande JVM-plattformen saknar multipelt arv.
  • Funktionell programmering - innefattande anonyma funktioner, högre ordningens funktioner (där funktioner kan vara argument och/eller resultat), closures, currying
  • Ett kraftfullt typsystem, med statisk och stark typning, samt typ-inferens
  • Mönsterigenkänning (Pattern matching)
  • Överlagrade operatorer
  • Fullt stöd för XML i Scala-koden
  • Lift - ett kraftfullt webbapplikationsramverk. På samma sätt som att Ruby on Rails-applikationer är skrivna i språket Ruby, så är Lift-applikationer skrivna i Scala.
  • Ett actors-bibliotek som liknar det i det funktionella språket Erlang
  • Prestanda som ofta står sig väl i jämförelse med Java

Scala lämpar sig dessutom väl för att skapa domänspecifika språk (DSL). De vanligaste datastrukturerna är oföränderliga (immutable) vilket är en fördel för flertrådiga program.

Kodexempel

Ett program som skriver ut "Hello, world!",

object halsning {
 def main(args: Array[String]) {
  println("Hello, world!")
 }
}

Noter

  1. ^ ”Scala 3.3.1 LTS”. 9 september 2023. https://www.scala-lang.org/download/3.3.1.html. Läst 9 september 2023. 
  2. ^ Martin Odersky et al., An Overview of the Scala Programming Language, 2nd Edition

Externa länkar

  • Den officiella webben för Scala
  • En mycket bra jämförelse mellan hur man gör i Scala jämfört med Java
  • Ted Newards artiklar om Scala på IBM developerWorks
  • Den officiella aggregeringen av bloggar om Scala

Böcker om Scala

  • Suereth, Joshua D. (Spring, 2011). Scala in Depth. Manning Publications. sid. 225. ISBN 9781935182702. http://www.manning.com/suereth/ 
  • Meredith, Gregory (?, 2011), Monadic Design Patterns for the Web (1st), ?, s. 300, http://github.com/leithaus/XTrace/blob/monadic/src/main/book/content/monadic.pdf 
  • Raychaudhuri, Nilanjan (Spring 2010), Scala in Action (1st), Manning Publications, s. 525, ISBN 9781935182757, http://www.manning.com/raychaudhuri/ 
  • Wampler, Dean; Payne, Alex (September 15, 2009), Programming Scala: Scalability = Functional Programming + Objects (1st), O'Reilly Media, s. 448, ISBN 0596155956, http://oreilly.com/catalog/9780596155957/ 
  • Odersky, Martin; Spoon, Lex; Venners, Bill (November 26, 2008), Programming in Scala: A Comprehensive Step-by-step Guide (1st), Artima Inc, s. 776, ISBN 0981531601, http://www.artima.com/shop/programming_in_scala 
  • Pollak, David (May 25, 2009), Beginning Scala (1st), Apress, s. 776, ISBN 1430219890, arkiverad från ursprungsadressen den december 5, 2010, https://web.archive.org/web/20101205162853/http://apress.com/book/view/9781430219897 
  • Perrett, Tim (April 2010), Lift in Action (1st), Manning Publications, s. 450, ISBN 9781935182801, http://www.manning.com/perrett/ 
  • Loverdos, Christos; Syropoulos, Apostolos (September 2010), Steps in Scala: An Introduction to Object-Functional Programming (1st), Cambridge University Press, s. xviii + 485, ISBN 9780521747585, http://www.cambridge.org/gb/knowledge/isbn/item2713441/?site_locale=en_GB 
  • Subramaniam, Venkat (July 28, 2009), Programming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine (1st), Pragmatic Bookshelf, s. 250, ISBN 193435631X, arkiverad från ursprungsadressen den december 19, 2010, https://web.archive.org/web/20101219213320/http://pragprog.com/titles/vsscala/programming-scala, läst januari 13, 2011 
  • Payne, Alex; Wampler, Dean (2009), Programming Scala, Sebastopol, CA: O'Reilly Media, Inc, ISBN 0-596-15595-6, http://programming-scala.labs.oreilly.com/ 
  • Kullberg, Olle; Klang, Viktor; Lundberg, Örjan (2011), Ett första steg i Scala, Stockholm, Sweden: Studentlitteratur AB, ISBN 9789144068084, http://www.studentlitteratur.se/o.o.i.s?id=2474&artnr=33847-01&csid=66&mp=4918 
  • Odersky, Martin; Spoon, Lex; Venners, Bill (December 8, 2010), Programming in Scala: A Comprehensive Step-by-step Guide (2nd), Artima Inc, s. 852, ISBN 0981531601, http://www.artima.com/shop/programming_in_scala 
  • Haller, Philipp; Sommers, Frank (2011), Actors in Scala, Walnut Creek, California: Artima Inc, ISBN 9780981531656, http://www.artima.com/shop/actors_in_scala