锁定老帖子 主题:为什么选择Scala
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-06
pure 写道 现在的ide感觉真没法用一样,Eclipse和Netbeans的插件都没成功运行过Scala,失望,尽快解决IDE的问题就大有作为了。
NB的插件还是不错的吧,说什么也是dcaoyuan他们搞的,有一些动能确实还没有实现,不过自己稍微修改一下,添加一点Ant脚本也都解决的。个人觉得NB的插件比eclipse好用很多 |
|
返回顶楼 | |
发表时间:2009-08-06
F#?
字数字数 |
|
返回顶楼 | |
发表时间:2009-08-07
最后修改:2009-08-07
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? 简单的说,这些语法糖大家都能想到,干嘛故意搞的和主流语法不一样? Martin Odersky研究编程语言20多年,接触研究过非常多种语言,scala也不是他第一个发明的,因此scala的语法来源非常广,这不能说是scala的问题,我总觉得程序员不应该将语法作为一种语言好坏的理由. 很多scala中的"不同",也是有其意义的,比如[]改成(),是因为"与Java比Scala很少有特例。数组和Scala里其他的类一样只是类的实现。当你在一个或多个值或变量外使用括号时,Scala会把它转换成对名为apply的方法调用。于是greetStrings(i)转换成greetStrings.apply(i)。所以Scala里访问数组的元素也只不过是跟其它的一样的方法调用。"当然,其实他们还是可以做成[],但有这个理由,起码是有情可原的. 但他有些地方过头了,比如元组tuple(就是可以放不同类型的元素的list),下标居然从1开始,而且是_1,_2这样,他们的解释是:"因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。"我狂吐血!tnnd你总的和list的访问方式一致吧,起始下标一个是0,一个是1,还让不让人活了,就我而言,以后如果编程时遇到这两种列表中特定位置取值,肯定要多想一想下标的问题,这就超出了语法的问题了,是真正让人感觉无法接受的. |
|
返回顶楼 | |
发表时间:2009-08-07
最后修改:2009-08-07
引用 但他有些地方过头了,比如元组tuple(就是可以放不同类型的元素的list),下标居然从1开始,而且是_1,_2这样,他们的解释是:"因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。"我狂吐血!tnnd你总的和list的访问方式一致吧,起始下标一个是0, 一个是1,还让不让人活了
如果能够做出真正有意义的创新,语法怪异点也就忍了,没本事却要硬装着与众不同,还企图取代这个那个,groovy就比它务实多了。 |
|
返回顶楼 | |
发表时间:2009-08-07
其实我觉得现在Scala的语言挺优美的,设计的很合理,当然如果你还是以看Java的习惯来对待Scala,难免会有不同意见,我觉得Scala在语法简洁性和易读性还是平衡的很好,毕竟,语法不应该成为你学习语言的障碍
|
|
返回顶楼 | |
发表时间:2009-08-07
prowl 写道 和groovy相比又好在哪?
静态类型。 |
|
返回顶楼 | |
发表时间:2009-08-07
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? 简单的说,这些语法糖大家都能想到,干嘛故意搞的和主流语法不一样? 你跟java程序员推销C#和C++? 你的问题很奇怪,按照你的理论,有了ruby,其他动态语言,比如groovy、javascript也可以歇菜了。 |
|
返回顶楼 | |
发表时间:2009-08-07
icanfly 写道 我觉得曾经有一篇文章说得非常好。大家可以看下,其中一句非常经典:为什么事情非要为了不同而不同?
一语点中scala的生辟语法。这使得从JAVA转向过来变得非常不容易。 拜托你先说明一下,scala哪点是“为了不同而不同” 对于不愿学习新东西的人来说,所有新特性都是“生僻”的,任何转向都是不容易的。 举个例子来说,拿C# 3.0和C# 1.0比较,也可以套用同样的说辞。 |
|
返回顶楼 | |
发表时间:2009-08-07
最后修改:2009-08-07
maddogfyg 写道 Martin Odersky研究编程语言20多年,接触研究过非常多种语言,scala也不是他第一个发明的,因此scala的语法来源非常广,这不能说是scala的问题,我总觉得程序员不应该将语法作为一种语言好坏的理由. 很多scala中的"不同",也是有其意义的,比如[]改成(),是因为"与Java比Scala很少有特例。数组和Scala里其他的类一样只是类的实现。当你在一个或多个值或变量外使用括号时,Scala会把它转换成对名为apply的方法调用。于是greetStrings(i)转换成greetStrings.apply(i)。所以Scala里访问数组的元素也只不过是跟其它的一样的方法调用。"当然,其实他们还是可以做成[],但有这个理由,起码是有情可原的. 使用 () 还有一个原因是要把 [] 用于泛型。 泛型用 <> 时,大于号和小于号的多义性会给语法解析(尤其是支持操作符重载的语言)带来一大堆问题。 (最典型的就是 VC6 里面模板嵌套一定要加个空格) 引用 但他有些地方过头了,比如元组tuple(就是可以放不同类型的元素的list),下标居然从1开始,而且是_1,_2这样,他们的解释是:"因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。"我狂吐血!tnnd你总的和list的访问方式一致吧,起始下标一个是0,一个是1,还让不让人活了,就我而言,以后如果编程时遇到这两种列表中特定位置取值,肯定要多想一想下标的问题,这就超出了语法的问题了,是真正让人感觉无法接受的.
人家几十年前 Lisp 里面就用 fst 和 snd 了,源远流长,给你改成 0 才不妥呢。 tuple 是定长的,访问方式和数组、链表不一样,tuple 如果做成下标取值方式,所有函数的调用性能都会慢一大截 …… 你不满意可以把它转成 Seq 再用下标取值。 你不爽是因为被 java 毒害太久了。 |
|
返回顶楼 | |
发表时间:2009-08-07
sekiyika 写道 pure 写道 现在的ide感觉真没法用一样,Eclipse和Netbeans的插件都没成功运行过Scala,失望,尽快解决IDE的问题就大有作为了。
NB的插件还是不错的吧,说什么也是dcaoyuan他们搞的,有一些动能确实还没有实现,不过自己稍微修改一下,添加一点Ant脚本也都解决的。个人觉得NB的插件比eclipse好用很多 现在可以用了,还不错。 |
|
返回顶楼 | |