1

Scalaのコンパイル方法を教えてください(またはソースを示してください)。

などの疑問があります。

  • コンパイル手順の中で、Scala は Java 関連のものをどのようにコンパイルしますか? Javaコンパイラを別途使用しますか?
  • 最終的なバイトコードはJavaのファイル.scalaと同じですか?.class
  • Oracle による Sun の買収により、JVM も Oracle に属しますか?
  • いつか JVM がプロプライエタリなソフトウェアを手に入れたら、それは Scala にも影響を与えますか?
4

2 に答える 2

6

必要に応じてコンパイラのソースコードを確認できますが、最初にコンパイラの内部に関するMartinOderskyのプレゼンテーションを確認する方が有益な場合があります。

あなたの特定の質問に答えて:

  • はい。の初期のバージョンではこれが行われず、最初に手動でscalac実行する必要がありました。javacただし、scalacは、2.7.2以降、必要に応じてjavacを使用してJavaファイルをコンパイルできます。
  • 確かに同じフォーマットです。Scalaで行ったことによっては、「同等の」ものに対してまったく同じJVM操作が行われない場合がありますが、バイトコード仕様に完全に準拠しています(これが、JVMで実行できる理由です)。
  • はい、JVM仕様を意味するのか、実際のvm実装(JREダウンロード)を意味するのかに関係なく。
  • 「プロパティ」とはどういう意味か正確にはわかりません。しかし、あなたがそれについて尋ねている限り、答えは「いいえ」だと思います。Scalaは、標準のバイトコード形式でJavaクラスファイルにコンパイルされます。実行時には、Scalaで記述されたコード/クラスとJavaで記述されたコード/クラスに違いはありません。したがって、ScalaコードがこれらのJVMで実行されるのを根本的に妨げるものはすべて、Javaコードの実行も妨げることになります。
于 2012-09-03T12:05:41.270 に答える
5
  • コンパイル手順の中で、Scala は Java 関連のものをどのようにコンパイルしますか?

Scala は Java をコンパイルしません。クラスのAPIがどうなるかを理解するのに十分なほどJavaについて知っていますが、それだけです。

  • Javaコンパイラを別途使用しますか?

Java コンパイラで Java ファイルをコンパイルする必要があります。

  • .scala の最終的なバイトコードは Java の .class ファイルと同じですか?

はい。Scala は有効な .class ファイルを生成します。ただし、そのファイルを Java コードに変換することはできません。これは、有効なクラス ファイルは、Java が許可しない、または表現できないものを許可するためです。

  • Oracle による Sun の買収により、JVM も Oracle に属しますか?

「その」JVM はありません。多くの既存の JVM があり、実際、Oracle には独自の JVM がありました。もちろん、Sun の JVM は今や Oracle のものです。

  • いつか JVM がプロプライエタリなソフトウェアを手に入れたら、それは Scala にも影響を与えますか?

常に多くのプロプライエタリ JVM があり、そのうちの 1 つが Oracle のものです。

架空の「最悪のケース」のシナリオを考えてみましょう。世界中のすべての JVM がライセンス (有料) 製品になるか、存在しなくなります。もちろん、Scala は引き続き Dalvik VM で実行できますが、それも有料になるか、存在しなくなったと仮定しましょう。

この場合、Scala は引き続き存在する可能性がありますが、Scala でコンパイルされたプログラムを実行できるようにするには料金を支払う必要があります。実際、Scala は JVM プログラムであるため、コンパイラーを使用するためにさえ料金を支払う必要があります。

あるいは、Scala を他のターゲット プラットフォームに分岐させることもできます。現在、Scala にはそのような取り組みがありますが、それらをプロダクション グレードにするというプレッシャーはまったくありません。必要に応じて、それは行われます。

于 2012-09-04T00:27:43.720 に答える