fbpx
维基百科

Scala

Scala(发音为/ˈskɑːlə, ˈskeɪlə/)是一门多范式的编程语言,设计初衷是要整合面向对象编程和函数式编程的各种特性。[10]

Scala
编程范型多范式函数式面向对象指令式
設計者Martin Odersky英语Martin Odersky
實作者洛桑联邦理工学院编程方法实验室
发行时间2004年1月20日,​19年前​(2004-01-20
当前版本
  • 2.13.12 (2023年9月11日;穩定版本)[1]
  • 3.3.1 LTS (2023年9月9日;穩定版本)[2][3]
型態系統静态类型推断, 结构化英语Structural type system
實作語言Scala
系统平台JVMJavaScript[4]LLVM(實驗性)[5]
許可證3句版BSD授權條款[6]
文件扩展名.scala, .sc
網站www.scala-lang.org
啟發語言
Eiffel, Erlang, Haskell,[7] Java,[8] Lisp,[9] Pizza英语Pizza (programming language),[10] Standard ML,[8] OCaml,[8] Scheme,[8] Smalltalk, Oz
影響語言
Ceylon英语Ceylon (programming language), Fantom英语Fantom (programming language), F#, Kotlin, Lasso英语Lasso (programming language), Red英语Red (programming language), Swift[來源請求]

平台和许可证 编辑

Scala运行于Java平台Java虚拟机),并兼容现有的Java程序。它也能运行于CLDC配置的Java ME中。曾经有过另一.NET平台的实现[11],不过该版本已被放弃。[12]

Scala的编译模型(独立编译,动态类加载)与JavaC#一样,所以Scala代码可以调用Java类库(对于.NET实现则可调用.NET类库)。

Scala套件包括编译器和类库,以BSD许可证发布。[13]

历史 编辑

洛桑联邦理工学院的Martin Odersky于2001年基于Funnel英语Funnel (concurrent computing)的工作开始设计Scala。Funnel是把函数式编程思想和佩特里网相结合的一种编程语言。[14] Odersky之前工作于Java泛型英语Generic Javajavac。Java平台的Scala于2003年底/2004年初发布。[14].NET平台的Scala发布于2004年6月。[10][14][15]该语言第二个版本,v2.0,发布于2006年3月。[10]

Scala 2.8的特性包括重写的Scala容器庫、命名参数和默认参数、包对象,以及Continuation.[16]

2012年1月,发布版本2.9.1。

2012年4月,发布版本2.9.2。

使用Scala的软件 编辑

  • 2009年4月,Twitter宣布他们已经把大部分後端程式从Ruby迁移到Scala,其余部分也打算要迁移。[17]
  • Wattzon英语Wattzon已经公开宣称,其整个平台都已经是基于Scala基础设施编写的。[18]
  • 瑞银集团把Scala用于一般产品中。[19]
  • Coursera把Scala作为服务器语言使用。[20]
  • 多鄰國,一個線上的免費語言學習平台,使用 Scala編寫。

特性 编辑

支持的编程范式 编辑

面向对象特性 编辑

Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以及行为由特质描述。类抽象机制的扩展有两种途径。一种途径是子类继承,另一种途径是灵活的混入机制。这两种途径能避免多重继承的种种问题。

函数式编程 编辑

Scala也是一种函数式语言,其函数也能当成值来使用。Scala提供了轻量级的语法用以定义匿名函数,支持高阶函数,允许嵌套多层函数,并支持柯里化。Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型英语Algebraic type

更进一步,程序员可以利用Scala的模式匹配,编写类似正则表达式的代码处理XML数据。在这些情形中,列表推导式功能对编写公式化查询非常有用。

由于JVM不支持尾调用,Scala也不能完全支持尾调用优化。不过,Scala编译器可以把某些简单的尾递归优化成循环。[21]

以下代码以函数式风格实现了快速排序算法,可以与Erlang快速排序的例子做个比较:

def qsort(list: List[Int]): List[Int] = list match {  case Nil => Nil  case pivot :: tail =>  val(smaller, rest) = tail.partition(_ < pivot)  qsort(smaller) ::: pivot :: qsort(rest) } 

静态类型 编辑

Scala具备类型系统,通过编译时检查,保证代码的安全性和一致性。类型系统具体支持以下特性:

  • 泛型類別,
  • 协变和逆变
  • 标注英语Annotation
  • 类型参数的上下限约束,
  • 把类別和抽象类型作为对象成员,
  • 复合类型,
  • 引用自己时显式指定类型,
  • 视图,
  • 多态方法。

扩展性 编辑

Scala的设计秉承一项事实,即在实践中,某个领域特定的应用程序开发往往需要特定于该领域的语言扩展。Scala提供了许多独特的语言机制,可以以库的形式轻易无缝添加新的语言结构:

  • 任何方法可用作前缀或后缀操作符,
  • 可以根据预期类型自动构造闭包

联合使用以上两个特性,使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性。

并发性 编辑

Scala使用演员模型作为其并发模型,Actor是类似线程的实体,通过邮箱发收消息。Actor可以复用线程,因此可以在程序中可以使用数百万个Actor,而线程只能创建数千个。在2.10之后的版本中,使用Akka作为其默认Actor实现。[22] 以下代码是使用Actor模式的EchoServer实现

val echoServer = actor(new Act {  become {  case msg => println("echo " + msg)  } }) echoServer ! "hi" 

Actor模式可以简化并发编程,好利用多核CPU的能力。

使用Scala的框架 编辑

Lift是开源的Web应用框架,旨在提供类似Ruby on Rails的东西。因为Lift使用了Scala,所以Lift应用程序可以使用目前所有的Java库和Web容器。

Hello World范例 编辑

以下是用Scala编写的典型Hello World程式:

 object HelloWorld extends App {  println("Hello, world!")  } 

 object HelloWorld {  def main(args: Array[String]) {  println("Hello, world!")  }  } 

请注意它与Java的Hello World应用程序有哪些相似之处。一处显著区别在于,Scala版的Hello World程序不通过static关键字把main方法标记为静态方法,而是用object关键字创建了单件

假设该程序保存为HelloWorld.scala文件,接下来可以通过以下命令行进行编译:

> scalac HelloWorld.scala 

若要运行:

> scala -classpath . HelloWorld 

这与编译和运行Java的“Hello World”程序是不是很像呢?事实上,Scala的编译和执行模型与Java是等效的,因而它也兼容于Java的构建工具,比如Ant.

直接使用Scala解释器也可以运行该程序,使用选项-i(从文件加载代码)和选项-e(若要运行额外的代码,就得实际执行HelloWorld对象的方法)即可:

> scala -i HelloWorld.scala -e 'HelloWorld.main(null)' 

测试 编辑

以下是测试Scala代码的一些方式:

内置的Scala库SUnit已经不赞成使用,已在2.8.0版中移除。

参考文献 编辑

  1. ^ 1.0 1.1 Release 2.13.12. 2023年9月11日 [2023年9月19日]. 
  2. ^ Scala 3.3.1 LTS. 
  3. ^ Release 3.3.1. 2023年9月9日. 
  4. ^ . [2015-07-27]. (原始内容存档于2015-08-10). 
  5. ^ Scala Native. [2015-07-27]. (原始内容于2016-04-22). 
  6. ^ Scala 2.11.1 is now available!. [2016-08-29]. (原始内容于2016-08-27). 
  7. ^ Fogus, Michael. MartinOdersky take(5) toList. Send More Paramedics. 6 August 2010 [2012-02-09]. (原始内容于2012-02-14). 
  8. ^ 8.0 8.1 8.2 8.3 Odersky, Martin. The Scala Experiment - Can We Provide Better Language Support for Component Systems? (PDF). 11 January 2006 [2016-06-22]. (原始内容 (PDF)于2016-06-23). 
  9. ^ Scala Macros. [2020-09-26]. (原始内容于2020-02-05). 
  10. ^ 10.0 10.1 10.2 10.3 Martin Odersky et al., An Overview of the Scala Programming Language, 2nd Edition
  11. ^ . 洛桑联邦理工学院编程方法实验室. 2008-01-07 [2008-01-15]. (原始内容存档于2007-10-09). Scala is primarily developed for the JVM and embodies some of its features. Nevertheless, its .NET support is designed to make it as portable across the two platforms as possible. 
  12. ^ 存档副本. [2019-08-10]. (原始内容于2017-07-29). 
  13. ^ 存档副本. [2009-07-22]. (原始内容于2009-08-21). 
  14. ^ 14.0 14.1 14.2 Martin Odersky, "A Brief History of Scala" (页面存档备份,存于互联网档案馆), Artima.com weblogs, June 9, 2006
  15. ^ Martin Odersky, "The Scala Language Specification Version 2.7"
  16. ^ Scala 2.8 Preview. [2009-07-22]. (原始内容于2009-04-26). 
  17. ^ Greene, Kate. . Technology Review. MIT. April 1, 2009 [April 6, 2009]. (原始内容存档于2012-04-17). 
  18. ^ Cloud, Jeremy. Scala + WattzOn, sitting in a tree.... March 10, 2009 [2009-07-22]. (原始内容于2009-04-09). 
  19. ^ 存档副本. [2012-01-14]. (原始内容于2011-07-19). 
  20. ^ 存档副本. [2014-04-15]. (原始内容于2014-04-01). 
  21. ^ Tail calls, @tailrec and trampolines. [2009-07-22]. (原始内容于2011-08-12). 
  22. ^ 存档副本. [2013-05-08]. (原始内容于2013-06-07). 

图书 编辑

外部链接 编辑

scala, 发音为, ˈskɑːlə, ˈskeɪlə, 是一门多范式的编程语言, 设计初衷是要整合面向对象编程和函数式编程的各种特性, 编程范型多范式, 函数式, 面向对象, 指令式設計者martin, odersky, 英语, martin, odersky, 實作者洛桑联邦理工学院编程方法实验室发行时间2004年1月20日, 19年前, 2004, 当前版本2, 2023年9月11日, 穩定版本, 2023年9月9日, 穩定版本, 型態系統静态, 类型推断, 结构化, 英语, structural, typ. Scala 发音为 ˈskɑːle ˈskeɪle 是一门多范式的编程语言 设计初衷是要整合面向对象编程和函数式编程的各种特性 10 Scala编程范型多范式 函数式 面向对象 指令式設計者Martin Odersky 英语 Martin Odersky 實作者洛桑联邦理工学院编程方法实验室发行时间2004年1月20日 19年前 2004 01 20 当前版本2 13 12 2023年9月11日 穩定版本 1 3 3 1 LTS 2023年9月9日 穩定版本 2 3 型態系統静态 强 类型推断 结构化 英语 Structural type system 實作語言Scala系统平台JVM JavaScript 4 LLVM 實驗性 5 許可證3句版BSD授權條款 6 文件扩展名 scala sc網站www wbr scala lang wbr org啟發語言Eiffel Erlang Haskell 7 Java 8 Lisp 9 Pizza 英语 Pizza programming language 10 Standard ML 8 OCaml 8 Scheme 8 Smalltalk Oz影響語言Ceylon 英语 Ceylon programming language Fantom 英语 Fantom programming language F Kotlin Lasso 英语 Lasso programming language Red 英语 Red programming language Swift 來源請求 維基教科書中有關Scala的文本 目录 1 平台和许可证 2 历史 3 使用Scala的软件 4 特性 4 1 支持的编程范式 4 1 1 面向对象特性 4 1 2 函数式编程 4 2 静态类型 4 3 扩展性 4 4 并发性 5 使用Scala的框架 6 Hello World范例 7 测试 8 参考文献 9 图书 10 外部链接平台和许可证 编辑Scala运行于Java平台 Java虚拟机 并兼容现有的Java程序 它也能运行于CLDC配置的Java ME中 曾经有过另一 NET平台的实现 11 不过该版本已被放弃 12 Scala的编译模型 独立编译 动态类加载 与Java和C 一样 所以Scala代码可以调用Java类库 对于 NET实现则可调用 NET类库 Scala套件包括编译器和类库 以BSD许可证发布 13 历史 编辑洛桑联邦理工学院的Martin Odersky于2001年基于Funnel 英语 Funnel concurrent computing 的工作开始设计Scala Funnel是把函数式编程思想和佩特里网相结合的一种编程语言 14 Odersky之前工作于Java泛型 英语 Generic Java 和javac Java平台的Scala于2003年底 2004年初发布 14 NET平台的Scala发布于2004年6月 10 14 15 该语言第二个版本 v2 0 发布于2006年3月 10 Scala 2 8的特性包括重写的Scala容器庫 命名参数和默认参数 包对象 以及Continuation 16 2012年1月 发布版本2 9 1 2012年4月 发布版本2 9 2 使用Scala的软件 编辑2009年4月 Twitter宣布他们已经把大部分後端程式从Ruby迁移到Scala 其余部分也打算要迁移 17 Wattzon 英语 Wattzon 已经公开宣称 其整个平台都已经是基于Scala基础设施编写的 18 瑞银集团把Scala用于一般产品中 19 Coursera把Scala作为服务器语言使用 20 多鄰國 一個線上的免費語言學習平台 使用 Scala編寫 特性 编辑支持的编程范式 编辑 面向对象特性 编辑 Scala是一种纯面向对象的语言 每个值都是对象 对象的数据类型以及行为由类和特质描述 类抽象机制的扩展有两种途径 一种途径是子类继承 另一种途径是灵活的混入机制 这两种途径能避免多重继承的种种问题 函数式编程 编辑 Scala也是一种函数式语言 其函数也能当成值来使用 Scala提供了轻量级的语法用以定义匿名函数 支持高阶函数 允许嵌套多层函数 并支持柯里化 Scala的case class及其内置的模式匹配相当于函数式编程语言中常用的代数类型 英语 Algebraic type 更进一步 程序员可以利用Scala的模式匹配 编写类似正则表达式的代码处理XML数据 在这些情形中 列表推导式功能对编写公式化查询非常有用 由于JVM不支持尾调用 Scala也不能完全支持尾调用优化 不过 Scala编译器可以把某些简单的尾递归优化成循环 21 以下代码以函数式风格实现了快速排序算法 可以与Erlang快速排序的例子做个比较 def qsort list List Int List Int list match case Nil gt Nil case pivot tail gt val smaller rest tail partition lt pivot qsort smaller pivot qsort rest 静态类型 编辑 Scala具备类型系统 通过编译时检查 保证代码的安全性和一致性 类型系统具体支持以下特性 泛型類別 协变和逆变 标注 英语 Annotation 类型参数的上下限约束 把类別和抽象类型作为对象成员 复合类型 引用自己时显式指定类型 视图 多态方法 扩展性 编辑 Scala的设计秉承一项事实 即在实践中 某个领域特定的应用程序开发往往需要特定于该领域的语言扩展 Scala提供了许多独特的语言机制 可以以库的形式轻易无缝添加新的语言结构 任何方法可用作前缀或后缀操作符 可以根据预期类型自动构造闭包 联合使用以上两个特性 使你可以定义新的语句而无须扩展语法也无须使用宏之类的元编程特性 并发性 编辑 Scala使用演员模型作为其并发模型 Actor是类似线程的实体 通过邮箱发收消息 Actor可以复用线程 因此可以在程序中可以使用数百万个Actor 而线程只能创建数千个 在2 10之后的版本中 使用Akka作为其默认Actor实现 22 以下代码是使用Actor模式的EchoServer实现 val echoServer actor new Act become case msg gt println echo msg echoServer hi Actor模式可以简化并发编程 好利用多核CPU的能力 使用Scala的框架 编辑Lift是开源的Web应用框架 旨在提供类似Ruby on Rails的东西 因为Lift使用了Scala 所以Lift应用程序可以使用目前所有的Java库和Web容器 Hello World范例 编辑以下是用Scala编写的典型Hello World程式 object HelloWorld extends App println Hello world 或 object HelloWorld def main args Array String println Hello world 请注意它与Java的Hello World应用程序有哪些相似之处 一处显著区别在于 Scala版的Hello World程序不通过static关键字把main方法标记为静态方法 而是用object关键字创建了单件 假设该程序保存为HelloWorld scala文件 接下来可以通过以下命令行进行编译 gt scalac HelloWorld scala 若要运行 gt scala classpath HelloWorld 这与编译和运行Java的 Hello World 程序是不是很像呢 事实上 Scala的编译和执行模型与Java是等效的 因而它也兼容于Java的构建工具 比如Ant 直接使用Scala解释器也可以运行该程序 使用选项 i 从文件加载代码 和选项 e 若要运行额外的代码 就得实际执行HelloWorld对象的方法 即可 gt scala i HelloWorld scala e HelloWorld main null 测试 编辑以下是测试Scala代码的一些方式 ScalaTest 页面存档备份 存于互联网档案馆 ScalaCheck 页面存档备份 存于互联网档案馆 类似于Haskell的QuickCheck 页面存档备份 存于互联网档案馆 的库 specs 页面存档备份 存于互联网档案馆 用于Scala的行为驱动的开发工具库 JUnit内置的Scala库SUnit已经不赞成使用 已在2 8 0版中移除 参考文献 编辑 1 0 1 1 Release 2 13 12 2023年9月11日 2023年9月19日 Scala 3 3 1 LTS Release 3 3 1 2023年9月9日 Scala js 2015 07 27 原始内容存档于2015 08 10 Scala Native 2015 07 27 原始内容存档于2016 04 22 Scala 2 11 1 is now available 2016 08 29 原始内容存档于2016 08 27 Fogus Michael MartinOdersky take 5 toList Send More Paramedics 6 August 2010 2012 02 09 原始内容存档于2012 02 14 8 0 8 1 8 2 8 3 Odersky Martin The Scala Experiment Can We Provide Better Language Support for Component Systems PDF 11 January 2006 2016 06 22 原始内容存档 PDF 于2016 06 23 Scala Macros 2020 09 26 原始内容存档于2020 02 05 10 0 10 1 10 2 10 3 Martin Odersky et al An Overview of the Scala Programming Language 2nd Edition Scala on NET 洛桑联邦理工学院编程方法实验室 2008 01 07 2008 01 15 原始内容存档于2007 10 09 Scala is primarily developed for the JVM and embodies some of its features Nevertheless its NET support is designed to make it as portable across the two platforms as possible 存档副本 2019 08 10 原始内容存档于2017 07 29 存档副本 2009 07 22 原始内容存档于2009 08 21 14 0 14 1 14 2 Martin Odersky A Brief History of Scala 页面存档备份 存于互联网档案馆 Artima com weblogs June 9 2006 Martin Odersky The Scala Language Specification Version 2 7 Scala 2 8 Preview 2009 07 22 原始内容存档于2009 04 26 Greene Kate The Secret Behind Twitter s Growth How a new Web programming language is helping the company handle its increasing popularity Technology Review MIT April 1 2009 April 6 2009 原始内容存档于2012 04 17 Cloud Jeremy Scala WattzOn sitting in a tree March 10 2009 2009 07 22 原始内容存档于2009 04 09 存档副本 2012 01 14 原始内容存档于2011 07 19 存档副本 2014 04 15 原始内容存档于2014 04 01 Tail calls tailrec and trampolines 2009 07 22 原始内容存档于2011 08 12 存档副本 2013 05 08 原始内容存档于2013 06 07 图书 编辑Programming in Scala 页面存档备份 存于互联网档案馆 ISBN 978 0 9815316 0 1 A comprehensive step by step guide by Martin Odersky 英语 Martin Odersky Lex Spoon and Bill Venners Beginning Scala ISBN 978 1 4302 1989 7 A down to earth approach to teaching Scala by David Pollak Programming Scala ISBN 978 1 934356 31 9 Creating highly scalable highly concurrent applications on the Java platform by Venkat Subramaniam Programming Scala ebook 页面存档备份 存于互联网档案馆 外部链接 编辑Scala website 页面存档备份 存于互联网档案馆 Scalachina 页面存档备份 存于互联网档案馆 Scala Tour 开源Scala指南 Scala教學 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title Scala amp oldid 79941106, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。