中国领先的IT技术网站
|
|

Scala将成为现代Web 2.0的发起语言

Scala做为一个相对年轻的编程语言,近来有着不错的发展势头:火爆的Twitter以及LinkedIn成为了其进军Web 2.0世界的第一步。本文对Scala在现代Web 2.0中的影响力进行了分析。

作者:vivizhyy 译来源:vivizhyy的博客|2009-09-02 17:56


一个 Twitter 的开发人员说过,Scala 将会成为现代 Web2.0 的发起语言。LinkedIn 也用这种语言。同样许多其他大的公司如 Sony Picture, EDF, SAP 也开始使用这种语言。

51CTO编辑推荐:Scala编程语言专题

Scala 名字的含义

Scala 意为可扩展的(scalable)语言,意味着开始时很小但是可以长久发展。对于新接触 Scala 的人来说,它看起来也许像脚本语言。但是 Scala 并不是真正的脚本语言,这也不是 Scala 主要的特性。实际上,它能够做到 Java 能做到的一切事情并且能提供超出 Java 能力范围之外对于大系统的支持。Scala 设计的标准之一就是希望创造一种能够适于任何从小程序发展到大系统却不需要变更架构的语言。

Scala 的发展

90 年代 Martin Odersky 加入到开发 Java 语言和他的编译器。他和 Philip Wadler 研究员一起开发了最终成为泛型 Java( GJ ) 的 Pizza, 后来又加入到 Java 5 的开发中。Martin Odersky 一直从事编写 javac 编译器。GJ 的编译器也就是他们做的扩展,先于 SUN 公司接纳 GJ 到标准的 Java 中很长时间 —— 因为 SUN 公司先接纳了编译器。

1999 年 Martin Odersky 到瑞士从事一些更基础的课题工作。他开始尝试将面向对象和函数很好的结合起来。他们已经在 95/96 年在 Pizza 上做过尝试,但是只成功了一半,因为那时候他们将 Java 作为基础语言将要处理很多不精细的地方。Java 的扩展性并不理想。所以在 2000 初, Martin Odersky 和他的小组在 EPFL 开发了一门新语言能够和 Java 互操作但是能够有效地将面向对象和函数编程技术结合起来。

他所尝试的这些语言中,第一次被叫做 Funnel, 第二次的叫做 Scala. 第二次试验的结果非常漂亮,所以他们将其打包作为实验版发布,这样 Scala 就成为一个真实的语言产品供人们试用。他们将一些粗糙的边缘进行抛光,做了一些小的语法变化,重写了 Scala 的工具以确保 Scala 语言和它的工具能够维持大量的运用。他们在 2006 年发布了 Scala 第二版,然后它迅速地获得了人气。

结合面向对象和函数编程的优势

函数编程让你能够通过运用简单的部件构建你感兴趣的内容,因为它能够提供强有力的粘合力。函数以一种有趣的方式运用你程序的元素并且将他们和其他的元素进行粘合。函数编程的一个好处就是你能够想运用一个数据那样运用函数。一种几乎在所有编程语言中都能有典型的数据类型就是 ”int”: 你可以在任何地方申明一个 int 值,包括在一个函数中,你可以将它传递给一个函数,将它从一个函数中返回或者将它存储在一个字段中。这些特性提供给你一个构建自己结构的强有力的方式,定义真正高层级的库,或者去定义新的领域特殊语言(DSL)。

从另一个方面来说,面向对象编程提供了构建系统组件和变更复杂系统的优秀解决方式。继承和多态提供了灵活的方式去构建和组织命名空间。并且已经拥有比较好的编程工具,比如在 IDE(集成开发环境)中当打下一个点时弹出的用作提示有何种方法可用的上下文提示。

Scala 开发中的困难和解决方式

将面向对象和函数式编程结合存在的挑战是,如何将这两边有效的组织起来让他们看上去是一种语言而不是两种。因此如何将这两种编程方式中特性去除一部分成为重头戏。

如果将两种编程方式完整地结合,最终只可能得到的是交互很少的两种子语言。挑战在于,如何从两种构造中定义构造。举个例子来说,在函数编程语言中一个函数值对应于面向对象中的一个对象。你可以说,这是一个拥有 “apply” 方法的对象,因此我们能将一个函数值说成是一个对象。另外一个例子,函数编程中的基本代数类型可以对应成面向对象中的多重继承,Java 中静态字段和方法也存在同样的问题。因此,Scala用将其替换成单例对象的成员的方式消除这种冲突。像这样的例子还有很多,Scala 的开发团队正在致力于消除语言中类似的冲突并且统一构建成别的东西。

Scala 开发过程中遇到的最大的困难

开发编译器的技术是最大的挑战。有趣的是,这些困难更多的来自于面向对象这边。因为面向对象中高级的静态类型系统十分罕见,并且他们中没有一个是主流。Scala 比 Java 或者和 Java 类似的语言在类型系统上拥有更强的表现力,所以需要通过开发出一些新颖的类型和为组件构建更多抽象类来开辟新的领域.。这带来了一些开发 Scala工作的困难也带来了一些研究成果。

另一个困难的部分和交互有关。为了取得非常好的交互效果必须将 Java 中的一切都映射到 Scala 中。在想要将 Java 库完全映射到Scala 中和避免 Java 中的多重构造之间总是存在紧张的状况。这是一个永久的有挑战里的工程问题,虽然经过了不少的工作但是最终的结果还是令人满意。

Scala 设计的目的

为了将编程变成一种享受,Martin Odersky 和他的同事做了不少工作。Scala 尽可能多的移除了传统高级协议编程语言中类似于咒语的语法,Scala 拥有强大的表现力因此开发者可以以自己喜欢的方式来描述事情。Martin Odersky 在开发 javac 的时候就领悟到 Java 程序员需要做的多少无用功,很多样本是不需要的。

Scala 语言的灵活性是一件强有力的工具但是这也有两面性。它赋予了程序员书写自由的同时也赋予了避免错误的责任。从哲学的意义上来说,这是 Scala 和 Java 最大的不同之处。Java 拥有非常强的概念规范,因此任何一个 Java 程序都和周围其他任何一个 Java 程序非常相似,并且这样能够方便的进行程序员交替。但是 Scala 并没有这样的统一性,因为这是一门很有表现力的语言。

你可以用很多种方式书写 Scala 程序,如果你是一个刚刚开始 Scala 的 Java 程序员,你也可以写成 Java 程序那样。这让编程小组非常容易的迁移到 Scala, 并且将项目风险降低。程序员可以先在非关键的部分试用然后在他们觉得合适的时候再迅速的扩展到其他的部分。

同样你也可以把 Scala 程序写成完全的函数式风格,和 Java 程序一点也不像。通常这样的话, 程序看起来会更简洁。这种方式带来的好处就是,你可以在 Scala 中构建类似于高层次的库的或者领域特殊语言(DSL)成你自己的俗语。通常你需要混合几种不同的语言或者配置标注来达到相同大的目的。所以最终,Scala的单语言做法会带来简单的解决方案。

Twitter 使用 Scala

Twitter 使用 Scala 作为后台编写语言最终运行良好。Twitter 已经持续增长,并且稳定性日益成为其增长的瓶颈,它使用 Scala 也是 Scala 语言的一次良好测试。当一个引人注目的网站比如 Twitter, 用了一个新语言,对于这个语言来说是一次酸性测试 —— 主要的问题会被迅速发现并且被强化出来。

还有一些其他的知名公司使用 Scala. Sony Picture Imagework 用 Scala 写它的中间层软件,欧洲最大的能源公司 EDF 在它的贸易部门用 Scala 构建合同模式。SAP 和 西门子在他们的开源 ESME 工具上用 Scala。这仅仅只是许多例子中的三个而已。

Scala 将成为现代 Web2.0 发起者

Twitter 并不是惟一一家使用 Scala 的公司,LinkedIn 也用 Scala.

Scala 提供了在稳定的高性能平台(Java 虚拟机)上生成的能力同时也是一门敏捷性语言。这一类型的语言也有其他的选择,例如 Jython, JRuby, Groovy 和 Clojure, 但是这些都是运行在 JVM 上的动态类型语言。

问题是对静态类型的设定是否习惯,这样问是因为这将在早些时候带来更多的问题,它给了你一个安全的重构网络,或者它帮助提高了性能。或者你需要一个完全动态的语言因为想用元程序做一个喜欢的东西。如果你偏向使用静态类型的语言,Scala 绝对是一个最适合的选择。

Scala 语言的特性

Scala 语言的特性有许多,例如高阶函数和对象、抽象类型绑定,actor 使得函数在 Scala 中能是一个子类成为可能,Scala 中的设计模式使得面向对象和函数编程无缝结合。

Scala 的发展方向

Scala 的下一个版本 Scala 2.8 将致力于高性能的数组操作,重新界定集合和快速永久的数据结构等。Scala 2.8 将在今年的下一个季度发布。

长久来看,Scala 对并发和并行有兴趣,因此正在支持多核处理器和其他并行系统上寻找新的道路。Scala 已经有一个受欢迎的 actor 系统,它能够高水平的表现并发,这已经在 Twitter 的消息传递上已经得到证实。有趣的事情是,actor 并不是 Scala的语言特性,它完全是 Scala 的一个库。这是 Scala 灵活性的良好的见证者:只要用对了原语和库中的抽象,你可以在程序中编写像语言特性的东西。

Scala 将在数据并发和流编程上提供和 actor 一样良好的表现。在未来我们极有可能需要一些并发抽象来利用多核因为不同的并行和并发情况需要不同的工具。Scala 库的基础的做法正是与此相关,因为它让我们将混合和匹配的概念实现成为类和对象,这样能够快速前进而不是将所有的这些都放入一个语言和一个编译器。在未来的 5 年内,Scala 都将致力于此。

【编辑推荐】

  1. Scala编程语言
  2. Scala和Clojure,以及优秀的企业级语言之道
  3. Scala IDE支持现状报告:三大巨头面面相觑
  4. Scala的优点与缺陷:深沉而有趣的继承者
  5. Scala和Erlang,以及多核主导的未来
【责任编辑:杨赛 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

精通JBuilder 2006

JBuilder 2006是一款强大的Java企业级开发平台,其集成了几乎所有的Java技术,涵盖了软件开发生命周期的各个过程。本书深入浅出地介绍了JBu...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊
× 学习达标赢Beats耳机