JavaOne 2012:Scala 2.10的新增功能

越来越午饭后,我去了希尔顿金门6/7/8看到马丁·奥德斯基的( 类型安全 )呈现‘什么在斯卡拉2.10的新功能。’ 总是有机会听到语言的创建者讨论他所创建的语言。

Odersky通过提供Scala的简要历史说明:

1996-1997 比萨
1998-2000 GJ,Java泛型,javac
2003-2006 Scala“实验”
2006-2009年 工业实力编程语言

Scala是功能编程和面向对象编程之间的统一者,并且是敏捷(具有轻量级语法)和安全/高性能/强类型编程的统一者。

函数式编程正在上升。 12年前,OOPSLA参加了ECOOP十次,但今天ICFP参加了ECOOP的三倍,而OOPSLA不再是一个独立的会议。 由于市场驱动因素,函数式编程现在很重要。 奥德斯基说:“由于硬件趋势,软件世界正在发生变化”,并补充说,“摩尔定律现在是通过增加内核数量而不是时钟周期来实现的。”

在时钟周期限制的新世界中,我们面临着“三重挑战”:“并行”(如何使用多核),“异步”(如何处理异步事件)和“分布式”(如何处理故障) 。 在这个世界上,“您拥有的每一个可变状态都是一种责任。” 简而言之,问题是“不确定性由并发线程访问共享的可变状态所引起。”

非确定性=并行处理+可变状态

非确定性行为是“我们不满意的事情”,“避免可变状态意味着要进行编程”。 消除可变状态是我们可以控制并且可以更改的一件事。 这就是为什么Odersky认为函数式编程刚刚从学术界崛起而被用于商业领域的原因。 函数式编程一直与花哨的机器固有地联系在一起。

奥德斯基指出,编写函数式编程与编写面向对象的编程完全不同。 “函数式编程的思维过程实际上是完全不同的”,因为它需要在空间而非时间上思考事物。

在论完函数式编程的论据之后,奥德斯基问我们现在是否都应该搬到Haskell? 他回答说,从面向对象的开发中仍然学到了重要的东西。 他的幻灯片中写道:“业界从OO分解中学到的知识仍然是分析和设计。” 我们希望在编码中包含函数和对象。

Odersky引用了Grady Booch的话:“对象的特征在于状态,身份和行为。 奥德斯基认为,我们现在要“消除或至少减少可变状态”。 我们希望摆脱默认的可变状态。 奥德斯基还认为,我们希望摆脱参照平等,而将注意力放在结构平等上。

除了处理并行处理器的硬件环境外,Odersky还列出了简单性,生产力和乐趣,这是进行函数式编程的其他原因。

Odersky从一般的函数式编程讨论转移到了特定的Scala讨论。 他的子弹说:“ Scala可以根据您的喜好简单或复杂,但最好是简单的。” 他以Kojo为例说明了Scala的简洁性。 他还提到“萨达杰的精彩演讲”。 然后,奥德斯基开始研究基于“ 九十九斯卡拉问题”的一些示例。

Scala 2.10“非常接近RC1”,并且在处理剩余的三个代码阻止程序和几个文档阻止程序时处于“代码冻结”状态。 Odersky讨论了Scala改进流程(SIP),并显示了接受,推迟或拒绝的“待处理SIP”。

SIP 12(“字符串插值”解决了使用+运算符与字符串连接相关的弱点和困难。使用字符串插值更短,更安全。添加字符串插值的最大障碍是$已“已经是字符串中的合法字符” Scala将使用更通用的识别任意ID的解决方案,而不是使用应在$前面转义$并将其用于字符串插值的字符串前面的“特殊技巧”,将“ f”字符串处理器解释为$%

开发人员可以实现自己的字符串处理器,Odersky展示了可以为XML和JSON编写的示例。 Odersky表示:“在Scala中添加XML支持的结果并非如此。” 他说,现在代替使用XML字符串处理器并删除Scala当前具有的XML特定库依赖项将是一个优势。

奥德斯基谈到了为何Scala没有“其他出色语言”所拥有的扩展方法。 他回答说Scala没有扩展方法,因为“我们无法对其进行抽象”。 “不可能让他们实现接口”。

奥德斯基介绍了SIP 11(“隐含类”)。 这里要考虑的一个问题是“运行时开销”。 SIP 15(“值类”)引入了以下想法:Scala类可以扩展AnyVal而不是Object 。 扩展AnyVal类是“值类”,并且始终未装箱 。 Odersky展示了使用这些值类的代码将扩展(编译)为的代码。

Scala中的implicit关键字实现了“非常强大”的隐式转换,但是Odersky警告说“它们可能会被滥用”,特别是在“它们太多的情况下”。 我喜欢奥德斯基(Odersky)将它们比作巧克力:一点点很好,但太多会导致胃痛。 您可以通过将标识符scala.langage.implicitConversions带入范围(通常通过导入)来关闭隐式转换警告。

Odersky简要讨论了SIP 18(“语言导入”),然后介绍了“更好的工具”。 我发现奥德斯基的语言目标很有趣:奥德斯基想“让Scala成为聪明孩子的首选语言”。 对他来说,这是语言的理想选择。

一位与会者认为样板代码是最好的简化形式之一,并想知道Scala是否通过替换样板代码而错过了其简化目标。 奥德斯基回答说,样板代码不是他偏爱的简单形式。

Odersky表示,从API的重大更改等角度来看,Scala在很大程度上已经成熟。 他指出,所有语言都达到了难以进行根本性根本改变的地步,而且与2000年代后期相比,现在Scala的改变本质上更小。

在回答观众的问题时,奥德斯基说,学习Scala的最好方法是看书或上课。 他说,他看到的许多尝试与Scala斗争的人都试图通过研究其API文档来学习它。

当被要求将Scala与Groovy和JRuby进行比较时,Odersky说Scala与JDK 7一样复杂,并且将不如JDK 8复杂。他认为Groovy更复杂,因为它是Java的超集。 这是关于复杂性的有趣的不同观点。 我发现Groovy学习起来非常简单,但是我确实有多年的Java经验。 我想知道是否没有Java经验的人会发现Scala难于学习。 对我来说,即使拥有Scala的所有出色功能,它也比Groovy易于学习。

另一位听众的问题导致Odersky提到除了ScalaIDE之外, 为Scala提供了一些替代的IDE支持(包括EmacsIntelliJ IDEA )。 有一个用于ScalaNetBeans插件

Odersky在回答另一个问题时指出了我喜欢Scala的一些内容。 他表示,Scala允许开发人员轻松地指定一条可变数据。 我喜欢Scala不会对可变数据造成偏见,并允许开发人员根据需要选择这样做。 当“优化软件”迫使我去做框架或语言作者认为最好的事情时,我真的不喜欢它。

我真的很喜欢这个演讲。 我已经从原本计划的会议更改为昨晚的会议,并且对这一更改感到满意(尽管其他会议本来也会很好)。 我对本演示文稿的唯一担心是,由于我对Scala缺乏了解,如果没有适当的基础,对新的Scala 2.10功能的讨论将使我不知所措。 对我来说幸运的是,直到会议进行到一半时,Odersky才开始使用特定于Scala 2.10的功能。 他对函数式编程以及Scala的基础知识和历史的介绍对我总体而言是有帮助的,并且特别有助于我准备好欣赏新的Scala 2.10功能。 在此演示文稿和Scala Tricks演示文稿之间,我对尝试Scala的兴趣不断更新。

别忘了分享!

参考: JavaOne 2012:Scala 2.10中的JCG合作伙伴 Dustin Marx 的新增功能,来自Inspired by Actual Events博客。


翻译自: https://www.javacodegeeks.com/2012/10/javaone-2012-whats-new-in-scala-210.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值