欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
Scala
小 (→图集) |
小 (→版本) |
||
第32行: | 第32行: | ||
==版本== | ==版本== | ||
[http://docs.huihoo.com/scala/language-specification/ Scala语言规范] | [http://docs.huihoo.com/scala/language-specification/ Scala语言规范] | ||
+ | *[https://scala-lang.org/blog/2021/05/14/scala3-is-here.html Scala 3 is here!] | ||
*[https://scala-lang.org/blog/2020/09/15/scala-3-the-community-powered-release.html Scala 3 - A community powered release] | *[https://scala-lang.org/blog/2020/09/15/scala-3-the-community-powered-release.html Scala 3 - A community powered release] | ||
*[http://docs.huihoo.com/scaladoc/scala/2.13 2.13] | *[http://docs.huihoo.com/scaladoc/scala/2.13 2.13] |
2021年8月11日 (三) 00:15的版本
您可以在Wikipedia上了解到此条目的英文信息 Scala Thanks, Wikipedia. |
Scala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages. It is also fully interoperable with Java. The Scala distribution is released under a BSD-like license.
目录 |
新闻
自http://www.scala-lang.org/rss.xml加载RSS失败或RSS源被墙
简介
Scala是一门现代的多范式编程语言,志在以简练、优雅及类型安全的方式来表达常用编程模式。它平滑地集成了面向对象和函数语言的特性。
- Scala是面向对象的:Scala是一个纯面向对象语言,在某种意义上来讲所有数值都是对象。对象的类型和行为是由class和trait来描述的。Class的抽象可由子类化和一种灵活的基于mixin的组合机制(它可作为多重继承的简单替代方案)来扩展。
- Scala是函数式的: Scala还是一个函数式语言,在某种意义上来讲所有函数都是数值。Scala为定义匿名函数提供了一种轻量级的语法,它支持高阶(higher- order)函数、允许函数嵌套、支持局部套用(currying)。Scala的case类及其内置支持的模式匹配模型代数类型在许多函数式编程语言中都被使用。
- Scala是静态类型的:Scala配备了一套富有表现力的类型系统,该抽象概念以一种安全的和一致的方式被使用。
- Scala是可扩展的:Scala的设计承认了实践事实,领域特定应用开发通常需要领域特定语言扩展。Scala提供了一个独特的语言组合机制,这可以更加容易地以类库的形式增加新的语言结构:
o 任何方式可以被用作中缀(infix)或后缀(postfix)操作符
o 闭包按照所期望的类型(目标类型)自动地被构造
两者结合使用可方便地定义新语句,无需扩展语法,也无需使用类似宏的元编程工具。
- Scala可与Java和.NET进行互操作:Scala 设计时就考虑了与流行编程环境良好交互,如Java 2运行时环境(JRE)和 .NET框架(CLR)。特别是与主流面向对象语言,如Java和C#尽量无缝交互。Scala有像Java和C#一样的编译模型(独立编译,动态装载类),允许访问成千上万的高质量类库。
More Detail: http://www.infoq.com/cn/Scala
哲学
在Scala中,一切都是对象,即使是数值类型(一切值都是对象,一切函数都是值)。Scala更信奉万物皆应为对象。
版本
SIP/SPP
JDK
JDK 9
JDK 8
指南
OS X
使用sdkman安装Scala或
sudo port install scala2.10 ls /opt/local/bin/scala* sudo ln -s /opt/local/bin/scala-2.10 /opt/local/bin/scala vim /etc/paths , add /opt/local/bin $ scala scala> :help scala> (1 to 10) filter (_ % 2 == 0) map (_ * 2) reduce (_ * _) res0: Int = 122880
vim Hello.scala
object Hello { def main(args: Array[String]) { println("Hello, world!") } }
运行
scala Hello.scala 或 scala> :load Hello.scala
编译运行 scalac Hello.scala && scala Hello
Eclipse
从 Eclipse Marketplace 中选择安装 The Scala IDE for Eclipse,来自 scala-ide.org。
从 Help > Install New Software ...
For Scala 2.11.2
http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site
For Scala 2.10.4
http://download.scala-ide.org/sdk/helium/e38/scala210/stable/site
Vim
Emacs
REPL
$ scala
scala> object HelloWorld extends App { | println("Hello, world!") | } defined object HelloWorld scala> HelloWorld.main(null)
File IO
scala> import scala.io.Source scala> val source1 = Source.fromURL("http://huihoo.com", "UTF-8") scala> val lines = source1.getLines.toArray scala> for (i <- 0 until lines.length) println(i + ": " + lines(i)) // 逐行打印
容器Collection
斐波那契数列
使用了Stream(流) 它与List类似,只不过其中的每一个元素都经过了一些简单的计算处理 #::
scala> def fibFrom(a: Int, b: Int): Stream[Int] = a #:: fibFrom(b, a + b) fibFrom: (a: Int, b: Int)Stream[Int] scala> val fibs = fibFrom(1, 1).take(10) fibs: scala.collection.immutable.Stream[Int] = Stream(1, ?) scala> fibs.toList res32: List[Int] = List(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)
等价性
scala> List(1, 2, 3) == Vector(1, 2, 3) // true scala> HashSet(1, 2) == TreeSet(2, 1) // ture scala> Set(1, 2, 3) == List(1, 2, 3) // false
并行容器
Scala标准库中包含的并行容器通过免去并行化的底层细节,以方便用户并行编程。
val list = (1 to 10000).toList list.map(_ + 42) // 顺序处理 list.par.map(_ + 42) // 并行处理 res2: scala.collection.parallel.immutable.ParSeq[Int] = ParVector(43, 44, 45 ....
并行并发
元编程
Groovy and Scala
- Scala和Groovy之间的核心区别在于前者是静态类型:静态类型是性能的关键,Scala的性能远高于Groovy
- Groovy的优势在于易用性以及与Java无缝衔接,Scala的优势在于性能和一些高级特性
- Groovy团队更注重实效思想而更Scala团队具有学术思想
- Groovy与Scala若能走向统一, 将为Web开发者带来巨大的生产力
项目
- sbt
- Apache Kafka
- Apache Spark
- Play framework
- Akka
- Scalatra
- Lift:Scala的Web框架
- Scala.js
- Dropwizard
- Finagle
- Norbert
- Scalate 模版引擎
- json4s JSON for Scala
- Twitter开发了不少Scala开源项目,Scala是Twitter使用的主要编程语言之一,Effective Scala是Twitter大量工程实践的总结,强力推荐。
- Slick Functional Relational Mapping for Scala
- Squeryl Scala ORM and DSL
- Lagom
.NET
用户
Twitter,Fouresquare以及LinkedIn,它们的Scala应用程序每天都要处理数十亿的Web事务。
课程
文档
- Scala in the Wild
- Finatra: The Fast, Testable Scala Services Framework That Powers Twitter
- Scala:让Java平台上的编程重现生机
- Learning Scala: A Practical Approach
- Scala v. Clojure
- Scala and Clojure Playing Nice
- Enabling Microservice Architectures with Scala
图集
关注
链接
- http://www.scala-lang.org/
- Scala Language Specification
- Scala中文文档
- Awesome Scala
- Scala Handbook
- Scala 2.12将只支持Java 8
- Scala Improvement Process
- http://docs.huihoo.com/scala/
- Scala Style Guide
- http://download.huihoo.com/scala/
- Scala API
- Guardian.co.uk 从Java切换到Scala
- Scala与Spring:强强联合
- Scala School、Scala 课堂(中文)
- Effective Scala,Twitter的Scala最佳实践。
- Groovy创始人:Java面临终结 Scala将取而代之
- Why we love Scala at Coursera
- 在路上的Scala专题
- Scala Best Practices
- Java 下一代: Groovy、Scala 和 Clojure
- Awesome Scala: 搜罗了当下主要的基于Scala开发的框架与工具
- 在大规模系统中使用Scala——Martin Odersky访谈(一)
- Scala的设计目标——Martin Odersky访谈(二)
- Scala类型系统的目的——Martin Odersky访谈(三)
- Scala模式匹配的亮点——Martin Odersky访谈(四)
- Concurrency in Erlang & Scala: The Actor Model