经常读我的博客的人应该知道,我最喜欢的编程语言是Haskell。我喜欢函数式编程,Haskell是一个能把函数式编程推向极致的语言。虽然如
此,我仍然时刻关注着其它新兴的和即将产生的编程语言,特别是函数式的编程语言,所以,当Scala诞生之初我就知道了这种语言。当时,我粗略的对它了解
了一下,并不是很喜欢;我感觉它的那些语法对于我的口味来说过于甜腻,而且这种语言看起来异常的复杂。然而,一些我很尊敬的人都喜欢这种语言,所以我就再
次的看了看。我的评论并不是基于对这种语言的一个全面的了解之上,只是我通过几周的阅读和实验得到的收获。不管怎样,我已经有足够的认识来声
明,Scala是个有趣的语言,值得去研究,特别是当你有Haskell编程背景的情况下。我使用的是一本“阶梯教程”(Programming In Scala
by Odersky et al),这本书写的非常好,我全力的推荐大家读一下。
我想学一种新的编程语言主要有两个原因。一个是我想找一种跟目前我使用的语言不同的语言,我想寻找一种另外的编程体验。另一个是我想找一种具有很多我从没见过的有趣的新特征的语言。Scala的出现完全满足了我的苛求。.
本质上来讲,Scala是一种运行在JVM之上的语言,它很快,使用它我可以做图形界面编程,web编程(用它的Lift框架),和移动设备编程
(使用Android,我也知道让Scala程序在Android上运行并不是一个很容易的事)。Scala在这些领域出现的时间比Haskell早的
多。我期望Haskell能最终赶上,但是我现在就已经喜欢上了写这些类型的程序了。
从理论的角度来看,Scala的诉求是静态类型背景下的函数式编程和面向对象编程的组合。这可不容易做到。在动态语言里倒是容易些(例如Lisp使
用CLOS),而静态类型会使事情变得非常的复杂,尤其是子类型化和继承方面。Haskell可部分的支持面向对象编程(特别是使用类型类和现有类型),
但我在Haskell里没有发现面向对象风格的继承模型,尽管这是十分有用的。Scala有一个非常复杂的面向对象系统,还包括一些诸如显式sub-和
supertype标记,协方差(covariance)和反变(contravariance)标记,等等。这些都超越了我所见过的其它的面向对象的编
程语言。实际上,Scala实现了把所有的函数性特征都作为对象,所以把它称作一种对象-函数式语言并不准确,不如称作为超级面向对象语言更合适。
我认为Scala的面向对象不是Haskell能比的;它是对于它的这种范式上的一个最佳案例。(我这里忽略掉了那些类型依赖的函数式语言,诸如
Agda/Coq/Epigram,我知道它们,但基本上它们已经不再被当成一种用来做普通编程的语言了。)对于在静态类型的环境中,是否对象已经超过函
数变成一种更基础的结构,我并不清楚。在动态类型语言中,你可以由函数得到对象(可以假设函数就是闭包),或者你可以由对象得到函数,所以两种观念是可以
相互转换的。不论这是不是一种使用静态类型的案例,我想,用两种语言从不同的方向来考虑这个问题是件很有趣的事情。另一方面,我曾学习过
Smalltalk的面向对象特征,我不得不说,我从没见过第二个静态类型的语言具有Smalltalk这样优雅的简单消息传输模型。再一方面,我更希望
用Scala而不是Smalltalk来写一个大型程序。(并且,如果你真的想直接进行消息传输时,Scala也有Actors类库来支持你。)
另一个Scala里我喜欢的东西,也是Haskell共有的东西,就是他们都有学院理论根源。当你在设计一种具有深奥的类型系统的语言时,了解一些
类型理论会非常的有帮助。Scala和Haskell的设计者都清楚这一点,这也就是在这些语言里有很多高质量的特性的原因。我希望有一天那些把希曼式实
用主义当作理论基础的人会闭嘴,因为事实证明通过学院派设计出来的语言才是解决现实问题的上上之选。
我会一直关注着Scala,我希望能对它了解的更多。但我仍然喜欢Haskell,我从来不会打算放弃它。
翻译来源:外刊IT评论
;)
分享到:
相关推荐
Scala语言规范-Scala 是一门类 Java 的编程语言,它结合了面向对象编程和函数式编程。 Scala 是纯面向对象的,每个值都是一个对象,对象的类型和行为由类定义,不同的类可以通过混入(mixin)的方式组合在一起。 Scala...
Scala语言分析报告
Scala是一门类Java的编程语言,它结合了面向对象编程和函数式编程。Scala是纯面向对象的,每个值都是一个对象,对象的类型和行为由类定义,不同的类可以通过混入(mixin)的方式组合在一起。
Scala语言入门
Scala语言规范.zip
《Scala语言规范》非常有利于spark的学习。希望能够帮助到大家。
scala 编程语言bgdgdgdgdgdgdgdgdgdgdg
Dotty 是 Scala 的下一代编译器,也是 Scala 的新语言概念和编译器技术研究平台
第 1 章 SCALA 的概述 11.1 学习 SDALA 的原因11.2 SCALA 语言诞生小故事 1以及 JVM 的关系分析图21.4 SCALA 语言的
Scala 是一种有趣的语言。它一方面吸收继承了多种语言中的优秀特性,一方面又没有抛弃 Java 这个强大的平台,它运行在 Java 虚拟机 (Java Virtual Machine) 之上,轻松实现和丰富的 Java 类库互联互通。它既支持面向...
scala 从入门到精通以及各种使用规范,使用技巧的文档
学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景,提供了大量的Scala实例,同时,也给出底层的原理和相关的...
快学Scala、scala函数式编程、Scala编程实战:三本书籍,带目录和标签
Martin Odersky 用他定义的匹萨语言给了 Java世界一个很大的冲击。尽管匹萨本身没有流行 但它展现了当把面向对象和函数型语言两种风格,技术地且很有品地混搭在一起时,就形成了 自然和强有力的组合。匹萨的设计成为...
Scala 是一门类 Java 的编程语言,它结合了面向对象编程和函数式编程。Scala 是 纯面向对象的,每个值都是一个对象,对象的类型和行为由类定义,不同的类可以通过混 入(mixin)的方式组合在一起。Scala 的设计目的是...
大数据利器之scala开发语言文档,非常详细,一步步讲解。 spark开发语言scala,同样的结果java100行,scala10行。需要樱桃笔记打开
scala是一个经典的语言,Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。但是现在scala的相关学习资料不多,因此,本人总结了几篇写的较好的scala学习资料,包含<ScalaQuery_Commerzbank_2011><twitter-...
Scala.js 是一个将 Scala 语言编译成 JavaScript 的工具,可以让你直接在浏览器上使用 Scala 编写程序。
Scala编程语言抓住了很多开发者的眼球。如果你粗略浏览Scala的网站,你会觉得Scala是一种纯粹的面向对象编程语言,而又无缝地结合了命令式编程和函数式...Scala代表了一个新的语言品种,它抹平了这些人为划分的界限。