Scala

本页使用了标题或全文手工转换
?基百科,自由的百科全?
Scala
?程范型 多范式 函?式 面向?象 指令式
設計者 Martin Odersky 英? Martin Odersky
實作者 洛桑?邦理工?院 ?程方法??室
?行?? 2004年1月20日 ,​20年前 ​( 2004-01-20
?前版本
  • 3.4.0 (2024年2月29日;穩定版本) [1]
編輯維基數據鏈接
型態系統 ?? ?型推? , ??化 英? Structural type system
實作語言 Scala
系?平台 JVM JavaScript [2] LLVM (實驗性) [3]
許可證 3句版BSD授權條款 [4]
文件?展名 .scala, .sc
網站 www .scala-lang .org
?發語言
Eiffel , Erlang , Haskell , [5] Java , [6] Lisp , [7] Pizza 英? Pizza (programming language) , [8] Standard ML , [6] OCaml , [6] Scheme , [6] Smalltalk , Oz
影響語言
Ceylon 英? Ceylon (programming language) , Fantom 英? Fantom (programming language) , F# , Kotlin , Lasso 英? Lasso (programming language) , Red 英? Red (programming language) , Swift [來源請求]

Scala (?音? /?sk?ːl?, ?ske?l?/ )是一? 多范式 的?程?言,??初衷是要整合面向?象?程和 函?式?程 的各?特性。 [8]

平台和?可? [ ?? ]

Scala?行于 Java平台 Java??机 ),?兼容?有的 Java 程序。?也能?行于 CLDC 配置的 Java ME 中。曾?有??一 .NET 平台的?? [9] ,不??版本已被放?。 [10]

Scala的??模型(?立??,???加?)? Java C# 一?,所以Scala代?可以?用Java??(?于.NET???可?用.NET??)。

Scala套件包括??器和??,以 BSD?可? ?布。 [11]

?史 [ ?? ]

洛桑?邦理工?院 的Martin Odersky于2001年基于 Funnel 英? Funnel (concurrent computing) 的工作?始??Scala。Funnel是把 函?式?程 思想和 佩特里? 相?合的一??程?言。 [12] Odersky之前工作于 Java泛型 英? Generic Java javac 。Java平台的Scala于2003年底/2004年初?布。 [12] .NET平台的Scala?布于2004年6月。 [8] [12] [13] ??言第二?版本,v2.0,?布于2006年3月。 [8]

Scala 2.8的特性包括重?的Scala容器庫、命名??和默???、包?象,以及 Continuation . [14]

2012年1月,?布版本2.9.1。

2012年4月,?布版本2.9.2。

使用Scala的?件 [ ?? ]

  • 2009年4月, Twitter 宣布他?已?把大部分後端程式? Ruby ?移到Scala,其余部分也打算要?移。 [15]
  • Wattzon 英? Wattzon 已?公?宣?,其整?平台都已?是基于Scala基??施??的。 [16]
  • 瑞?集? 把Scala用于一般?品中。 [17]
  • Coursera 把Scala作?服?器?言使用。 [18]
  • 多?國 ,一個線上的免費語言學習平台,使用 Scala編寫。

特性 [ ?? ]

支持的?程范式 [ ?? ]

面向?象特性 [ ?? ]

Scala是一?? 面向?象 的?言,每??都是 ?象 。?象的?据?型以及行?由 ? 特? 描述。?抽象机制的?展有??途?。一?途?是子? ?承 ,?一?途?是?活的 混入 机制。???途?能避免多重?承的????。

函?式?程 [ ?? ]

Scala也是一?函?式?言,其函?也能?成??使用。Scala提供了?量?的?法用以定?匿名函?,支持高?函?,允?嵌套多?函?,?支持 柯里化 。Scala的 case class 及其?置的 模式匹配 相?于函?式?程?言中常用的 代??型 英? Algebraic type

更?一步,程序?可以利用Scala的模式匹配,???似 正?表?式 的代??理XML?据。在?些情形中, 列表推?式 功能???公式化??非常有用。

由于JVM不支持 尾?用 ,Scala也不能完全支持尾?用最佳化。不?,Scala??器可以把某些??的 尾?? 最佳化成循?。 [19]

以下代?以函?式?格??了 快速排序 算法,可以? 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??。 [20] 以下代?是使用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 Scala 3.4.0 .  
  2. ^ Scala.js . [ 2015-07-27 ] . ( 原始?容 存?于2015-08-10).  
  3. ^ Scala Native . [ 2015-07-27 ] . (原始?容 存? 于2016-04-22).  
  4. ^ Scala 2.11.1 is now available! . [ 2016-08-29 ] . (原始?容 存? 于2016-08-27).  
  5. ^ Fogus, Michael. MartinOdersky take(5) toList . Send More Paramedics. 6 August 2010 [ 2012-02-09 ] . (原始?容 存? 于2012-02-14).  
  6. ^ 6.0 6.1 6.2 6.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).  
  7. ^ Scala Macros . [ 2020-09-26 ] . (原始?容 存? 于2020-02-05).  
  8. ^ 8.0 8.1 8.2 8.3 Martin Odersky et al., An Overview of the Scala Programming Language, 2nd Edition
  9. ^ 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.  
  10. ^ 存?副本 . [ 2019-08-10 ] . (原始?容 存? 于2017-07-29).  
  11. ^ 存?副本 . [ 2009-07-22 ] . (原始?容 存? 于2009-08-21).  
  12. ^ 12.0 12.1 12.2 Martin Odersky, "A Brief History of Scala" ?面存??? ,存于 互???案? ), Artima.com weblogs, June 9, 2006
  13. ^ Martin Odersky, "The Scala Language Specification Version 2.7"
  14. ^ Scala 2.8 Preview . [ 2009-07-22 ] . (原始?容 存? 于2009-04-26).  
  15. ^ 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).  
  16. ^ Cloud, Jeremy. Scala + WattzOn, sitting in a tree... . March 10, 2009 [ 2009-07-22 ] . (原始?容 存? 于2009-04-09).  
  17. ^ 存?副本 . [ 2012-01-14 ] . (原始?容 存? 于2011-07-19).  
  18. ^ 存?副本 . [ 2014-04-15 ] . (原始?容 存? 于2014-04-01).  
  19. ^ Tail calls, @tailrec and trampolines . [ 2009-07-22 ] . (原始?容 存? 于2011-08-12).  
  20. ^ 存?副本 . [ 2013-05-08 ] . (原始?容 存? 于2013-06-07).  

?? [ ?? ]

外部?接 [ ?? ]