牛逼了,教你用九種語言在JVM上輸出HelloWorld

咱們在《深刻分析Java的編譯原理》中提到過,爲了讓Java語言具備良好的跨平臺能力,Java獨具匠心的提供了一種能夠在全部平臺上都能使用的一種中間代碼——字節碼(ByteCode)。html

有了字節碼,不管是哪一種平臺(如Windows、Linux等),只要安裝了虛擬機,均可以直接運行字節碼。程序員

一樣,有了字節碼,也解除了Java虛擬機和Java語言之間的耦合。這話可能不少人不理解,Java虛擬機不就是運行Java語言的麼?這種解耦指的是什麼?編程

其實,目前Java虛擬機已經能夠支持不少除Java語言之外的語言了,如Kotlin、Groovy、JRuby、Jython、Scala等。之因此能夠支持,就是由於這些語言也能夠被編譯成字節碼。而虛擬機並不關心字節碼是有哪一種語言編譯而來的。ruby

常用IDE的開發者可能會發現,當咱們在Intelij IDEA中,鼠標右鍵想要建立Java類的時候,IDE還會提示建立其餘類型的文件,這就是IDE默認支持的一些能夠運行在JVM上面的語言,沒有提示的,能夠經過插件來支持。閉包

目前,能夠直接在JVM上運行的語言有不少,今天介紹其中比較重要的九種。每種語言經過一段『HelloWorld』代碼進行演示,看看不一樣語言的語法有何不一樣。框架

Kotlin

Kotlin是一種在Java虛擬機上運行的靜態類型編程語言,它也能夠被編譯成爲JavaScript源代碼。Kotlin的設計初衷就是用來生產高性能要求的程序的,因此運行起來和Java也是不相上下。Kotlin能夠從 JetBrains InteilliJ Idea IDE這個開發工具以插件形式使用。編程語言

Hello World In Kotlin

fun main(args: Array<String>) { println("Hello, world!") }

Groovy

Apache的Groovy是Java平臺上設計的面向對象編程語言。它的語法風格與Java很像,Java程序員可以很快的熟練使用 Groovy,實際上,Groovy編譯器是能夠接受徹底純粹的Java語法格式的。函數式編程

使用Groovy的一個重要特色就是使用類型推斷,即可以讓編譯器可以在程序員沒有明確說明的時候推斷出變量的類型。Groovy可使用其餘Java語言編寫的庫。Groovy的語法與Java很是類似,大多數Java代碼也匹配Groovy的語法規則,儘管可能語義不一樣。函數

Hello World In Groovy

static void main(String[] args) { println('Hello, world!'); }

Scala

Scala是一門多範式的編程語言,設計初衷是要集成面向對象編程和函數式編程的各類特性。工具

Scala常常被咱們描述爲多模式的編程語言,由於它混合了來自不少編程語言的元素的特徵。但不管如何它本質上仍是一個純粹的面嚮對象語言。它相比傳統編 程語言最大的優點就是提供了很好並行編程基礎框架措施了。Scala代碼能很好的被優化成字節碼,運行起來和原生Java同樣快。

Hello World In Scala

object HelloWorld { def main(args: Array[String]) { System.out.println("Hello, world!"); } }

Jruby

JRuby是用來橋接Java與Ruby的,它是使用比Groovy更加簡短的語法來編寫代碼,可以讓每行代碼執行更多的任務。就和Ruby同樣,JRuby不只僅只提供了高級的語法格式。它一樣提供了純粹的面向對象的實現,閉包等等,並且JRuby跟Ruby自身相比多了不少基於Java類庫 能夠調用,雖然Ruby也有不少類庫,可是在數量以及普遍性上是沒法跟Java標準類庫相比的。

Hello World In Jruby

"puts 'Hello, world!'"

Jython

Jython,是一個用Java語言寫的Python解釋器。Jython可以用Python語言來高效生成動態編譯的Java字節碼。

Hello World In Jython

print "Hello, world!"

Fantom

Fantom是一種通用的面向對象編程語言,由Brian和Andy Frank建立,運行在Java Runtime Environment,JavaScript和.NET Common Language Runtime上。其主要設計目標是提供標準庫API,以抽象出代碼是否最終將在JRE或CLR上運行的問題。

Fantom是與Groovy以及JRuby差很少的同樣面向對 象的編程語言,可是悲劇的是Fantom沒法使用Java類庫,而是使用它本身擴展的類庫。

Hello World In Fantom

class Hello { static Void main() { echo("Hello, world!") } }

Clojure

Clojure是Lisp編程語言在Java平臺上的現代、函數式及動態方言。 與其餘Lisp同樣,Clojure視代碼爲數據且擁有一套Lisp宏系統。

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

Hello World In Clojure

(defn -main [& args] (println "Hello, World!"))

Rhino

Rhino是一個徹底以Java編寫的JavaScript引擎,目前由Mozilla基金會所管理。

Rhino的特色是爲JavaScript加了個殼,而後嵌入到Java中,這樣可以讓Java程序員直接使用。其中Rhino的JavaAdapters可以讓JavaScript經過調用Java的類來實現特定的功能。

Hello World In Rhino

 print('Hello, world!')

Ceylon

Ceylon是一種面向對象,強烈靜態類型的編程語言,強調不變性,由Red Hat建立。 Ceylon程序在Java虛擬機上運行,​​能夠編譯爲JavaScript。 語言設計側重於源代碼可讀性,可預測性,可擴展性,模塊性和元編程性。

Hello World In Ceylon

 shared void run() { print("Hello, world!"); }

總結

好啦,以上就是目前主流的能夠在JVM上面運行的9種語言。加上Java正好10種。若是你是一個Java開發,那麼有必要掌握以上9中的一種,這樣能夠在一些有特殊需求的場景中有更多的選擇。推薦在Groovy、Scala、Kotlin中選一個。

相關文章
相關標籤/搜索