Play For Scala 开发指南 - 第1章 Scala 语言简介
2017-09-23 10:42
429 查看
转载请注明joymufeng,欢迎访问PlayScala社区(http://www.playscala.cn)
原文:http://www.playscala.cn/doc/catalog?_id=j1_3
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经历了如下发展过程:
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框架有很多,Play、Lift、Scalatra和Finatra等等,其中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获奖图书。全书深入浅出,以浅显的示例展示诸多编程语言的奥秘,建议你强势围观。
原文:http://www.playscala.cn/doc/catalog?_id=j1_3
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版本 |
分布式系统
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框架有很多,Play、Lift、Scalatra和Finatra等等,其中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获奖图书。全书深入浅出,以浅显的示例展示诸多编程语言的奥秘,建议你强势围观。
相关文章推荐
- Play For Scala 开发指南 - 第3章 常用类介绍
- Play For Scala 开发指南 - 第9章 Json 开发
- Play For Scala 开发指南 - 第2章 Scala基本语法
- Play For Scala 开发指南 - 第10章 MongoDB 开发
- Play For Scala 开发指南 - 第4章 第一个Play项目
- Scala IDE for Eclipse 之spark scala语言开发环境搭建------遇到问题记录
- Spring boot for Eclipse 开发指南第三节 Freemaker
- Linux 汇编语言开发指南 && 开发 Linux 命令行实用程序
- Linux汇编语言开发指南
- 面向 Java 开发人员的 Scala 指南:包和访问修饰符
- 第1章 Java语言概述与开发环境
- Spark工程开发常用函数与方法(Scala语言)
- UWP应用开发系列视频教程简介 - Built for Windows 10
- UCML 2.0 For ASP.NET开发平台简介
- Apache Spark学习:利用Scala语言开发Spark应用程序
- 面向 Java 开发人员的 Scala 指南: 深入了解 Scala 并发性
- Linux 汇编语言开发指南
- [Python for Series 60 的开发指南] 介绍
- (转载) Linux汇编语言开发指南(zt)
- Linux 汇编语言开发指南(AT&T)