scala 简介 (学习第一步)

scala简介

创始人: Martin Odersky (马丁·奥德斯基)

在这里插入图片描述

scala介绍

一个现代编程语言,受到但不限于Java,ruby,smalltalk,ML,Haskll,Erlang等语言的影响。
特点:

  • 和Java一样,面向对象的语言,单比起java更彻底,与此同时也是一门函数编程式的语言,即两者集合。
  • Scala不适合新手学习,此处所谓的新手指的是没有任何计算机开发语言基础的人群。相反,Scala是为专业程序员定制的强力语言。
  • 它是一们现代编程语言,受到但不局限于Java、Ruby、Smalltalk、ML、Haskell、Erlang等等语言的影响。
  • 它既是一个面向对象语言,每个变量都是一个对象,每个操作符都是方法,
  • Scala代码通过Scalac编译成.class文件,然后在JVM上运行,可以无缝的使用已有的丰富JAVA类库。也就是说Scala的代码会编译成为字节码,运行在Java的虚拟机上。
孟老师的理解:

Scala语言比较深奥,随着学习的深入能够有更好,更新的理解。Scala语言官方曾有一个说法,希望你喜欢Scala,并爱上它,它会改变你对编程的看法,因为你从未想过编程竟可如此简单。Scala语言有一个很好玩的外号“一句话语言”,因为在Java中需要几行、几十行,乃至于一个类才能完成的工作,Scala一句话即可完成。

下面来看一下有趣的scala之父的对答:

提问者:我看到Spark Core里面有很多OOP风格的代码,这是为什么?

Martin Odersky:Spark的API设计是和Scala 集合类设计是一致的函数式风格,里面具体的实现为了追求性能用了命令式,你可以看到Scala集合里面的实现函数为了性能也用了很多var。

提问者:很高兴看到你将在Coursera上再发布两门Scala的课程。但我想问一下,怎么培训那些大学没有毕业的人用Scala?

Martin Odersky:这是个很有意思的问题,我们在Coursera上的学生绝大多数是大学毕业的。我现在还不知道针对大学没毕业学生的培训材料。但是有用Scala教10几岁孩子的教材,他们学得很好。

提问者:go语言有很严格的规范,但Scala没有,每个项目的代码风格都不一样怎么办?

Martin Odersky:对,go严格限制了程序员的选择,而Scala相信程序员自己会做出正确的选择。每个项目可以根据自己的情况制定合适的规则。

提问者:有没有推荐的Scala编码指导?

Martin Odersky:你可以用Spark的Scala编程规范,虽然有点保守,但比较适合有大量新人的项目。lihaoyi也写了博客来说明怎么样进行选择。

提问者:很不幸的是我们的项目上往往会有很多新人,我带了很多Scala项目,遇到的最大的挑战是如何保持代码简洁,能给些意见吗?

Martin Odersky:有两个原则:1. 尽量用能力弱的功能;2. 给中间步骤命名。

提问者:现在Scala除了大数据领域,还有其他哪些主要的应用领域?

Martin Odersky:Scala还在金融领域很流行,比如高盛,摩根斯坦利等。

提问者:现在很多创业公司喜欢用node.js, 比如Uber他们一开始用nodejs, 现在开始转向go,你怎么看?

Martin Odersky:用nodejs可以使得前后台一致,但长期维护成本会很高。沃尔玛加拿大用Scala,沃尔玛美国选择用nodejs,但后来沃尔玛美国也改成用Scala了。

提问者:但是很多初创公司可能活不到明天,他们不太需要考虑长期可维护性啊。

Martin Odersky:这也有道理,不过硅谷很多初创公司选择使用Scala。

提问者:Scala有没有不合适的应用领域?

Martin Odersky:非JVM的目前不行。还有一些非常靠近硬件而且对实时性可预测性能要求很高的应用也不是很适合。

提问者:2015年JavaOne Keynote讲到Java8使生产效率提升了15%, 那么Scala那些特性能使生产效率提升?

Martin Odersky:Java8这个统计数据很有意思,Scala相比Java生产率能提升2~3倍。

提问者:我们的项目代码看起来像Java,怎么变得函数式?

Martin Odersky:你可以多用map,filter,pattern match等,而少用循环和if判断。

提问者:有个谣言说一个twitter的VP说如果能重新选择他会重新考虑是否用Scala,还有LinkedIn好像也要退出Scala?

Martin Odersky:你说了这是个谣言,不是真的。这个话是一个从twitter跳槽的uber的工程师说的,而不是VP说的,他说如果你能忍受员工两个月的学习成本才能用Scala。LinkedIn确实是制定了从基础设施中退出Scala的决定,尤其是Kafka现在独立运作了。主要是因为Scala二进制不兼容造成的。而LinkedIn的应用程序将继续使用Scala。

提问者:Tasty是为了解决Scala二进制不兼容的问题,那会在2.12发布吗?

Martin Odersky:我们还需要时间,可能在2.12发布不了。

提问者:Dotty什么时候能成为Scala默认的编译器?

Martin Odersky:我从三年前开始设计Dotty,现在刚刚有个可运行的初始版本,还需要几年才会成为Scala默认的编译器。

提问者:Dotty会带来一些新的功能,比如trait可以有参数,会是Scala 3.0吗?同时也会删除一些功能吗,比如抽象类?

Martin Odersky:Dotty会重新定义Scala,会是Scala 3.0,但这还需要几年的时间。是否删除抽象类是个艰难的决定,抽象类有它自己的作用,比如与Java兼容。并且抽象类和trait在语义上也有不同。

提问者:你在演讲中提到限制使用隐式转换,同时又提了typeclass,那隐式转换要怎么用呢?

Martin Odersky:限制使用implicit def。 隐式参数和隐式类是好的,可以使用implicit class。

提问者:大系统比较难维护怎么办?

Martin Odersky:有副作用的组件和隐含的全局状态会导致组件之间耦合,使得系统维护困难。

提问者:我问最后一个问题,最近MIT发表了用机器学习来编程的论文,你怎么看?

Martin Odersky:这个话题很有意思值得观察,不过不管怎么样机器还是得知道人要干什么。我们现在可以用机器学习来辅助编程,例如集成在IDE里面帮助程序员更快更好的编程。
摘录:https://www.sohu.com/a/77122724_156793