文档章节

[转]Scala是个有趣的语言

mj4738
 mj4738
发布于 2011/11/01 23:42
字数 1317
阅读 296
收藏 0

          经常读我的博客的人应该知道,我最喜欢的编程语言是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,我从来不会打算放弃它。 ;-)

本文转载自:http://www.aqee.net/why-scala-is-interesting-scala/

mj4738

mj4738

粉丝 296
博文 489
码字总数 119327
作品 0
崇明
高级程序员
私信 提问
Scala 是个有趣的语言

[英文出处]:Why Scala Is Interesting [中文翻译]:外刊IT评论 经常读我的博客的人应该知道,我最喜欢的编程语言是Haskell。我喜欢函数式编程,Haskell是一个能把函数式编程推向极致的语言。...

鉴客
2010/08/18
1K
1
[转] 五大基于JVM的脚本语言

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 能运行在Java的虚拟机J...

小编辑
2011/07/06
2.6K
4
评估Scala: 从数据工程师的角度评估Scala的现状和发展

本文转自OReillyData微信公众号,版权属O'Reilly Media所有。如需转载请联系OReillyData微信公众号。另,如视频及图片无法正常显示,请登录O'Reilly官网阅读原文:https://www.oreilly.com.c...

O'Reilly
2017/07/03
0
0
JAXenter 对 2018 年技术趋势调查:Python 为后起之秀

这是一份来自 85 个国家的超过 1,000 名参与者得出的数据:这是最新的 JAXenter 调查的结果,该调查的目的是在 2018 年找出那些尤为重要技术主题。调查了包含 10 个主题和答案帮助我们准确描...

周其
2018/05/01
1K
3
Clojure语言 vs Scala 语言

本文是从 Clojure vs Scala - anecdote 这篇文章翻译而来。 我在这里是想跟大家分享一些从World Singles 系统里获得的经验 … 早在2009年11月,我们就开始使用Scala语言了。我们有一个需要运...

红薯
2011/09/20
3.4K
18

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
今天
6
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
5
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
16
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
19
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部