Existuje způsob, jak přeložit zdrojový kód Scala do zdrojového kódu Java?


Nejlepší odpověď

Odpověď na vaši otázku závisí na tom, co máte na mysli pod „java code“. Scala code je legální java kód, stačí přidat scala.jar do cesty třídy java. scalac je jen obal kolem příkazu java, který předá správný hlavní objekt a správně nastaví cestu ke třídě. (pro zobrazení tohoto skriptu volejte $ vim `which scalac`.)

Pokud jste například na počítači Mac se zásobníkem Scales Typesafe, můžete ve skutečnosti zkompilovat kód Scala nalezený v myFile.scala pomocí příkazu :

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

Níže uvedu několik dalších vysvětlení, ale s radostí přijmu úpravy od odborníků z Scaly.

Pojďme vzít následující jednoduchý objekt Scala (který jsem zkompiloval, ale netestoval …)

class Adder(val x:Int){

def add(y:Int) = x+y

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

}

Je to hloupá metoda. Trvá int a poté vám umožňuje přidat do něj další int nebo použít funkci, která na toto celé číslo.

Říkáme scalac a generujeme soubory třídy. Nyní můžeme zavolat Java Disasembler, Javap, abychom si prohlédli skutečně vygenerovaná pole a metody tříd.

$ javap Adder

veřejná třída Adder rozšiřuje java.lang.Object implementuje scala.ScalaObject {public int x (); public int add (int); public int applyFunction (scala.Function1); public Adder (int); }

Toto je naprosto šťastný objekt Java, který lze explicitně implementovat pomocí prostředí Java.

Nyní musíte být opatrní při používání pokročilejších technik Scala, jako jsou vlastnosti.

Podívejme se na tento blok kódu

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

}

}

Máte abstraktní třída, která má svou metodu implementovanou do zvláštnosti, která je smíchána v době definice objektu.

Když to zkompilujete, uvidíte mnohem více tříd se funky $ symboly a slovem anon. Nejzajímavější je třída nalezená v Main $$ anon $ 1.class.

Voláním javap Main $$ anon $ 1 vidíme, že máme generat ed a new class

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

public void method();

public Main$$anon$1();

}

který ke správnému zobrazení této třídy používá rozhraní Java a podtřídu.

Úžasné, že?

Odpověď

Ne. Scala je skvělý programovací jazyk na papíře, ale nebude se vzlétnout. Podívejte se na vývoj jeho využití v níže uvedeném grafu:

Vidíte světle modrou čáru představující Scalu? Ne? Představuje to přibližně 2\% žádostí o stažení v Githubu (další statistiky zde ). Křivka je nejen plochá, ale ve skutečnosti je mírně nižší než 2,3\% před pěti lety. A to navzdory Spark , nejpopulárnějšímu projektu Scala, který byl vydán v roce 2014.

Takže ne, Scala neexistuje vzlétnout navzdory tomu, co si mnozí z nás mysleli, že jsme poprvé použili ten jazyk. Co se může pokazit? Jazyk, který funguje v osvědčeném JVM a který nabízí flexibilitu pro použití jako „lepší java“ nebo „plně funkční“, nebo dokonce i jiné vychytávky jako herci nebo futures vypadaly jako dar z nebes.

Ukázalo se, že věci v praxi fungují jinak. Scala je další jazyk, který budete muset podporovat, pokud ve Scale nedokážete vše, což je velmi nepravděpodobné. Přinejmenším budete kombinovat Scalu a Javu, tak proč se neomezit pouze na Javu? To se zdá být hlavním důvodem, proč se LinkedIn rozhodl vyřadit jejich používání Scaly ve svém zásobníku.

Ale ve skutečnosti se to zhoršuje, Scala je díky svému designu a flexibilitě sama o sobě bolestí. . Je to jako C ++, ale horší. Například můžete přimět programátory Scala, aby se zbláznili s plně funkčním stylem kódování, aby zabalili šílené množství informací do řádku kódu, kterému nováček nebude rozumět. Pokud tedy chcete udržovat základnu kódu Scala, musíte být docela přísní ohledně toho, „jak“ ji používat. A pak musíte jít ven a najmout vývojáře, kteří mohou a jsou ochotni kódovat Scala tímto konkrétním způsobem. Hodně štěstí. Dokonce i Twitter, elektrárna Scala, uvedl, že by si nevybral Scala jako svůj programovací jazyk, pokud by to museli dělat „dnes“ (nebo v roce 2015, aby to bylo více beton). Yammer se také z podobných důvodů přesunul ze Scaly do Javy.

Ukazuje se tedy, že Scala nejenže nevzlétá, ale ve skutečnosti je pravděpodobně na cestě dolů, udržovaná pouze popularitou Sparku. Scala je ve skutečnosti opravdu dobrá pro data, takže volba dává smysl. Nebyl bych však překvapen, kdyby lidé nakonec používali Python jako výchozí jazyk Spark, vzhledem k tomu, jak populární se stává mezi Data Scientists.

Aktualizace:

Pro ty, kteří tvrdí, že Github není dobrým vyjádřením popularity jazyka, je zde několik více: Scala se podle PyPL podle PyPL ani neobjevuje v Tiobe v top 20 Vyhledávání Google, jeho popularita je 1,2\%, i když měří mírný nárůst. Mnoho dalších indexů najdete zde . Nemyslím si, že by někdo ukazoval něco, co by se blížilo jazyku „vzlétnout“.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *