不來了解下JVM支持的語言有哪些?

前言

與上文我們知道,JVM作爲一個可以將Class文件轉換成機器碼的平臺,只要安裝了虛擬機,就可以在上面運行字節碼。

同樣,只要其他原因在編譯過程中生成了字節碼,那麼照樣可以通過JVM在不同平臺上運行,這就實現了跨平臺能力了。

目前,可以直接在JVM上運行的語言除了Java之外有很多,本文主要介紹九種。正如平時我們瞭解一個語言時通常會先學這個語言裏最經典的一句話——【我愛你】。本文將每種語言通過一段【Hello, World】代碼進行演示,看看不同語言的語法有什麼不同之處。

Kotlin

Kotlin是一種在JVM上運行的靜態類型編程語言,由JetBrains設計開發並開源。

Kotlin可以編譯成Java字節碼,也可以編譯成JavaScript,方便在沒有JVM的設備上運行。

在Google I/O 2017中,Google宣佈Kotlin成爲Android官方開發語言。

package hello						//可選的包頭
fun main(args: Array<String>){		//包級可見的函數,接受一個字符串數組作爲參數
	println("Hello, World")			//分號可以省略
}

Kotlin也是一個面向對象的語言。

class Hello(val name: String){
	fun greet(){
		println("Hello, $name");
	}
}
fun main(args: Array<String>){
	Greeter("World").greet()		//創建一個對象不用new關鍵字
}

想繼續深入的朋友可以看看菜鳥的這個教程:Kotlin教程

Groovy

Groovy是Apache旗下的一門基於JVM平臺的動態編程語言,它的語法風格跟Java很像,Java程序員可以很快地熟練使用Groovy,即使開發過程中忘記Groovy的語法,也可以用Java的語法繼續寫,還可以在Java中調用Groovy腳本。但是Groovy獨有的特性也使它在開發語言大潮流中獨佔一席。

class Hello{
	static void main(String[] args){
		println("Hello, World");
	}
}

其實,光是輸出語句到控制檯的寫法就有挺多種了,以下展示幾種:

System.out.println("Hello, World");
System.out.println "Hello, World";

println("Hello, World")
println 'Hello, World'
println('Hello, World');

想繼續深入的朋友可以看看W3Cschool的教程:Groovy教程

Groovy官網的文檔和資料也是很不錯的:Apache Groovy

Scala

Scala是一門多範式的編程語言,多範式就是可以使用多種編程方法的意思,而目目前比較流行的編程方法有面向過程、面向對象、函數式程序設計方法。Scala設計初衷是要集成面向對象編程和函數式編程的各種特性。

它相比傳統編程語言最大的優勢在於提供了很好的並行編程基礎框架。而且Scala代碼能很好地被優化成字節碼,運行起來和原生Java一樣快。

object HelloWorld{
	def main(args: Array[String]): Unit = {
		println("Hello, World");
	}
}

感興趣的朋友可以看看菜鳥的教程:Scala教程

Jython

Jython是一個用Java語言寫的Python解析器,可以無縫與Java類結合,使用戶能夠用Python語言來高效生成動態編譯的Java字節碼。而且Jython同時擁有解釋器和編譯器,使其無需編譯就可以測試程序代碼。

print "Hello, World"

如果想在Java中加入Jython的代碼還可以這麼寫:

import org.python.util.PythonInterpreter;

public class JythonHelloWorld{
	public static void main(String[] args){
        try(PythonInterpreter pyInterp = new PythonInterpreter()){
            pyInterp.exec("print('Hello, World')");
        }
    }
}

感興趣的朋友可以看看Jython的官網:Jython官網

JRuby

JRuby是用來橋接Java與Ruby的,可以使用比Groovy更加簡短的語法來編寫代碼,並且能讓每行代碼執行更多的任務。JRuby不僅提供了高級的語法格式,而且也提供了面向對象的實現、閉包等。JRuby跟Ruby相比多了很多基於Java的類庫,雖然Ruby也有很多類庫,但在數量和廣泛性上跟Java是無法相比的。

"puts 'Hello, World'"

JRuby的介紹雖然官網也不錯:JRuby官網

但剛開始學習的話比較推薦去社區看看:JRuby中國社區

Fantom

Fantom是一種通用的面向對象編程語言,可以運行在Java Runtime Enviroment、.NET Common Language Runtime和瀏覽器。Fantom本質上是一種腳本語言,所以也可以使用Fantom解釋器來運行。但Fantom並不能使用Java的類庫,只能使用自己擴展的類庫。

class HelloWorld{
	static Void main(){
		echo("Hello, World")
	}
}

想了解Fantom的朋友可以看看IBM Developer上的介紹:基於 JVM 的新一代編程語言:Fantom

Clojure

Clojure是基於LISP編程語言設計的,可在Java和.NET運行時環境上運行的一種高級的、動態的函數式編程語言。

雖然Clojure也能被直接編譯成Java字節碼,但無法使用動態語言特性以及直接調用Java類庫,與其它的JVM腳本語言不同,Clojure並不算是面向對象的。

(defn hello [& args]
	(println "Hello, World"))

可以在W3Cschool上了解Clojure:Clojure教程

Rhino

Rhino是一個完全使用Java語言編寫的開源JavaScirpt實現,目前由Mozilla基金會管理。它在Java程序中爲最終用戶提供腳本化能力,也就是說可以給JavaScript加個外殼,嵌入到Java中。同時,Rhino的JavaAdapters能夠讓JavaScript通過調用Java的類來實現特定的功能。Rhino被作爲J2SE 6上默認的Java腳本化引擎。

print('Hello, World')

想繼續瞭解的朋友可以看它家官方的文檔:Rhino

或者參考這個博文:Rhino – 基於java的javascript實現

Ceylon

Ceylon是一種面向對象,強調靜態類型的編程語言。它是由Red Hat創建的一種既可以在JVM上運行,也可以編譯爲JavaScript的語言。相對於Java來說,它不僅改進了語言的可讀性和內置的模塊性,還吸收了高階函數等函數語言特性,所以這語言也以業務計算爲重點,但在其他領域也很靈活。

void main(){
	writeLine("Hello, World");
}

有興趣的朋友可以參考IBM Developer的文章:Ceylon:真正的進步抑或只是另一種語言?

總結

上述就是目前比較流行的可在JVM上運行的九種語言,再加上Java就剛好10種。因爲後文會針對Java進行詳細介紹,所以在此就不再贅述啦。本人在查找資料的過程中發現,如果真的要學另一種在JVM上運行的語言,從適用性、普及度來考慮,還是比較推薦Kotlin、Groovy、Scala中挑選。

參考資料:

JVM還支持哪些語言(Kotlin、Groovy、JRuby、Jython、Scala)

以及上述提及的資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章