Play For Scala 开发指南 - 第1章 Scala 语言简介

Scala是可伸缩语言(Scalable Language)的缩写,读作skah-lah, 于2004年1月20日发布了第一个公开版本。其实早在2001年,Martin Odersky就开始Scala的设计工作,Martin 是瑞士洛桑联邦理工大学(EPFL)计算机与通信科学学院的一名教授, Martin曾和Haskell 语言设计者之一 Philip Wadler合作,设计了一个原型系统GJ, 最终演变为 Java 泛型。Martin还曾受雇于 Sun 公司,编写了 javac 的参考编译器,这套系统后来演化成了 JDK 中自带的 Java 编译器。

Scala是一门混合范式编程语言,同时支持面向对象和函数式编程,函数式编程已经被视为解决并发、大数据的最佳工具,这也是Scala相对于Java的强大之处。同时Scala还是一门有趣的语言,有趣之处在于虽然它是强类型语言,但是却采用了动态类型语法,使得代码更加简洁、灵活和优雅。这主要得益于Scala强大的类型推断系统,在编译期可以进行静态类型推断,不仅可以降低代码的冗余性,而且也不用担心动态类型语言的重构灾难。

从2001年开始,Scala经历了如下发展过程:

大事记

2001年诞生于EPFL

2003年发布初始版本

2006年发布2.0版本

2011年Odersky创建Typesafe,后改名Lightbend

2012年发布2.8、2.9和2.10版本,从2.10开始弃用内置actor库,改用Akka

2014年发布2.11版本

2016年发布2.12版本

2017年发布2.13-M2版本

Scala全面拥抱现有的Java生态系统,可以和现有Java类库实现无缝连接,你可以在Scala项目直接引入现有的Java依赖,或是直接引入Java源码文件。与此同时,Scala生态发展的也非常不错,下面列举几个具有代表性的项目。

 分布式系统

Akka是一个工具库,可以帮助你构建一个基于消息驱动的高可用分布式系统。Akka包含很多模块,Akka Actor是Akka的核心模块,使用Actor模型实现并发和分布式,可以将你从Java的多线程痛苦中解救出来;Akka Streams可以让你以异步非阻塞的方式处理流数据,并且支持背压(backpressure); Akka Http实现了一套基于流的HTTP服务端和客户端;Akka Cluster可以帮你实现一个分布式集群系统;Cluster Sharding可以帮你做集群的分片处理;Distributed Data可以帮助你在集群之间分享数据;Alpakka可以帮你为Akka Streams集成不同的数据源;Akka Persistence可以帮你处理Actor消息的持久化存储,防止重启后数据丢失。

Finagle是Twitter基于Netty开发的支持容错的、协议无关的RPC框架,该框架支撑了Twitter的核心服务。

 大数据处理

Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。Spark提供了一个更快、更通用的数据处理平台。和Hadoop相比,Spark可以让你的程序在内存中运行时速度提升100倍,或者在磁盘上运行时速度提升10倍。去年,在100 TB Daytona GraySort比赛中,Spark战胜了Hadoop,它只使用了十分之一的机器,但运行速度提升了3倍。Spark也已经成为 针对 PB 级别数据排序的最快的开源引擎。

Kafka发源于LinkedIn,于2011年成为Apache的孵化项目,随后于2012年成为Apache的主要项目之一。Kafka使用Scala和Java进行编写。Apache Kafka是一个快速、可扩展的、高吞吐、可容错的分布式发布订阅消息系统。Kafka具有高吞吐量、内置分区、支持数据副本和容错的特性,适合在大规模消息处理场景中使用。

 新一代编译器

Dotty 是 Scala 的下一代编译器,也是 Scala 的新语言概念和编译器技术研究平台。Martin Odersky一直领导着Dotty的工作。 Dotty是一种创新的,基于Dependent Object Types(DOT)演算(基本上是Scala的简化版本)和函数式编程(FP)数据库社区的研究编译器。

 WEB框架

基于Scala的Web框架有很多,PlayLiftScalatraFinatra等等,其中Play是Lightbend官方维护的框架。Play 刚开始发布的 1.x 版本是基于Java开发, 从 2.0 版本开始,整个框架使用Scala进行了重写。笔者正是从Play 2.0开始,从传统的SSH/SSI转向Play,一直使用至今。在这个过程中有诸多的欣喜与发现,在后面将会和大家慢慢分享。

本书的第一部分是Scala入门指引,不会涉及到Scala语言的高级特性,只是用简短的篇幅向大家介绍一些Scala在Web开发场景下常用的技巧。如果您想进行更深入的学习,建议您参考以下两本书籍:

  • 快学Scala,Cay S. Horstmann 著, 高宇翔 译 该书由Martin Odersky作序力荐,行文简洁透彻,翻译的也很棒。需要注意的是,请跳过第20章Actor,因为从Scala 2.10开始,内置actor实现已经弃用,改用Akka。
  • Programming in Scala - Third Edition, Martin Odersky 著 Martin的大师级作品,Jolt获奖图书。全书深入浅出,以浅显的示例展示诸多编程语言的奥秘,建议你强势围观。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信终端开发团队的专栏

关于Android N的那些事

今年3月,Google破天荒提前半年发布了Android N开发者预览版。当然,作为一个不合格的谷粉并没有第一时间体验安装,因为至今仍然能够回忆起来去年今日此门...

31560
来自专栏微信公众号:Java团长

Java就业指导

想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面...

20520
来自专栏腾讯Bugly的专栏

【团队分享】苍翼之刃:论File Descriptor泄漏如何导致Crash?

这一期的团队分享,我们特邀苍翼之刃的开发负责人Jay,为大家分享在Android项目中遇到的一些Crash。 苍翼之刃 外文:BlazBlue Revolut...

59270
来自专栏程序人生

上帝说:要有一门面向未来的语言,于是有了 erlang

今个谈谈 erlang。 这些文章流于表面,更多是简单的介绍。这篇文章不同,因为 erlang 并不是一门新语言,简单介绍它的人不算少,我希望这篇文章能在深度上...

425110
来自专栏JAVA高级架构

有哪些 Java 源代码看了后让你收获很多,代码思维和能力有较大的提升?

最早看的 架构探险 从零开始写Java Web框架,黄勇写的,算是一种启蒙,作者自己写了一套ioc和aop框架以及mvc请求分发框架。 跟着写了一遍,基本明白了...

475100
来自专栏Java架构

Java高级工程师——面试总结

22350
来自专栏微信公众号:Java团长

Java就业指导

想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面...

26420
来自专栏带你撸出一手好代码

做人肉代码翻译器是什么感受?

程序员编码的常规流程是通过大脑把将要实现的功能切分成一个个逻辑单元,使用编程语言将这些逻辑单元实现并组织在一起,积少成多, 形成电脑软件 缺乏经验的程序员可能...

40480
来自专栏Java社区

Java自学?Java编程资源大放送

81140
来自专栏ThoughtWorks

流水线即代码|洞见

2016年11月份的技术雷达中给出了一个简明的定义:流水线即代码(Pipeline as Code)通过对持续集成/持续交付(CI/CD)运行工具进行编码而非配...

40950

扫码关注云+社区

领取腾讯云代金券