为何选择Scala

为何选择Scala

Scala是适合你的语言吗?
Scala是一门混合了函数式和面向对象的语言。用Scala创建多线程应用时,你会倾向于函数式编程风格,用不变状态(immutable state)①编写无锁(lock-free)代码。Scala提供一个基于actor的消息传递(message-passing)模型,消除了涉及并发的痛苦问题。运用这个模型,你可以写出简洁的多线程代码,而无需顾虑线程间的数据竞争,以及处理加锁和释放带来的梦魇。把synchronized这个关键字从你的字典中清除,享受Scala带来的高效生产力吧。
①对象一旦创建出来,就不再改变其内容,这样的对象就是不变的。这也就无需顾虑多线程访问对象时的竞争管理。Java的String就是不变对象一个非常好的例子。
然而,Scala的益处并不仅限于多线程应用。你可以用它构建出强大而简洁的单线程应用,或是多线程应用中的单线程模块。你很快就可以用上Scala的强大能力,包括自适应静态类型、闭包、不变的容器以及优雅的模式匹配。
Scala对于函数式编程的支持让你可以写出简洁而有表现力的代码。感谢更高层的抽象,它让我们可以用更少的代码做更多的事情。单线程应用和多线程应用都可以从函数式风格中受益。
函数式编程语言也为数不少。比如,Erlang就是一个很好的函数式编程语言。实际上,Scala的并发模型同Erlang的非常相似。然而,同Erlang相比,Scala有两个显著的优势。第一,Scala是强类型的,而Erlang不是。第二,不同于Erlang,Scala运行于JVM之上,可以与Java很好地互操作。
就运用在企业级应用的不同层面而言,Scala这两个特性使其成为了首选。只要你愿意,就可以用Scala构建整个企业级应用,或者,也可以把它和其他语言分别用在不同的层上。如果有些层在你的应用中至关重要,你就可以用上Scala的强类型、极佳的并发模型和强大的模式匹配能力。下图的灵感源自Ola Bini的语言金字塔(参见附录A的“Fractal Programming”),它展现了Scala在企业级应用中与其他语言的配合。

JVM上的其他语言Groovy,JRuby,Clojure怎么样呢?
目前为止,能够同时提供函数式风格和良好并发支持的强类型语言,唯有Scala;这正是它的卓越之处。JRuby和Groovy是动态语言,它们不是函数式的,也无法提供比Java更好的并发解决方案。另一方面,Clojure是一种混合型的函数式语言。它天生就是动态的,因此不是静态类型。而且,它的语法类似于Lisp,除非你很熟悉,否则这可不是一种易于掌握的语法。
如果你是个有经验的 Java程序员,正在头痛用Java实现多线程应用,那么你就会发现Scala非常有用。你可以相当容易地就把Java代码封装到Scala的actor中,从而实现线程隔离。还可以用Scala的轻量级API传递消息,以达到线程通信的目的。与“启动线程,立即用同步的方式限制并发”不同,你可以通过无锁消息传递享受真正的并发。
如果你重视静态类型,喜欢编译器支持所带来的益处,你会发现,Scala提供的静态类型可以很好地为你工作,而不会阻碍你。你会因为使用这种无需键入太多代码的类型而感到惬意。
如果你喜欢寻求更高层次的抽象和具有高度表现力的代码,你会被Scala的简洁所吸引。在Scala里,你可以用更少的代码做更多的事情。了解了运算符和记法,你还会发现Scala的灵活性,这对于创建领域专用语言(domain-specific language)非常有用。
提醒一下,Scala的简洁有时会倾向于简短生硬,这会让代码变得难以理解。Scala的一些运算符和构造对初学者而言可能一时难以适应②。这样的语法不是为胆小之人准备的。随着你逐渐精通Scala,你会开始欣赏这种简洁,学会避免生硬,使得代码更易于维护,同时也更易于理解。
②我着手学习一门新语言时,还没有哪门语法不让我头疼的,包括Ruby。多多练习,很快语法就变得很自然了。
Scala不是一种超然物外的语言。你不必抛弃你已经为编写Java代码所投入的时间、金钱和努力。Scala和Java的程序库是可以混合在一起的。你可以完全用Scala构建整个应用,也可以按照你所期望的程度,将它同Java或其他JVM上的语言混合在一起。因此,你的Scala代码可以小如脚本,也可以大如全面的企业应用。Scala已经用于构建不同领域的应用,包括电信、社交网络、语义网和数字资产管理。Apache Camel用Scala做DSL创建路由规则。Lift Web Framework是一个用Scala构建的强大的Web开发框架,它充分利用了Scala的特性,比如简洁、表现力、模式匹配和并发。

参考《SCALA程序设计:JAVA虚拟机多核编程实战》

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值