跟上 Scala 的脚步

  • Scott Delap
  • Craig Wickesser
  • 郭晓刚

2007 年 8 月 24 日

话题:Java语言 & 开发架构

Scala 编程语言近来抓住了很多开发者的眼球。如果你粗略浏览 Scala 的网站,你会觉得 Scala 是一种纯粹的面向对象编程语言,而又无缝地结合了命令式和函数式的编程风格。Christopher Diggins认为:

不太久之前编程语言还可以毫无疑义地归类成“命令式”或者“函数式”。Scala 代表了一个新的语言品种,它抹平了这些人为划分的界限。

根据 David Rupp 在博客中的说法,Scala 可能是下下一代 Java。这么高的评价让人不禁想看看它到底是什么东西。

Scala 有几项关键特性表明了它的面向对象的本质。例如,Scala 中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。另外,类可以被子类化,而且 Scala 还提供了基于 mixin 的组合(mixin-based composition)

与只支持单继承的语言相比,Scala 具有更广泛意义上的类重用。Scala 允许定义新类的时候重用“一个类中新增的成员定义(即相较于其父类的差异之处)”。Scala 称之为 mixin 类组合。

Scala 还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数(Nested Function)、序列解读(Sequence Comprehensions)等等。

Scala 是静态类型的,这就允许它提供泛型类、内部类、甚至多态方法(Polymorphic Method)。另外值得一提的是,Scala 被特意设计成能够与Java.NET互操作。Scala 当前版本还不能在.NET 上运行(虽然上一版可以 -_-b),但按照计划将来可以在.NET 上运行。

Scala 可以与 Java 互操作。它用scalac这个编译器把源文件编译成 Java 的 class 文件(即在 JVM 上运行的字节码)。你可以从 Scala 中调用所有的 Java 类库,也同样可以从 Java 应用程序中调用 Scala 的代码。用David Rupp的话来说,

它也可以访问现存的数之不尽的 Java 类库,这让(潜在地)迁移到 Scala 更加容易。

这让 Scala 得以使用为 Java1.4、5.0 或者 6.0 编写的巨量的 Java 类库和框架,Scala 会经常性地针对这几个版本的 Java 进行测试。Scala 可能也可以在更早版本的 Java 上运行,但没有经过正式的测试。Scala 以 BSD 许可发布,并且数年前就已经被认为相当稳定了。

说了这么多,我们还没有回答一个问题:“为什么我要使用 Scala?”Scala 的设计始终贯穿着一个理念:

创造一种更好地支持组件的语言。(《The Scala Programming Language》,Donna Malayeri)

也就是说软件应该由可重用的部件构造而成。Scala 旨在提供一种编程语言,能够统一和一般化分别来自面向对象和函数式两种不同风格的关键概念。

藉着这个目标与设计,Scala 得以提供一些出众的特性,包括:

  • 面向对象风格
  • 函数式风格
  • 更高层的并发模型
    Scala 把 Erlang 风格的基于 actor 的并发带进了 JVM。开发者现在可以利用 Scala 的 actor 模型在 JVM 上设计具伸缩性的并发应用程序,它会自动获得多核心处理器带来的优势,而不必依照复杂的 Java 线程模型来编写程序。
  • 轻量级的函数语法
  • 与 XML 集成
    • 可在 Scala 程序中直接书写 XML
    • 可将 XML 转换成 Scala 类
  • 与 Java 无缝地互操作

Scala 的风格和特性已经吸引了大量的开发者,比如Debasish Ghosh就觉得:

我已经把玩了 Scala 好一阵子,可以说我绝对享受这个语言的创新之处。

总而言之,Scala 是一种函数式面向对象语言,它融汇了许多前所未有的特性,而同时又运行于 JVM 之上。随着开发者对 Scala 的兴趣日增,以及越来越多的工具支持,无疑 Scala 语言将成为你手上一件必不可少的工具。

查看英文原文:Catching Up with Scala
Java语言 & 开发架构