锁定老帖子 主题:为什么选择Scala
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-07
引用 对于不愿学习新东西的人来说,所有新特性都是“生僻”的,任何转向都是不容易的。
这句话的前提是错误的,因为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的行为就是属于典型的“为了不同而不同”。 |
|
返回顶楼 | |
发表时间:2009-08-07
最后修改:2009-08-07
引用 但他有些地方过头了,比如元组tuple(就是可以放不同类型的元素的list),下标居然从1开始,而且是_1,_2这样,他们的解释是:"因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。"我狂吐血!tnnd你总的和list的访问方式一致吧,起始下标一个是0,一个是1,还让不让人活了,就我而言,以后如果编程时遇到这两种列表中特定位置取值,肯定要多想一想下标的问题,这就超出了语法的问题了,是真正让人感觉无法接受的.
人家几十年前 Lisp 里面就用 fst 和 snd 了,源远流长,给你改成 0 才不妥呢。 tuple 是定长的,访问方式和数组、链表不一样,tuple 如果做成下标取值方式,所有函数的调用性能都会慢一大截 …… 你不满意可以把它转成 Seq 再用下标取值。 你不爽是因为被 java 毒害太久了。 老兄没明白我的重点,我真的不介意他是从0开始还是从1开始,事实上对于所有的语言,我觉得从1开始更自然,更能减轻程序员的负担,毕竟更符合日常思维。我的不满,是他把tuple和list两个非常类似的东西搞得不一致,这加重了程序员的思维负担。你和别的语言差的再多也无所谓,但不要语言中搞这种不一致的思维方式。 我对于语法的异同,基本不太在意,程序语言这点不同不算什么,法语、西班牙语的动词变位那么变态不是还有很多人乐此不疲的去学,但语言的设计必须要尽可能地减少程序员负担,减少可能出现的问题,如果哪位熬夜加班的程序员脑子短路把tuple当作从0开始,我觉得scala语言或者说设计者本身是有责任的。我对于scala是相当看好的,只是希望它能更符合大众程序员的需要。 从另一个角度讲,如果scala是完全的自成一派,我想大家也就不会有这么多怨言了,但它既然继承了java这么多的东西,并希望它能取代java,就应该对广大java程序员负责,减轻转换负担,尤其是这完全没有技术上的难度。 |
|
返回顶楼 | |
发表时间:2009-08-07
最后修改:2009-08-07
我觉得我们可以以更积极的眼光去看 Scala:
1、语法问题。如果你舍得花时间学 Python、Ruby,那你也可以舍得花时间学 Scala,而且时间肯定比这两个要少,因为有现成的你已经非常熟悉的类库可用; 2、Scala 和 Groovy,一个是静态的,一个是动态的,二者都是 Java 很好的补充。 3、我觉得类型推断是亮点。 |
|
返回顶楼 | |
发表时间:2009-08-07
引用 人家几十年前 Lisp 里面就用 fst 和 snd 了,源远流长,给你改成 0 才不妥呢。
源远流长又咋样,能说明一个下标从1开始一个下标从0开始是合理的吗, MIT源远流长的6.001不是被Python取代了吗?再说C语言的历史不比lisp短多少。 |
|
返回顶楼 | |
发表时间:2009-08-07
最后修改:2009-08-07
yiding_he 写道 我觉得我们可以以更积极的眼光去看 Scala:
1、语法问题。如果你舍得花时间学 Python、Ruby,那你也可以舍得花时间学 Scala,而且时间肯定比这两个要少,因为有现成的你已经非常熟悉的类库可用; 2、Scala 和 Groovy,一个是静态的,一个是动态的,二者都是 Java 很好的补充。 3、我觉得类型推断是亮点。 我也是非常喜欢类型推断,scala到底能不能流行不好说,但我想它起码能让很多人思索,到底动态类型真有那么好吗?安德尔斯的一句话对我影响很大:“你告诉编译器的越多,编译器能为你做的就越多”,我一直近于固执的认为,静态语言是做基础架构的必然选择,看看c#和scala,其实静态语言的效率可以提升到相当高的水平。 还有个问题就是框架的应用,现在大多数程序员都是骑在别人的轮子上,自己写的代码数量已经比以前少的多了,用动态语言的优势已经没有以前那么大了,而且静态语言的框架性能可以(我不是说一定,是说可以)做的比动态的好不少。 现在都推崇ruby、python,很大程度上不是java语言本身的问题,而是业界把java这个体系搞得很高端很复杂,随着java渐渐轻量化以及c#、scala这些语言越来越流行,静态语言的优点慢慢会被重新发现的。 |
|
返回顶楼 | |
发表时间:2009-08-07
飘过,看过,留言过。
|
|
返回顶楼 | |
发表时间:2009-08-07
哎,感叹下……
文档文章看了不少,研究编码做得不多 很多情况下都人云亦云了—— 闭关一段时间,牢固下基础。尝试学习研究下这些新技术。 |
|
返回顶楼 | |
发表时间:2009-08-07
cscript 写道 引用 人家几十年前 Lisp 里面就用 fst 和 snd 了,源远流长,给你改成 0 才不妥呢。
源远流长又咋样,能说明一个下标从1开始一个下标从0开始是合理的吗, MIT源远流长的6.001不是被Python取代了吗?再说C语言的历史不比lisp短多少。 不要太激动了。:) 很难说从0开始和从1开始哪个更合理, 我想设计成这样主要也是考虑程序员的习惯。在大多数主流语言中list都是从0开始。 而支持tupe的语言基本tupe都是从1开始。 这个是符合习惯的。 至于MIT的例子并不合适。 MIT用python代替scheme 不纯在是否符合习惯的问题。 python优于scheme的地方主要是python被使用的更多 不管是在别的课程中还是在现实世界中都是这样。 |
|
返回顶楼 | |
发表时间:2009-08-07
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的行为就是属于典型的“为了不同而不同”。 你还是没搞清楚要点。 新东西?哪个语言是完全的新东西?C#那些东西还不是跟别人学的嘛。 我针对的是那些固守java的人。你拿C#来搅合,根本就是牛头不对马嘴。 “C#采用的语法和大部分已有的编程语言是相同的”,拜托,什么是“大部分已有的编程语言”?难道C#比scala更接近java?还是更接近ruby、python、groovy、lisp、haskell、javascript?你要是说C# 3.0比scala更接近C# 1.0,那就算了。。。 最后,其实我挺喜欢C#把synchornized改为lock,因为前者又臭又长我老是要拼错。对于我,这就是一个改进。 |
|
返回顶楼 | |
发表时间:2009-08-07
最后修改:2009-08-07
cscript 写道 引用 人家几十年前 Lisp 里面就用 fst 和 snd 了,源远流长,给你改成 0 才不妥呢。
源远流长又咋样,能说明一个下标从1开始一个下标从0开始是合理的吗, MIT源远流长的6.001不是被Python取代了吗?再说C语言的历史不比lisp短多少。 tuple 取元素不是下标 …… tuple 还作为函数的参数而存在,如: def f (param1: Int, param2: Int) = ... 这时如果取第 1 个参数 …… 硬要说成取第 0 个参数? 而数组、list 下标从 0 开始有多根深蒂固就不提了,如果从 1 开始世界要大乱了 …… 不过你这么有想法,可以创建一个 scala 的 branch,把它们全部统一: 将 Tuple1 到 Tuple22,改成 Tuple0 到 Tuple21,把 Product1 到 Product22 全部改成 Product0 到 Product21,提取元素的方法通通从 _0 开始 …… 如果赞同的人一大堆,很快就能 merge 进去了,祝您成功! ============== ps1: 其实 ._1 ._2 用得很少 …… 用模式匹配,从 0 或者 1 开始算都没关系。 val t = (2, 3) val (a, b) = t // a=2, b=3 val l = List(1,2) val List(c, d) = l // c=1, d=2 ps2:有些不同的东西是受商业因素影响的:要宣传自己多牛,就得多造些名词,以免一下就被人发现这个东西几十年前就在 lisp 和 smalltalk 中出现过了。 ps3:类型推断不是静态语言的专利。Netbeans 的 ruby 插件已经可以利用类型推断来找 bug 了。 |
|
返回顶楼 | |