( aborg | 2012. 05. 04., p – 12:24 )

A rosszhoz:

  • automatikus ; posztfix operátorokkal (pointfree zero-arg method call)
  • némely projekt túlzásba viszi a szimbolikus neveket, a DSL-ek néha kompromisszumokra kényszerülnek
  • kezdők gyakran felejtik el, hogy ha egy metódus :-ra végződik, akkor a következő kifejezésen hívódik meg az előzővel paraméterként, nem pedig az előzőn a következővel paraméterként
  • az impliciteket szintén túlzásba szokták néha vinni
  • elég lassú a fordítási sebesség (de egy Turing-teljes típusrendszernél ez sajnos velejárhat, illetve folyamatosan igyekeznek ezen javítani)
  • a tömbök kissé mostoha gyerekek
  • XML kezelés a nyelven belül - ezt talán sikerül majd kiszervezniük
  • a _ elég sok mindent jelent
  • hiányzó syntactic sugar a type projection-re
  • a Java interface -a láthatósági szabályok miatt- nem feltétlen az, amit a Scala definíció alapján elvárhat a programozó, ez lehet biztonsági probléma
  • vacak (na jó más) enum kezelés, ez remélem a makrókkal változhat

Ami a te rossz részedet illeti:

  • a libek szerintem egész jól megalkotottak, ha inkább a Java-s/guavas collectionöket szeretnéd használni megteheted, bár szerintem nem érdemes (esetleg érdekelhet a Mirah programozási nyelv...)
  • forrás szintű kompatibilitásra valamelyest figyelnek a 2.x szomszédos verziói között, de kétségtelen, hogy ha szükséges akkor változtatnak (leggyakrabban az experimental részeken, illetve elavulási (deprecation) időszakkal); bináris kompatíbilitás pedig már jelen van a 2.9.x óta az egyes változatokban, bár kétségtelen, hogy a hivatalos builden -egy JVM váltás miatt a build szerveren- előfordulhat serialization probléma ezek között is.

A jó:

  • pattern matching
  • continuations
  • funkcionális programozás lehetősége (funkcionális adatszerkezetek, for comprehensions, magasabb rendű függvények, ...)
  • objektum orientált programozás lehetősége (kiegészítve a sealed opcióval)
  • egyszerűbb párhuzamos programozási API (az aktor model nekem tetszik)
  • helyes és fejlett típusrendszer (nincsenek ClassCastException-ök futtatáskor, hacsak nem castoltál, Java-ra ez nem igaz)
  • type inference
  • traits, objects
  • nagyon finom láthatósági opciók
  • nagyszerű nyílt forrású projektek

IDE: Nem tudom, hogy melyiket használod, de talán segít ha leírom a tapasztalatomat az eclipse-szel és az IDEA-val:
eclipse (3.7, ScalaIDE 2.0; mavennel akadhatnak kisebb gondok, anélkül használhatóbb, persze lehet, hogy csak én vagyok a béna):

  • van incremental compilation, de a függőségkezelése lehetne egy picivel jobb (helyes, de néha túl sokat fordít), érdemes az sbt build managert használni
  • van osztály, mező, metódus átnevezés
  • call hierarchy volt néha :), ebben épp nem működik

IDEA:

  • nincs incremental compilation, de használható az fsc - fast scala compiler, ami jelentősen lerövidítheti a fordítási időt (bár kétségtelen, hogy ez a rész is kerülhet inkonzisztens állapotba)
  • van osztály, mező, metódus átnevezés
  • call hierarchy szépen működik
  • build toolok jobb támogatása