Scala 소스 코드를 Java 소스 코드로 변환하는 방법이 있습니까?


최상의 답변

귀하의 질문에 대답하려면 “자바 코드”가 의미하는 바에 따라 다릅니다. Scala 코드는 합법적 인 자바 코드이므로 scala.jar를 자바 클래스 경로에 추가하기 만하면됩니다. scalac은 올바른 Main 개체를 전달하고 클래스 경로를 올바르게 설정하는 java 명령을 둘러싼 래퍼 일뿐입니다. (이 스크립트를 보려면 $ vim`which scalac`을 호출합니다.)

예를 들어 Typesafe Scala 스택이있는 Mac을 사용하는 경우 실제로 다음 명령을 사용하여 myFile.scala에있는 Scala 코드를 컴파일 할 수 있습니다. :

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

아래에 몇 가지 설명이 더 있지만 Scala 전문가의 수정 사항을 기꺼이 받아 들일 것입니다.

다음과 같은 간단한 scala 객체를 사용합니다 (내가 컴파일했지만 테스트하지는 않았습니다 …).

class Adder(val x:Int){

def add(y:Int) = x+y

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

}

멍청한 방법입니다. 정수를 취하고 다른 정수를 추가하거나 그 정수에 함수를 적용 할 수 있습니다.

우리는 scalac을 호출하고 클래스 파일을 생성합니다. 이제 실제 생성 된 필드와 클래스 메소드를보기 위해 java dissasembler, javap를 호출 할 수 있습니다.

$ javap Adder

공용 클래스 Adder extends java.lang.Object 구현 scala.ScalaObject {public int x (); public int add (int); public int applyFunction (scala.Function1); 공용 가산기 (int); }

이것은 Java를 사용하여 명시 적으로 구현할 수있는 완벽하게 행복한 Java 객체입니다.

이제 트레이 트와 같은 고급 스칼라 기술을 사용할 때주의해야합니다.

p>

이 코드 블록을 살펴 보겠습니다.

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

}

}

객체 정의 시간에 혼합 된 특성으로 메서드가 구현 된 추상 클래스입니다.

이것을 컴파일하면 펑키 한 $ 기호와 anon이라는 단어가있는 더 많은 클래스를 볼 수 있습니다. Main $$ anon $ 1.class에있는 클래스입니다.

javap Main $$ anon $ 1을 호출하면 새 수업을 작성했습니다.

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

public void method();

public Main$$anon$1();

}

이 클래스를 적절하게 표현하기 위해 자바 인터페이스와 서브 클래 싱을 사용합니다.

멋지죠?

답변

아니요. Scala는 문서 상으로는 훌륭한 프로그래밍 언어이지만 이륙하지는 않을 것입니다. 아래 그래프에서 사용법의 변화를보십시오.

Scala를 나타내는 하늘색 선이 보이십니까? 아니? Github에서 풀 요청의 약 2 \%를 차지합니다 (더 많은 통계는 여기 에서 확인하세요). 곡선은 평평 할뿐만 아니라 실제로 5 년 전 2.3 \%에서 약간 감소했습니다. 그것은 2014 년에 출시 된 가장 인기있는 Scala 프로젝트 인 Spark 에도 불구하고 그렇습니다.

그래서, Scala가 우리가 처음 언어를 사용했을 때 많은 사람들이 생각했던 것에도 불구하고 이륙 할 것입니다. 무엇이 잘못 될 수 있습니까? 잘 테스트 된 JVM에서 작동하고 “더 나은 자바”또는 “완벽한 기능”으로 사용할 수있는 유연성을 제공하는 언어, 또는 배우 나 미래와 같은 다른 멋진 기능도 신의 선물처럼 보였습니다.

실제로 상황이 다르게 작동한다는 것이 밝혀졌습니다. Scala는 스칼라에서 모든 것을 할 수 없다면 지원해야 할 또 다른 언어입니다. 최소한 Scala와 Java를 결합 할 것이므로 Java에만 국한하지 않는 이유는 무엇입니까? 이것이 LinkedIn이 스택에서 Scala 사용을 단계적으로 중단하기로 결정한 주된 이유 인 것 같습니다.

그러나 실제로는 더 나빠집니다. Scala는 디자인과 유연성 때문에 그 자체를 유지하기가 어렵습니다. . C ++과 비슷하지만 더 나쁩니다. 예를 들어, 초보자가 이해할 수없는 코드 줄에 엄청난 양의 정보를 담기 위해 완전한 기능의 코딩 스타일을 가진 전문 Scala 프로그래머를 얻을 수 있습니다. 따라서 Scala 코드베이스를 유지하려면 사용 방법에 대해 매우 엄격해야합니다. 그리고 나서 특별한 방식으로 Scala를 코딩 할 수 있고 기꺼이 할 수있는 개발자를 고용해야합니다. 행운을 빌어 요. Scala의 강국 인 Twitter조차도 스칼라를 프로그래밍 언어로 선택하지 않을 것입니다 라고 말했습니다. “오늘”(또는 2015 년에는 콘크리트). Yammer 도 비슷한 이유로 Scala에서 Java로 이동했습니다.

그래서 Scala는 이륙 할뿐만 아니라 실제로는 점점 내려가는 중이며 Spark의 인기에 의해서만 유지되고 있습니다. 실제로 Scala는 데이터에 정말 적합하므로 선택이 합리적입니다. 그러나 시간이 지남에 따라 사람들이 Python을 기본 Spark 언어로 사용하게 되더라도 데이터 과학자들 사이에서 Python이 얼마나 인기를 얻고 있는지 알 수 있습니다.

업데이트 :

Github가 해당 언어의 인기를 잘 나타내지 않는다고 주장하는 사람들을 위해 여기에 몇 가지 기타 : PyPL 에 따르면 Scala는 Tiobe의 상위 20 개 에 포함되지 않습니다. 구글 검색, 그 인기는 1.2 \%이지만 약간 증가했습니다. 다른 많은 색인은 여기 에서 찾을 수 있습니다. 나는 “이륙”이라는 언어에 가까운 어떤 것도 보여주지 않는다고 생각합니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다