Scala十岁了
十年之前的 1 月 20 日,Michel Schinz 宣布了 Scala 编程语言的第一个实现。在宣布之时,Scala 被描述为“一种平滑地集成了面向对象编程和函数式编程的语言”,而且“是为以简洁、优雅且类型安全的方式表达常见编程模式而设计的”。
当时是这么说的:
我们宣布,Scala 编程语言的第一个实现已经可用。Scala 平滑地集成了面向对象编程和函数式编程。它是为以简洁、优雅且类型安全的方式表达常见编程模式而设计的。Scala 引入了一些创新性的语言构件。例如:
- 抽象类型和 mixin 统一了来自对象和模块系统的理念。
- 类层次结构之上的模式匹配统一了函数式和面向对象的数据存取。它极大地简化了 XML 树的处理。
- 灵活的语法和类型系统支持构造高层的库和新的领域特定语言。
与此同时,Scala 还兼容 Java。无需胶水代码和额外声明,Java 的类库和框架都可以使用。
Scala 当前的实现运行在 JVM 上。它需要 JDK 1.4,可以在 Windows、MacOS、Linux、Solaris 及其他多数操作系统上运行。Scala 的一个 .net 版本正在开发之中。
尽管 .net 版本已经不再维护,但当时之所以要开发这个版本,其目标是提供一种能够运行在这两种虚拟机之上的、可以在不同操作系统间移植的公共语言。然而,随着 JVM 的 JIT 的改进,以及对 Java 字节码的依赖不断的增加,到 Scala 2.10 发布时,.net 版本就中断了。
Scala 将函数式编程带入了主流 JVM 语言中,而且直接刺激了 Java 8 即将带来的 lambda 表达式(往往被不正确地称为闭包)和接口默认方法等特性。Scala 很早就通过函数和 Traits 提供了对这些特性的支持,它们为以更简洁、可测试性更好的方式编程提供了新方法。
在 Scala 取得成功的同时,复杂性也随之而来,因为这些特性是把双刃剑,代码的可读性可谓冰火两重天。Scala 允许将任何 Unicode 标识符用作方法名和函数(包括符号),标准 Scala 类库已经发展到包含=:=、:+和:\等函数。Scala 的取舍是以潜在的可读性损失为代价,改进编写的灵活性。
最后,Scala 仍然把自己看作一门研究性语言,一直在尝试新特性并弃用较旧的功能(比如原始的 Actors 包,它为 Scala 带来了和 Go 语言的 coroutine 类似的声望)。在不同版本之间,生成的字节码也有所变化,这意味着为当前的 Scala 版本编译的开源项目数量很有限,而且尽管 2.10 已经发布一年有余了,但是主要 Scala 版本之间的过度往往还是非常痛苦。
将于今年发布的 Java 8 会把 Scala 的一个特性子集带向 JVM,那么看一下 Scala 下一步会添加什么特性,将会非常有趣。二进制兼容会给语言带来稳定,但是看上去现在离二进制兼容之遥远,几乎和十年前一样,不过时间会证明一切。
下一个十年,你认为 Scala 会走向何方呢?