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