牛逼了!教你用九種語言在JVM上輸出HelloWorld
為了讓Java語言具有良好的跨平臺能力,Java獨具匠心的提供了一種可以在所有平臺上都能使用的一種中間程式碼——位元組碼(ByteCode)。
有了位元組碼,無論是哪種平臺(如Windows、Linux等),只要安裝了虛擬機器,都可以直接執行位元組碼。
同樣,有了位元組碼,也解除了Java虛擬機器和Java語言之間的耦合。這話可能很多人不理解,Java虛擬機器不就是執行Java語言的麼?這種解耦指的是什麼?
其實,目前Java虛擬機器已經可以支援很多除Java語言以外的語言了,如Kotlin、Groovy、JRuby、Jython、Scala等。
之所以可以支援,就是因為這些語言也可以被編譯成位元組碼。而虛擬機器並不關心位元組碼是有哪種語言編譯而來的。
經常使用IDE的開發者可能會發現,當我們在Intelij IDEA中,滑鼠右鍵想要建立Java類的時候,IDE還會提示建立其他型別的檔案,這就是IDE預設支援的一些可以執行在JVM上面的語言,沒有提示的,可以通過外掛來支援。
目前,可以直接在JVM上執行的語言有很多,今天介紹其中比較重要的九種。每種語言通過一段『HelloWorld』程式碼進行演示,看看不同語言的語法有何不同。
Kotlin
Kotlin是一種在Java虛擬機器上執行的靜態型別程式語言,它也可以被編譯成為JavaScript原始碼。Kotlin的設計初衷就是用來生產高效能要求的程式的,所以執行起來和Java也是不相上下。Kotlin可以從 JetBrains InteilliJ Idea IDE這個開發工具以外掛形式使用。
Hello World In Kotlin
Groovy
Apache的Groovy是Java平臺上設計的物件導向程式語言。它的語法風格與Java很像,Java程式設計師能夠很快的熟練使用 Groovy,實際上,Groovy編譯器是可以接受完全純粹的Java語法格式的。
使用Groovy的一個重要特點就是使用型別推斷,即能夠讓編譯器能夠在程式設計師沒有明確說明的時候推斷出變數的型別。Groovy可以使用其他Java語言編寫的庫。Groovy的語法與Java非常相似,大多數Java程式碼也匹配Groovy的語法規則,儘管可能語義不同。
Hello World In Groovy
Scala
Scala是一門多正規化的程式語言,設計初衷是要整合物件導向程式設計和函數語言程式設計的各種特性。
Scala經常被我們描述為多模式的程式語言,因為它混合了來自很多程式語言的元素的特徵。但無論如何它本質上還是一個純粹的面嚮物件語言。它相比傳統編 程語言最大的優勢就是提供了很好並行程式設計基礎框架措施了。Scala程式碼能很好的被優化成位元組碼,執行起來和原生Java一樣快。
Hello World In Scala
Jruby
JRuby是用來橋接Java與Ruby的,它是使用比Groovy更加簡短的語法來編寫程式碼,能夠讓每行程式碼執行更多的任務。就和Ruby一樣,JRuby不僅僅只提供了高階的語法格式。它同樣提供了純粹的物件導向的實現,閉包等等,而且JRuby跟Ruby自身相比多了很多基於Java類庫 可以呼叫,雖然Ruby也有很多類庫,但是在數量以及廣泛性上是無法跟Java標準類庫相比的。
Hello World In Jruby
Jython
Jython,是一個用Java語言寫的Python直譯器。Jython能夠用Python語言來高效生成動態編譯的Java位元組碼。
Hello World In Jython
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
Clojure
Clojure是Lisp程式語言在Java平臺上的現代、函式式及動態方言。 與其他Lisp一樣,Clojure視程式碼為資料且擁有一套Lisp巨集系統。
雖然Clojure也能被直接編譯成Java位元組碼,但是無法使用動態語言特性以及直 接呼叫Java類庫。與其他的JVM指令碼語言不一樣,Clojure並不算是物件導向的。
Hello World In Clojure
Rhino
Rhino是一個完全以Java編寫的JavaScript引擎,目前由Mozilla基金會所管理。
Rhino的特點是為JavaScript加了個殼,然後嵌入到Java中,這樣能夠讓Java程式設計師直接使用。其中Rhino的JavaAdapters能夠讓JavaScript通過呼叫Java的類來實現特定的功能。
Hello World In Rhino
Ceylon
Ceylon是一種物件導向,強烈靜態型別的程式語言,強調不變性,由Red Hat建立。 Ceylon程式在Java虛擬機器上執行,可以編譯為JavaScript。 語言設計側重於原始碼可讀性,可預測性,可擴充套件性,模組性和超程式設計性。
Hello World In Ceylon
總結
好啦,以上就是目前主流的可以在JVM上面執行的9種語言。加上Java正好10種。如果你是一個Java開發,那麼有必要掌握以上9中的一種,這樣可以在一些有特殊需求的場景中有更多的選擇。推薦在Groovy、Scala、Kotlin中選一個。
歡迎工作一到五年的Java工程師朋友們加入Java填坑之路:860113481
群內提供免費的Java架構學習資料(裡面有高可用、高併發、高效能及分散式、Jvm效能調優、Spring原始碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用自己每一分每一秒的時間來學習提升自己,不要再用”沒有時間“來掩飾自己思想上的懶惰!趁年輕,使勁拼,給未來的自己一個交代!
相關文章
- C語言第九篇:各種輸出小星星(迴圈控制)C語言
- C語言的HelloWorldC語言
- C語言輸入輸出C語言
- 教你用21種語言說“你好”——資訊圖
- 【c語言】期望輸出str = hello world 的兩種方法C語言
- Go語言學習(2) - HelloWorldGo
- 22中程式語言的HelloWorld
- 機器語言編寫helloworld
- C語言 第一章 程式設計和C語言 例1.1 要求在螢幕上輸出 This is a C program.C語言程式設計
- C語言輸出多位小數C語言
- 5,輸入與輸出(perl語言筆記)筆記
- java語言的各種輸入情況Java
- golang 快速入門 [3]-go 語言 helloworldGolang
- 零基礎學C語言 HelloWorldC語言
- 用C語言輸出蛇形矩陣C語言矩陣
- 入門輸出Hello World!——C語言C語言
- JVM相容語言 stabJVM
- 淺談各種語言輸出函式小數點 00 返回問題函式
- Go 語言在命令列以表格的形式輸出結構體切片Go命令列結構體
- C語言求教輸出1-100在從100到1C語言
- C語言實現矩陣螺旋輸出C語言矩陣
- R語言:資料輸出至檔案R語言
- 在我眼裡的幾種語言
- JVM 還支援哪些語言JVM
- Java程式設計師應該在2018年學習三種JVM語言Java程式設計師JVM
- C語言輸入一個數輸出對應的值C語言
- C語言程式設計之《資料輸出》C語言程式設計
- 全面輸出JVM配置引數JVM
- 如何在 Ubuntu 上設定多語言輸入法Ubuntu
- Solidity語言學習筆記————24、輸入輸出引數Solid筆記
- 大資料處理需要用到的九種程式語言大資料
- go語言入門教程分享:第一個程式:HelloWorldGo
- 百度開源的 71 個專案,太牛逼了!
- 牛逼了,史上 MySQL 最全最佳化指南,快收藏起來!MySql
- java語言屬於哪種語言Java
- 實驗1 C語言輸入輸出和簡單程式編寫C語言
- 手把手教你用C語言寫一個簡單的quine(輸出自身的程式)C語言UI
- Swift語言指南(九)--基本運算子Swift