Er det en måte å oversette Scala-kildekode til Java-kildekode?

Beste svaret

For å svare på spørsmålet ditt, avhenger det av hva du mener med «java-kode». Scala-kode er lovlig Java-kode, du må bare legge til scala.jar i Java-klassebanen. scalac er bare en innpakning rundt java-kommandoen som sender riktig hovedobjekt og setter klassebanen riktig. (ring $ vim `som scalac` for å se dette skriptet.

Hvis du for eksempel er på en Mac med Typesafe Scala-stakken, kan du faktisk kompilere Scala-kode som finnes i myFile.scala ved hjelp av kommandoen. :

java -Dscala.home=/Applications/typesafe-stack/ -D.scala.usejavacp=true -cp .:/Applications/typesafe-stack/lib/scala-library.jar:/Applications/typesafe-stack/lib/scala-compiler.jar scala.tools.nsc.Main myFile.scala

Jeg vil gi noen flere forklaringer nedenfor, men vil gjerne godta endringer fra Scala-eksperter der ute.

La oss ta følgende enkle scala-objekt (som jeg samlet, men ikke testet …)

class Adder(val x:Int){

def add(y:Int) = x+y

def applyFunction(f: Int=>Int) = f(x)

}

Det er en dum metode. Det tar en int, og lar deg deretter legge til en annen int til den eller bruke en funksjon som til det heltallet.

Vi kaller scalac og genererer klassefilene. Nå kan vi ringe java dissasembler, javap for å se de faktiske genererte feltene og klassemetodene.

$ javap Adder

public class Adder utvider java.lang.Object implementerer scala.ScalaObject {public int x (); public int add (int); public int applyFunction (scala.Function1); offentlig Adder (int); }

Dette er et helt lykkelig Java-objekt som kan implementeres ved hjelp av Java eksplisitt.

Nå må du være forsiktig når du bruker mer avanserte Scala-teknikker, for eksempel egenskaper.

La oss se på denne kodeblokken

abstract class Thing {

def method:Unit

}

trait OtherThing {

def method { println("Hello")}

}

object Main{

def main(args: Array[String]) = {

val A = new Thing with OtherThing

A.method

}

}

Du har en abstrakt klasse som har sin metode implementert i et trekk som er blandet inn på objektdefinisjonstidspunktet.

Når du kompilerer dette, vil du se mange flere klasser med funky $ symboler og ordet anon. Det mest interessante er klassen som finnes i Main $$ anon $ 1.class.

Kaller javap Main $$ anon $ 1 vi ser at vi har generat redigerte en ny klasse

public final class Main$$anon$1 extends Thing implements OtherThing{

public void method();

public Main$$anon$1();

}

som bruker java-grensesnitt og underklassering for å representere denne klassen riktig.

Fantastisk, ikke sant?

Svar

Nei Scala er et flott programmeringsspråk på papir, men det kommer ikke til å ta av. Se på utviklingen av bruken i grafen nedenfor:

Kan du se den lyseblå linjen som representerer Scala? Nei? Vel, det representerer rundt 2\% av pull-forespørslene i Github (se mer statistikk her ). Kurven er ikke bare flat, den er faktisk litt nede fra 2,3\% for fem år siden. Det er til tross for Spark , det mest populære Scala-prosjektet, som ble utgitt i 2014.

Så nei, det er ingen måte Scala er kommer til å ta av til tross for hva mange av oss trodde første gang vi brukte språket. Hva kan gå galt? Et språk som fungerer i den velprøvde JVM og som gir fleksibilitet til å brukes som bare «en bedre java» eller gå «fullt funksjonell», eller til og med andre finesser som skuespillere eller futures virket som en gave.

Det viser seg at ting fungerer annerledes i praksis. Scala er enda et språk du trenger å støtte, med mindre du kan gjøre alt i Scala, noe som er svært lite sannsynlig. I det minste vil du kombinere Scala og Java, så hvorfor ikke bare begrense deg til Java? Det ser ut til å være den viktigste grunnen til at LinkedIn bestemte seg for å avvikle bruken av Scala i bunken. . Det er som C ++, men verre. For eksempel kan du få ekspert Scala-programmerere til å gå nøtter med fullt funksjonell kodestil for å pakke en gal mengde informasjon i en kodelinje som en nybegynner ikke forstår. Så hvis du vil opprettholde en Scala-kodebase, må du være ganske streng med hensyn til hvordan du bruker den. Og da må du gå ut og ansette utviklere som kan og er villige til å kode Scala på den spesielle måten. Lykke til med det. Selv Twitter, Scala-kraftverket, sa at de ikke ville velge Scala som programmeringsspråk hvis de måtte gjøre det «i dag» (eller i 2015 for å være mer betong). Yammer flyttet også fra Scala til Java av lignende grunner.

Så det viser seg at Scala ikke bare tar av, men det er i virkeligheten sannsynligvis på vei ned, bare vedlikeholdt av populariteten til Spark. Egentlig er Scala veldig bra for data, så valget gir mening. Imidlertid ville jeg ikke bli overrasket om folk over tid ender opp med å bruke Python som standard gnistspråk gitt hvor populært det blir blant dataforskere.

Oppdatering:

For de som hevder at Github ikke er en god representasjon av språkets popularitet, her er et par mer: Scala vises ikke engang i Tiobes topp 20 , ifølge PyPL , basert på Google søker, populariteten er 1,2\%, selv om de måler en liten økning. Du finner mange andre indekser her . Jeg tror ikke noen viser noe i nærheten av språket «tar av».

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *