Jag har funderat ganska länge på vad nästa stora språk skulle kunna vara. Jag var tidigt med på resan från C++ till Java. Åkte på den första JavaOne konferensen i San Francisco, och trodde redan då att Java skulle ta över. Så fort det var möjligt lämnade jag C++ bakom mig, trots att jag skrivit en bok om C++ och suttit i standardiseringskommissionen för C++.
Men Java varar inte för evigt, och jag har på egen hand samlat på vad jag tror är viktigt för att något ska bli "nästa stora språk":
- Dess syntax får inte vara för olika det som gäller idag, dvs Java, för annars kan man inte få speciellt många att migrera.
- Det måste bygga på en virtuell maskin, troligen endera JVM eller Microsofts CLR. De ger den portabilitet vi kräver idag. (CLR är ju kanske inte så portabel, men i teorin finns ju Mono.)
- Det måste ha inbyggt stöd för multi-core. Då menar jag inte bara det språkstöd som finns i Java och andra språk för att skapa och starta trådar, utan inbyggt stöd så att virtuella maskinen kan bryta loss delar av det som ska exekveras till olika cores i framtidens processorer. Om 5 år har vi ju kanske 16 cores som standard i en processor, och att manuellt skriva kod som utnyttjar dem är för svårt för annat än experter.
- Det måste ha stöd av ett stort företag som kan ställa upp med resurser att skriva verktyg, bibliotek, marknadsföring, konferenser, böcker, etc.
- Det måste ha bra prestanda. Visst, Javas prestanda var inte bra från början, men det fanns inget skäl till att det skulle behöva vara långsamt, och idag har Java väldigt bra prestanda, förutom startup tid.
- Det bör helst inte överge tidigare investeringar i redan existerande kod.
- Det bör vara statiskt typat, för annars blir det svårt att bygga bra verktyg för bland annat refaktorering, vilket är nödvändigt för större projekt.
- Det måste vara objektorienterat – det är otvetydigt så att det är det paradigm som fungerat bäst för att bygga stora system.
Java har idag allt detta, förutom 3, och det oroar mig en del. Så fick jag höra talas om Scala och dess ramverk som heter Actors. Det hävdades att det skulle hjälpa till med just detta med multi-core. Har ännu inte läst in mig på just Actors, men jag blev nyfiken på Scala och läste in mig på det.
Scala är ett statiskt typat objekt-orienterat språk med en syntax som är tillräckligt lik Java för att man ska luras att ta en närmare titt. När man väl sett på vilket sätt det också är ett funktionellt språk, med dess annorlunda syntax (som jag tror måste till av ren nödvändighet för att ge ett sådant stöd), så har man redan svalt kroken, sänket och hela korken.
Scala ligger ovanpå Javas virtuella maskin, och Java-klasser kan användas rakt av. Java-kod är inte automatiskt giltig Scala-kod, på det sätt som all C för 15 år sedan var giltig C++, men man kan ta med sig existerande Java-kod in i den Scala kod man skriver.
Tyvärr har inget större företag ställt sig bakom Scala ännu, men det finns riktigt många projekt som jobbar på verktyg och ramverk. Det finns en rätt bra Eclipse-plugin, ramverk för enhetstestning, ett mycket intressant webbramverk som heter lift, en mycket aktiv och hjälpsam mailinglista, och ett par böcker på gång. En av böckerna kan man precis förbeställa!
Scalas prestanda är mycket bra, kan till och med med vara snabbare än Java.
Här står jag själv just nu. Jag ska läsa den nya Scala-boken över julhelgen. Just nu är jag mest en entusiastisk amatör som tror jag hittat något som kan bli riktigt stort.