Scala 2.7.4

Címkék

Egy hete megjelent a Scala programozási nyelv 2.7.4-es kiadása. Egyúttal a Tiobe listán is igen szépen előrelépett, a 2.7.2-es változatkori 50. helyről feljött a 28-ra (ezzel megelőzve például a Prologot is).
Néhány nagyobb/érdekesebb projekt ami Scala-t használ (közel sem teljes, és természetesen szubjektív):

Aki a következő változat tervezett újdonságaira kíváncsi, itt megtekintheti.

Hozzászólások

hat, kivancsi leszek a csutortoki Scalas eloadasra :)
meg a vegen kedvet kapok ;)

hm, elnezve, a JavaONE is telelesz Scala eloadasokkal.. :)

Jól hangzik :)

Ha lesz egy kis időm, akkor beleásom magamat :)

"A fejlesztot azert fizetik, hogy oldja meg a problemat. Ez egy kemeny szakma." - Chain-Q

Erről a Scala-ról van valakinek valami gyakorlati tapasztalata? Mit érdemes/lehet tudni a nyelvről, hova érdemes és hova nem érdemes használni, mennyire támogatott, sebességre milyen, stb.? Ilyesmikről tud valaki mesélni?

----------------
Lvl86 Troll

A topiknyitó által adott linkek valamelyikén találtam példa forráskódot. Meglepően hasonlít a Javara. No most én Javaban sem vagyok igazán jártas, ezért ha valaki magyarul is le tudná írni, hogy mi a lényegi különbség, talán sokunknak segítene vele.
Vagy egy egyszerű kérdés: Mikor használjunk Scalat Java helyett?
--
не закурить! (Ne gyújts rá!) не куриться! (Ne dohányozz! Ne füstölögj!)

Ha Java annotációkat szeretnél készíteni, akkor mindenképp Java (ezt nem tartják elég fontos feladatnak, hisz van rá könnyű kerülőút: készítsd el Java-ban és használd gond nélkül* Scala-ban). Ha szeretnél multi-platform programot készíteni (ahol a két platform: .NET és JVM), akkor Scala (bár ekkor is lehet probléma, hogy a hozzá adott libet leginkább JVM-mel tesztelik, sok funkciónak eddig nem készült el a .NET-es portja).
A legszebb azonban, hogy szabadon variálhatod ezeket egy projekten belül is. Néhány dolgot körülményes leírni Java-ban? Szinte biztos, hogy ott van Scala-ban egy egyszerűbb formalizáció. (Már csak azért is, mert Java-val ellentétben itt van egész jó típus következtetés, így rábízhatod a fordítóra ezt a nem éppen produktív feladatot.) Nem ismered még kellően a Scala-t, szükséged van a lehető legoptimálisabb kódra (primitív típusok garantált használata, később erre ott lesz a @Specialized annotáció)? Ott van a Java.
Egyébként a szerintem a Scala legnagyobb erősségei:

  • minta-illesztés
  • libek
  • szűrés és egyéb műveletek adatokon
  • nagyszerű integráció a Java platformhoz
  • típus következtetés - lehet káros is
  • függvények egyszerű kezelése, változtathatatlan típusok preferálása - funkcionális programozás támogatása
  • operátorok felüldefiniálhatóak, újak hozhatók létre - ezt is lehet túlzásba vinni

A Scala nem tetsző megoldásai:

  • nincs kényszerített kivétel kezelés
  • eclipse alatt a külső xml tagek köré ()-t kell tenni
  • még nincs itt a 2.8.0 :)

Ha olyan kódot szeretnél látni, ami nem hasonlít a Java kódra, akkor tudom ajánlani a Scalaz projektet. Ott általában a maximumot kihozzák a nyelv funkcionális támogatásából. Egyébként a cél az volt, hogy Java/C# irányából is könnyen megközelíthető legyen (a Scala nyelv megalkotója egyben a Java generics kiötlője is), ugyanakkor az xml kezelés és a funkcionális programozás segítése is fontos szempont volt.

* Nem teljesen gond nélkül, nem lehetnek egymásba ágyazott annotációk, de 2.8.0-ra ez is el fog tűnni. Ez főként bonyolultabb EJB-k kezelésénél jelent gyakorlati problémát.

Az egyik legszembeötlőbb különbség, hogy a típusok az azonosítók után vannak, nem pedig előtte. A generikus paramétereket [, ] közé kell tenni, nem pedig < > közé (hiszen utóbbinak az xml kezelésnél van szerepe). További hasznos újdonság a Java-hoz képest, hogy nem csak adat-, de típus-tagok is tartozhatnak az osztályokhoz, támogatott az implementáció öröklődése, a generikus paraméterekhez lehet adni ko- illetve kontra-variancia jelölést. Eléggé sűrű szintaxist követ (amihez hozzájárul a típus információk kikövetkeztetése is, de az implicit konverzió, implicit paraméterek, ... is).

A leglényegesebb különbség azonban, hogy átalakítja a használója gondolkodását. (Ha az SZTE-n szerez diplomát az ember, akkor jó eséllyel a funkcionális programozással kapcsolatos tapasztalatai meglehetősen hiányosak - persze lehet, hogy csak nem választottam megfelelő szakirányú tárgyakat.) Sokkal inkább törekedni fog utána is absztraktabb megoldások használatára, akár Java-ban, vagy C++-ban, C#-ban fejezi ki magát. Feltételezem, hogy hasonló hatása van az Ocaml, F#, Nemerle, Clojure, Haskell, LISP, ... kipróbálásának is.

Ha valaki Java irányából szeretne közelíteni, akkor ez egy jó kiinduló pont lehet.