论坛首页 Java企业应用论坛

为什么选择Scala

浏览 28074 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-08-08  
cscript 写道
引用
人家几十年前 Lisp 里面就用 fst 和 snd 了,源远流长,给你改成 0 才不妥呢。

源远流长又咋样,能说明一个下标从1开始一个下标从0开始是合理的吗, MIT源远流长的6.001不是被Python取代了吗?再说C语言的历史不比lisp短多少。

取代?去查查清楚再说
0 请登录后投票
   发表时间:2009-08-08  
cscript 写道
引用
对于不愿学习新东西的人来说,所有新特性都是“生僻”的,任何转向都是不容易的。

这句话的前提是错误的,因为scala的很多特性根本就不是新东西。C#、Scala都有数组、模板,但是C#采用的语法和大部分已有的编程语言是相同的,所以我觉得C#比scala简单,scala的数组、模板有什么本质提高的地方吗?

引用
举个例子来说,拿C# 3.0和C# 1.0比较,也可以套用同样的说辞。

这个例子举的不准,新版本C#有模板、类型推理等C# 1.0没有的特性,相对于C# 1.0来说是有意义的创新。但是,C#1.0相对于Java来说,把synchornized改为lock、super改为base的行为就是属于典型的“为了不同而不同”。

Java在改造C++的时候把惯用的base class改称super class,C#只是更多的跟随了C++的“传统”。Java把protected的语义改得跟C++不同就是典型的“为了不同而不同”。
C的祖先之一,BCPL,里面还是用$(和$)而不是花括号来界定块的,后来的B语言怎么就“为不同而不同”用了花括号呢?还顺带影响了C、C++、Java、C#、JavaScript、ActionScript……在这问题上较真本来就很难有多少收获

另外C#的泛型不是模板,至少不是C++意义上的模板。

cscript 写道
引用
人家几十年前 Lisp 里面就用 fst 和 snd 了,源远流长,给你改成 0 才不妥呢。

源远流长又咋样,能说明一个下标从1开始一个下标从0开始是合理的吗, MIT源远流长的6.001不是被Python取代了吗?再说C语言的历史不比lisp短多少。

计算机科学的历史本身就不长,从这点出发说C的历史没比LISP短多少也没错。但LISP(1958)可是跟FORTRAN(1957)一档的老语言,跟C(1972)这么年轻的语言比……
大大们要是学Eiffel(1985)的话肯定会觉得它的设计者太蛋疼了,用语跟现在常用的OOP用语几乎完全不同。但那可是OOP语言的先驱之一,跟后来成为主流的C++(1983)同辈。它没能成为所谓“主流语言”,从现在的角度看反而是另类了。但要说到契约编程、CQS(command-query separation)那都是Eiffel的特征。如果知道command和query是Eiffel里feature两个类别,而feature就是Eiffel里“方法”的叫法,CQS这个名词就好理解了。

Scala最创新的地方是OO与FP在类型系统层次上的融合。还没有什么别的语言能做到这么深度的融合(例如Fan的作者就宁可不做这么彻底)。Odersky在设计Scala的时候已经是尽量少跟Java不同了……

反正语法再怎么不同,只要概念相似就不难学习。语法差异就忍忍吧。连从C迁移到C++都要痛苦很久,还跑出POD类型之类的概念,何况从Java到Scala呢。
1 请登录后投票
   发表时间:2009-08-08  

顶楼上,scala在与Java的相似的语法上并没有很大的不同,

scala引进fp,促使oo和函数式编程做合适的融合,新引进fp的语法,和mixin的与Java不同的继承初始化顺序才比较难理解。
0 请登录后投票
   发表时间:2009-08-09  
这篇文章不知那里看过.
0 请登录后投票
   发表时间:2009-08-11  
chenlb 写道
这篇文章不知那里看过.

楼主的文章是从《programing in scala》 里面翻译出来的。
0 请登录后投票
   发表时间:2009-08-11  
看看TIOBE现在世上有多少种语言,你就会发现以java语言的观点去看待一门新语言有多么狭隘了。
C++是一门伟大的语言,他扩充了C并完全兼容C语言,但也正因为完全兼容C语言,让他背上了很大的包袱。所以才有java语言的出现,而且java语言也不是横空出现的,其实他吸收的C++的很多成果,比如异常的概念,是从一篇关于C++的论文里出来的。总而言之,正因为java摆脱了C的束缚才能有如此的成就。
现在,如果语言要做突破性的进步,你还希望他和java最大程度的类似吗?如果完全相同,又何来进步,如果就像groovy那样,那是一门新语言还是一个javaPlus?(没有贬低groovy的意思,不过两种语言定位不同。)

程序员是个充满挑战的职业,你必须保有激情,你必须得学习,终生的学习(其实任何职业都是一样的)。如果一门新技术出来以后,你的第一念头是“靠!又有东西要学了。”而不是“看看东西又给我带了了什么突破性的进步?”。
无论如何,没有激情的工作是苦行,对公司是苦行,对你自己也是……
0 请登录后投票
   发表时间:2009-08-11  
cscript 写道
文章花了很大的篇幅说明静态类型的好处,但是静态类型的好处并不是scala独有的,效率、可检验属性、安全重构等等特性,哪家静态类型语言没有啊?都21世纪了,还把这些当成自己的特色。至于类型推理、匿名函数,新版的C#、C++都有这些特性,又不是scala的专利。

有人对scala的评价如下,我觉的很有道理:
C# 3.0 has a lot of the features that Scala has and they are much more palatable than the way Scala implements them. Why come up with a non-mainstream syntax for existing feature?

简单的说,这些语法糖大家都能想到,干嘛故意搞的和主流语法不一样?


文章花了很大时间介绍“静态语言”的好处,他确实是介绍静态语言的好处,没有说是scala独有的。至于为什么要介绍他,那是因为在很长时间里静态语言被误解了,总以为动态语言是未来的趋势,不知道你有没有,反正我在未学习scala之前是这样的。
一种新语言语法当然要和旧语言有所不同,不然何来提升?所谓的“主流”语法也不是一开始就这样的,也是在不断进化的。至于改进得对不对,我认为绝大多数都是对的,业界的很多大佬也都认可。你的看法呢,你可以学习了再说。


maddogfyg 写道
但他有些地方过头了,比如元组tuple(就是可以放不同类型的元素的list),下标居然从1开始,而且是_1,_2这样,他们的解释是:"因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。"我狂吐血!tnnd你总的和list的访问方式一致吧,起始下标一个是0,一个是1,还让不让人活了

tuple下标从1开始我感觉没啥问题,倒是array为什么不从1开始?估计还是为了和java兼容吧。不然java里面a[0],变成scala里面的a(1)不让人奔溃才怪。
maddogfyg 写道
就我而言,以后如果编程时遇到这两种列表中特定位置取值,肯定要多想一想下标的问题,这就超出了语法的问题了,是真正让人感觉无法接受的.

会遇到吗?tuple不是数组,你把他看成一个临时对象更合理一点。_1、_2看成他的属性,你把tuple当成数组才让人无法接受。
0 请登录后投票
   发表时间:2009-08-11  
徐风子 写道
看看TIOBE现在世上有多少种语言,你就会发现以java语言的观点去看待一门新语言有多么狭隘了。
C++是一门伟大的语言,他扩充了C并完全兼容C语言,但也正因为完全兼容C语言,让他背上了很大的包袱。所以才有java语言的出现,而且java语言也不是横空出现的,其实他吸收的C++的很多成果,比如异常的概念,是从一篇关于C++的论文里出来的。总而言之,正因为java摆脱了C的束缚才能有如此的成就。
现在,如果语言要做突破性的进步,你还希望他和java最大程度的类似吗?如果完全相同,又何来进步,如果就像groovy那样,那是一门新语言还是一个javaPlus?(没有贬低groovy的意思,不过两种语言定位不同。)

程序员是个充满挑战的职业,你必须保有激情,你必须得学习,终生的学习(其实任何职业都是一样的)。如果一门新技术出来以后,你的第一念头是“靠!又有东西要学了。”而不是“看看东西又给我带了了什么突破性的进步?”。
无论如何,没有激情的工作是苦行,对公司是苦行,对你自己也是……


说的实在是太对了!!!  
0 请登录后投票
   发表时间:2009-08-11  
学一个新语言之前,了解为什么要学它,很重要。
0 请登录后投票
   发表时间:2009-08-11  
关于TIOBE上scala和groovy的趋势我整理了一下。不会贴图,就发链接了。
http://iswind.iteye.com/admin/blogs/440083
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics