I sann expressen anda så var jag tvungen att ta den ordvitsen ;-) . Håller på att lära mig Scala för att se om det är något att ha och hitils är jag rätt nöjd. Men idag bestämde jag mig för att titta lite närmare på interopabiliteten med Java.

Jag kompilerade lite Scala klasser och tittade vad som egentligen genererades. Det märks ju att java byte koden inte är skriven för andra språk än Java med tanke på alla special saker som man måste emulera i byte koden när man använder tex closures eller properties i Scala.

Properties i Scala får ju i den kompilerade koden automatiskt en överlagring av = operatorn samt en metod för att få access till propertien. Operator metoden slutar på _$eq vilket kanske går att anropa från java men blir väldigt fult (är osäker på om $ är ok i Java). Access metoden har samma namn som propertien och returnerar den. Så till skillnad från tex Groovy så får man inga getters och setters automat kompilerade. Men om man tittar på scala som språk som använder operator överlagring så känns det på ett sett naturligt. Men enligt en på #scala irc kanalen så skall det finnas annotations för att lösa detta.

När man skapar en ”object” vilket är det samma som en singelton klass så genereras det faktiskt två klasser. En riktig singelton klass med en public variable som heter MODULE$ som innehåller singelton objektet. Metoderna som var deklarerade blir vanliga metoder i singelton klassen. Det genreras också en klass med alla metoder fast i static form vilken använder sig utav singelton klassen.

Så det känns lite som om det där med interopabillitet mellan Scala och Java är mest envägs riktad. Det gör ju iofs inte så mycket för oftast väljer man väl ett språk. Det tråkiga blir väl dock att det kanske växer fram bra bibliotek i Scala som man inte kan använda rakt av i Java. Detta kanske löser sig i framtida versioner om JVM:en uppgraderas för bättre språk stöd. Här kan man ju sno lite av en av dom sakerna som faktiskt är bra med .NET nämligen att den är designad för multipla språk.