美文网首页JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统
专题列表页
JVM · Java虚拟机原理 · JVM上语言·框架· 生态系统

大部分人大谈特谈JAVA语言,这对于我来说也许听起来很奇怪,但是我无法不去在意。JVM才是Java生态系统的核心啊。

“我真正关心的是Java虚拟机的概念,因为是它把所有的东西都联系在了一起;是它造就了Java语言;是它使得事物能在所有的异构平台上得到运行;也还是它使得所有类型的语言能够共存。”

(James Gosling, Java编程语言的创造者 (2011, TheServerSide))

JVM最初是为了支持java编程语言。然而,随着时间的流逝,越来越多的语言被改编或设计运行在JVM上。除了java语言,比较知名的JVM上的编程语言还有:

####Groovy

>“Groovy有超过Java将能够提供的甜点,例如它具有轻易地在宿主程序中嵌入并编译,以提供定制业务规则的能力,还有它如何为领域特定语言(Domain-Specific Language)提供优雅,简洁并且可读性好的语法的能力.” ( Guillaume Laforge, Groovy的项目带头人)

动态类型和脚本语言(尽管一开始是一种动态语言,但在其 2012年的2.0发行版中也开始加入编译时的静态类型检查了),Groovy的闭包(Closure)是很好的。Groovy使得运行时的元编程、编译时的元编程、动态类型以及静态类型容易处理。

关键词: DSL,Grails,Gradle

####Scala

>“意在使其端正,而不塞入太多的语言特性到其里面,我在Scala上专注于使它变得更加的简单.那是人们常常有的一种误解,他们认为Scala是一种带有许许多多特性的宏大语言.尽管这通常不是真的.它实际上是一个相当小的语言——当Java8面世之时它将比Java更加的小巧。” (Martin Odersky, Scala 创始人)

使用类型推断混合了面向对象编程(OOP)和函数式编程(FP)的一种静态类型编程语言。这意味着Scala程序能够被编写成许多完全不同的风格——纯函数式风格的,不纯函数式的,或混合式风格。

关键词:FP,类型系统

####Kotlin

>“我们认为Kotlin的定位是一种现代化工业语言:它专注于代码重用和可读性的弹性抽象,以及面向早期错误侦测,和明确捕获维护与清理的意图,这些问题的静态类型安全性。Kotlin最重要的使用场景之一是对于一个庞大的Java代码库,其开发者需要一个更棒的语言:你能够将Java和Kotlin自由混合,迁移可以是渐进式的,不需要一下子对整个代码库进行改变。” (Andrey Breslav, Kotlin创始人)

静态类型的语言, 由IntelliJ IDEA团队JetBrains开发。

使用Kotin可以写出一些非常优雅的代码。举个复合函数的例子[6]:

```
/**
* The composition function return a composition of two functions passed to it:
* compose(f, g) = f(g(*)).
* Now, you can apply it to callable references.
*/

fun main(s:" class="blue-link" target="_blank">args: Array) {
val oddLength = compose(::isOdd, ::length)
val strings = listOf("a", "ab", "abc")
println(strings.filter(oddLength))
}

fun isOdd(x: Int) = x % 2 != 0
fun length(s: String) = s.length

fun compose(f: (B) -> C, g: (A) -> B): (A) -> C {
return { x -> f(g(x)) }
}

```

关键词:IDEA,优雅

####Clojure

>“我着手创建一种语言,意在应对我在使用Java和C#编写的一些类型的应用程序——像广播自动化、调度以及选举系统之类那些东西——它们许多都需要解决的并发问题.我发现只用面向对象编程和用那些语言的并发方法,对于处理这些类型的问题并不怎么够好——它们太难了。我是List的拥护者,还有其它的函数式语言,而我想要做的就是解决那些问题,创造一种立足于实际的语言,再也不用拿Java来编程了.” (Rich Hickey, Clojure创始人在2009年InfoQ访谈)

动态类型语言,Lisp方言。Clojure是一种非常类似于Lisp和Scheme的函数式编程语言.函数式范式同那些习惯于Java的面向对象方式并且习惯于其副作用的方式非常不同。

关键词: Lisp,FP