Onko olemassa tapa kääntää Scalan lähdekoodi Java-lähdekoodiksi?

Paras vastaus

Kysymykseen vastaaminen riippuu siitä, mitä tarkoitat ”java-koodilla”. Scala-koodi on laillinen java-koodi, sinun on vain lisättävä scala.jar java-luokan polkuun. scalac on vain kääre Java-komennon ympärille, joka välittää oikean pääobjektin ja asettaa luokkatiedon oikein. (kutsu $ vim `mikä scalac` nähdäksesi tämän komentosarjan).

Jos esimerkiksi käytät Macia, jossa on Typesafe Scala -pino, voit itse kääntää myFile.scalasta löytyvän Scala-koodin komennolla :

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

Annan lisää selityksiä alla, mutta hyväksyn mielelläni Scalan asiantuntijoiden tekemät muokkaukset.

Otetaan seuraava yksinkertainen scala-objekti (jonka olen koonnut, mutta en testannut …)

class Adder(val x:Int){

def add(y:Int) = x+y

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

}

Se on tyhmä menetelmä. Se vie int-arvon ja antaa sinun sitten lisätä siihen toisen int-arvon tai käyttää funktiota, joka tälle kokonaisluvulle.

Kutsumme scalacia ja luomme luokkatiedostot. Nyt voimme kutsua java dissasembleria, javapia tarkastelemaan todellisia luotuja kenttiä ja luokkamenetelmiä.

$ javap Adder

public class Adder laajentaa java.lang.Object toteuttaa scala.ScalaObject {public int x (); public int add (int); public int ApplyFunction (scala.Function1); julkinen summaaja (int); }

Tämä on täysin onnellinen Java-objekti, joka voidaan toteuttaa nimenomaisesti Java-sovelluksella.

Nyt sinun on oltava varovainen käyttäessäsi edistyneempiä Scala-tekniikoita, kuten ominaisuuksia.

Tarkastellaan tämän koodilohkon

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

}

}

Sinulla on abstrakti luokka, jonka menetelmä on toteutettu piirteeseen, joka sekoitetaan kohteen määrittelyhetkellä.

Kun käännät tämän, näet monia muita luokkia, joissa on funky $ -merkit ja sana anon. Mielenkiintoisin on luokka, joka löytyy Main $$ anon $ 1.luokasta.

Soittaessasi javap Main $$ anon $ 1 -sivustoa näemme, että meillä on generat editoi uutta luokkaa

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

public void method();

public Main$$anon$1();

}

joka edustaa java-rajapintoja ja alaluokkaa tämän luokan edustamiseksi oikein. / p>

Mahtava, eikö?

Vastaa

Ei. Scala on loistava ohjelmointikieli paperilla, mutta se ei aio levätä. Katso sen käytön kehitystä alla olevasta kaaviosta:

Näetkö vaaleansinisen viivan, joka edustaa Scalaa? Ei? No, se edustaa noin 2\% Githubin vetopyynnöistä (katso lisää tilastoja täältä ). Käyrä ei ole vain tasainen, vaan se on hieman laskenut viisi vuotta sitten 2,3 prosentista. Tämä tapahtuu huolimatta Sparkista, joka on suosituin Scala-projekti, joka julkaistiin vuonna 2014.

Joten, ei, Scala ei ole mitenkään lentoonlähtö huolimatta siitä, mitä monet meistä ajattelivat ensimmäistä kertaa, kun käytimme kieltä. Mikä voi mennä pieleen? Kieli, joka toimii hyvin testatussa JVM: ssä ja joka tarjoaa joustavuutta käytettäväksi vain ”parempana javaana” tai ”täysin toimivana”, tai jopa muut hienot asiat, kuten näyttelijät tai futuurit, tuntui jumalattomalta.

On käynyt ilmi, että asiat toimivat käytännössä eri tavalla. Scala on jälleen yksi kieli, jota sinun on tuettava, ellet pysty tekemään kaikkea Scalassa, mikä on hyvin epätodennäköistä. Ainakin yhdistät Scalan ja Java: n, joten miksi et vain rajoittuisi vain Java: iin? Tämä näyttää olevan tärkein syy, miksi LinkedIn päätti lopettaa Scalan käytön pinossaan.

Mutta se pahenee, Scala on muotoilunsa ja joustavuutensa vuoksi itsessään tuska ylläpitää. . Se on kuin C ++, mutta pahempi. Voit esimerkiksi saada Scala-asiantuntijat ohjelmoimaan täysin toimivan koodaustyylin pakkaamaan hullun määrän tietoa koodiriville, jota aloittelija ei ymmärrä. Joten, jos haluat ylläpitää Scala-koodipohjaa, sinun on oltava melko tiukka siitä, kuinka ”käyttää” sitä. Sitten sinun täytyy mennä ulos ja palkata kehittäjiä, jotka voivat ja ovat halukkaita koodaamaan Scalan tällä erityisellä tavalla. Onnea sen kanssa. Jopa Twitter, Scalan voimalaitos, sanoi, että he eivät valitsisi Scalaa ohjelmointikielekseen, jos heidän olisi tehtävä se ”tänään” (tai vuonna 2015 ollakseen enemmän betoni). Yammer muutti myös Scalasta Javalaan vastaavista syistä.

Joten käy ilmi, että Scala ei vain ole nousemassa, mutta todellisuudessa se on todennäköisesti matkalla alaspäin, vain Sparkin suosio ylläpitää. Itse asiassa Scala on todella hyvä tietoihin, joten valinnalla on järkeä. En kuitenkaan olisi yllättynyt, jos ajan mittaan ihmiset päätyvät käyttämään Pythonia Sparkin oletuskielenä, kun otetaan huomioon kuinka suosittu siitä on tulossa datatieteilijöiden keskuudessa.

Päivitys:

Niille, jotka väittävät, että Github ei kuvaa kielen suosiota, tässä on pari lisää: Scala ei näy edes Tioben 20 parhaan joukossa PyPL: n perusteella. Google-haut, sen suosio on 1,2\%, vaikka ne mittaavatkin hieman kasvua. Löydät monia muita indeksejä täältä . Mielestäni mikään ei osoita mitään läheskään kieltä ”lentoonlähtö”.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *