`

Scala编程语言

 
阅读更多

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线程模型来编写程序。

  * 轻量级的函数语法

  o 高阶

  o 嵌套

  o 局部套用(Currying)

  o 匿名

  * 与XML集成

  o 可在Scala程序中直接书写XML

  o 可将XML转换成Scala类

  * 与Java无缝地互操作

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

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

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

  Scala与Groovy的对比

  去年早些时候,一篇名为“Scala,Groovy的杀手? ”的博客对Scala和Groovy进行了对比:

  Scala和Groovy之间的核心区别在于前者是静态类型的。有些人可能争辩说这使得达到脚本化目标变得更加复杂了,而脚本化正是Groovy的动机。然而,Scala有完整的体系特征,这使Groovy看上去更像个玩具。比如,Scala有“sequence comprehensions”。该要素导致对算法的表述非常紧凑和强大。

  Scala还有更多被证明是非常有用的特性,如嵌套类,currying和代数类型模式匹配。它还支持类似于JDK1.5所增加的泛型和注解。这些还都只是冰山一角。

  之后,Derek Young撰文“Scala对比Groovy:静态类型是性能的关键”。在文中他举了一个实际的例子,试图说明针对同样的算法,Scala的性能远高于Groovy。

  然而,Scala并不是尽善尽美的,它也有一些明显的缺陷。Rick Hightower在最近发表的一篇博客中,尖锐地批评了Scala的语法问题:

  Scala并不是更好的选择。在阅读了Scala的文档之后,我的想法是:虽然这种语言的特性听起来挺好,但是语法却让我想放弃。为什么事情非要为了不同而不同?Scala让Groovy看起来比以前更加美味可口。

  憎恨是个很强烈的词。我恨Scala的语法。请不要再推进这种语法了。……Scala有好的思想吗?有。借用过来就行了……

  总而言之,Scala看起来像下一个被过度宣传的语言。只需要把其精华引入到Groovy中,然后扔掉那些糟糕的语法。我最喜欢的Scala特性是推理类型和强类型。C#3.0也有这些。(我不用C#,不见得我不喜欢它的一些特性。)

 

 

 

另外,无论是Ruby、Scala还是Groovy都有对应的Web框架,且对应的框架都是用各自对应的语言编写的。这些框架分别是Rails、Lift和Grails。尽管Lift和Grails中的许多东西都从Rails借鉴来的,但是Grails对其他已有Java技术框架进行了很好的继承,这无疑会保护用户或厂商在这方面的已有投资。Grails框架参考文档中这样描述:

  Grails构建在这些概念之上,并且显著地减少了在Java平台上构建Web应用的复杂程度。不同的是,这些是建立在已确立的如Spring和Hibernate这样的Java技术之上的。

  目前,Scala和Groovy两种语言都在快速发展的过程中。就目前的情况来看,Groovy的优势在于易用性以及与Java无缝衔接,Scala的优势在于性能和一些高级特性,如果在发展过程中两者能互相借鉴对方的优点来充实自身,对开发者来讲无疑是福音。正如第一篇所引用的博客作者最后提到的那样:

  大家并不想看到一场殊死斗争,而是想看到更注重实效思想的Groovy团队能与更具有学术思想的Scala团队一起合作,制作出一门既强大又易用的语言。

  你会将赌注押在谁身上呢?

  Scala 发音为 /ˈskɑːlə, ˈskeɪlə/)是一种多范式的编程语言,设计意图是要集成面向对象编程和函数式编程的各种特性。

 

 

 

Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。它也能运行于Java ME, CLDC(Java Platform, Micro Edition Connected Limited Device Configuration)上。目前还有另一.NET平台的实现,不过该版本更新有些滞后。

 

 

Scala的编译模型(独立编译,动态类加载)与Java和C#一样,所以Scala代码可以调用Java类库(对于.NET实现则可调用.NET类库) 。

 

 

Scala包中包含了编译器和类库,以BSD许可证发布。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    深入了解 Scala 编程语言

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

    scala 编程语言

    ### Scala编程语言详解 #### 一、Scala编程语言概述 Scala是一种现代的多范式编程语言,它结合了面向对象编程和函数式编程的特点。Scala的设计目标是解决Java等传统面向对象语言在扩展性和灵活性方面的局限性,...

    Scala编程语言详解(从入门到精通)spark

    ### Scala编程语言详解知识点 #### 一、Scala简介与特性 **Scala** 是一门结合了面向对象编程和函数式编程特点的多范式编程语言。它由 Martin Odersky 在瑞士洛桑联邦理工学院(EPFL)开发。Scala 的名称来源于 ...

    Scala编程语言从入门到精通

    资源名称:Scala编程语言从入门到精通资源目录:【】DesignOfScala【】ExcitedScala_7(1)【】lift-lift_23_sbt-cf313e1【】ScalaTutorial-zh_CN【】Scala_2.7.6_API【】Scala向导(前13章)【】Scala向导(前15章)-p...

    读书笔记:Scala编程语言.zip

    读书笔记:Scala编程语言

    读书笔记:Scala编程语言中文文档为scala的发展助力.zip

    读书笔记:Scala编程语言中文文档为scala的发展助力

    Scala编程 第3版中文版.7z

    《Scala编程(第3版)》面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala编程语言的核心特性,并能够深入理解Scala这门语言在设计取舍背后的动因。即便是不直接使用Scala或从事一线编程工作的...

    Scala编程(第3版)

    《Scala编程(第3版)》面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala编程语言的核心特性,并能够深入理解Scala这门语言在设计取舍背后的动因。即便是不直接使用Scala或从事一线编程工作的...

    读书笔记:记录Scala编程语言的学习过程、代码以及呢个人理解个人理解这一部分可能在docs日志中详细写了中.zip

    读书笔记:记录Scala编程语言的学习过程、代码以及呢个人理解个人理解这一部分可能在docs日志中详细写了中

    Programming.in.Scala.pdf

    《Programming in Scala.pdf》是一本专注于Scala编程语言的书籍。Scala是一种现代的多范式编程语言,专为可扩展性而设计。该书旨在为读者提供深入理解Scala语言的教程。 ### 描述 描述中提及的内容表明,...

    Scala编程(第三版)中英文.zip

    Scala编程(第三版)中英文,代码全 Martin Odersky 是Scala 编程语言的缔造者。他是瑞士洛桑理工学院(EPFL)的教授,同时也是Typesafe, Inc.(已更名为Lightbend)的创始人。他的研究方向是编程语言和系统,更具体...

    Scala编程完整版

    Scala编程完整版是一份深入介绍Scala编程语言的学习资料,它为初学者提供了全面了解和掌握Scala的基础知识。Scala是一种多范式编程语言,融合了面向对象和函数式编程的特性,广泛应用于大数据处理、分布式计算以及...

    Scala_Scala编程

    Scala编程语言由Martin Odersky领导的团队于2001年开始开发,并于2003年首次发布其公开版本。Scala语言的设计受到诸如Erlang、Haskell、OCaml、Java以及自己的前身语言Pizza的启发,它旨在解决传统面向对象语言的...

    大数据书籍-Scala编程(高清)

    《大数据书籍-Scala编程》是一本深度探讨Scala编程语言及其在大数据处理领域应用的专业书籍。Scala作为一种混合型编程语言,融合了面向对象和函数式编程的特性,这使得它在大数据处理框架如Spark中扮演着核心角色。...

    chess-game-scala:用Scala编程语言简单实现象棋游戏

    "chess-game-scala" 这个标题明确指出了我们要讨论的是一个使用Scala编程语言实现的象棋游戏项目。"scala" 是关键标签,表明这个项目是用Scala这一现代、函数式编程语言编写的。通过标题我们可以预见到,这个项目将...

    大数据-Scala编程基础_教学指导

    大数据培训班的这门课程主要涵盖Scala编程基础,内容重点在于帮助学员掌握Scala语言开发环境的搭建以及其...对于想要深入学习大数据技术的人来说,掌握Scala编程语言是基础中的基础,也是进入大数据世界的一把钥匙。

    大数据课程-Scala编程基础-1.Scala语言初识_lk_edit.ppt

    【大数据课程-Scala编程基础-1.Scala语言初识】是针对初学者设计的一门课程,旨在教授如何入门Scala编程,特别适合已有Java基础的学员。Scala是一种在2001年由洛桑联邦理工学院(EPFL)的编程方法实验室研发的语言,...

    Scala编程 pdf

    Scala编程是一种多范式、函数式和面向对象的编程语言,设计目的是为了提高开发者的生产力,同时保持代码的可维护性和高性能。它是由Martin Odersky在2003年设计并实现的,融合了Java虚拟机(JVM)的优势,并引入了...

Global site tag (gtag.js) - Google Analytics