Van-e mód arra, hogy a Scala forráskódot Java forráskódra fordítsd?

Legjobb válasz

A kérdés megválaszolásához ez attól függ, hogy mit értesz “java kód” alatt. A Scala kód jogi java kód, csak hozzá kell adnia a scala.jar fájlt a java osztály elérési útjához. A scalac csak egy burkoló a java parancs körül, amely átadja a megfelelő Main objektumot, és megfelelően beállítja az osztályútvonalat. (hívja meg a $ vim `melyik skalacot`, hogy megtekinthesse ezt a szkriptet).

Például, ha Mac gépen van a Typesafe Scala verem, a MyFile.scala fájlban található Scala kódot a :

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

Az alábbiakban további magyarázatokat adok, de örömmel fogadom a Scala szakértőinek szerkesztéseit.

Vegyük a következő egyszerű scala objektumot (amelyet lefordítottam, de nem teszteltem …)

class Adder(val x:Int){

def add(y:Int) = x+y

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

}

Ez egy buta módszer. Ehhez egy int szükséges, majd lehetővé teszi, hogy más hozzáadjon egy másik int-t, vagy alkalmazzon egy függvényt az egész számra.

Meghívjuk a scalac-ot, és létrehozzuk az osztályfájlokat. Most hívhatjuk a java dissasembler, javap-ot, hogy megtekinthessük a ténylegesen létrehozott mezőket és osztály-módszereket.

$ javap Adder

public class Adder kiterjeszti a java.lang.Object megvalósítja a scala.ScalaObject {public int x (); public int add (int); public int ApplyFunction (scala.Function1); public Adder (int); }

Ez egy tökéletesen boldog Java objektum, amelyet kifejezetten a Java segítségével lehet megvalósítani.

Most óvatosnak kell lenned, ha fejlettebb Scala technikákat, például tulajdonságokat használsz.

Nézzük meg ezt a kódblokkot

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

}

}

Önnek van egy absztrakt osztály, amelynek metódusát olyan tulajdonságban valósítják meg, amely az objektumdefiníció idején keveredik.

Amikor ezt összeállítja, még sok olyan osztályt fog látni, amelyek funky $ szimbólumokkal és az anon szóval rendelkeznek. A legérdekesebb a fő $$ anon $ 1. osztályban található osztály.

A javap Main $$ anon $ 1 hívása azt látja, hogy generáltunk új osztályt szerkesztett

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

public void method();

public Main$$anon$1();

}

amely java interfészeket és alosztályokat használ az osztály megfelelő képviseletéhez.

Félelmetes, igaz?

Válasz

Nem. A Scala nagyszerű programozási nyelv papíron, de nem fog elindulni. Nézze meg használatának alakulását az alábbi grafikonon:

Látja a világoskék vonalat, amely a Scalát ábrázolja? Nem? Nos, ez a Github-ban a lekérési kérelmek körülbelül 2\% -át képviseli (további statisztikákat itt talál). A görbe nemcsak lapos, hanem kissé le is esik az öt évvel ezelőtti 2,3\% -hoz képest. Ennek ellenére a Spark , a legnépszerűbb Scala projekt, 2014-ben jelent meg.

Tehát nem, a Scala semmiképpen sem annak ellenére, hogy sokan azt gondoltuk, hogy először használtuk a nyelvet. Mi romolhat el? Az a nyelv, amely a jól bevált JVM-ben működik, és amely rugalmasságot kínál, hogy csak „jobb java” vagy „teljesen működőképes” legyen, vagy akár más finomságok, például színészek vagy jövő, úgy tűnt, hogy istenverte.

Kiderült, hogy a dolgok a gyakorlatban másképp működnek. A Scala egy másik nyelv, amelyet támogatnia kell, hacsak nem tud mindent megtenni a Scalában, ami nagyon valószínűtlen. Legalább kombinálja a Scalát és a Java-t, miért nem korlátozhatja magát csak a Java-ra? Úgy tűnik, hogy ez a fő oka annak, hogy a LinkedIn úgy döntött, hogy fokozatosan megszünteti a Scala használatát a veremben.

De valójában egyre rosszabbá válik, a Scala a kialakítása és a rugalmassága miatt önmagában is fájdalom fenntartani. . Olyan, mint a C ++, de rosszabb. Például megkaphatja a Scala szakértő programozókat, hogy teljesen működőképes kódolási stílussal őrült mennyiségű információt csomagolnak egy olyan kódsorba, amelyet egy újonc nem fog megérteni. Tehát, ha fenn akar tartani egy Scala kódbázist, akkor elég szigorúan kell kezelnie a használat módját. Ezután ki kell mennie és olyan fejlesztőket kell alkalmaznia, akik képesek és hajlandók kódolni a Scalát az adott módon. Sok sikert azzal. Még a Twitter, a Scala erőműve is azt mondta, hogy nem választanák a Scalát programozási nyelvüknek, ha „ma” (vagy 2015-ben, hogy több legyen) Konkrét). A Yammer szintén hasonló okokból költözött el a Scalából a Java-ba.

Kiderült tehát, hogy a Scala nemcsak hogy nem indul el, de a valóságban valószínűleg a lefelé vezető úton van, csak a Spark népszerűsége tartja fenn. Valójában a Scala valóban jó az adatok számára, így a választásnak van értelme. Azonban nem lennék meglepve, ha idővel az emberek a Python-ot használnák alapértelmezett Spark nyelvként, tekintettel arra, hogy mennyire népszerűvé válik az adatkutatók körében. >

Frissítés:

Azok számára, akik azt állítják, hogy a Github nem jól reprezentálja a nyelv népszerűségét, íme néhány bővebben: A Scala még Tiobe top 20-ban sem jelenik meg, a PyPL szerint. A Google kereséseinek népszerűsége 1,2\%, bár enyhe növekedést mértek. Sok más indexet itt talál . Szerintem egyik sem mutat semmit, ami közel áll a „felszállás” nyelvéhez.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük