Scala
|
?程范型
| 多范式
:
函?式
,
面向?象
,
指令式
|
---|
設計者
| Martin Odersky
|
---|
實作者
| 洛桑?邦理工?院
?程方法??室
|
---|
?行??
| 2004年1月20日
,20年前
(
2004-01-20
)
|
---|
?前版本
| - 3.4.0
(2024年2月29日;穩定版本)
[1]
|
---|
型態系統
| ??
,
强
,
?型推?
,
??化
|
---|
實作語言
| Scala
|
---|
系?平台
| JVM
、
JavaScript
[2]
、
LLVM
(實驗性)
[3]
|
---|
許可證
| 3句版BSD授權條款
[4]
|
---|
文件?展名
| .scala, .sc
|
---|
網站
| www
.scala-lang
.org
|
---|
?發語言
|
---|
Eiffel
,
Erlang
,
Haskell
,
[5]
Java
,
[6]
Lisp
,
[7]
Pizza
,
[8]
Standard ML
,
[6]
OCaml
,
[6]
Scheme
,
[6]
Smalltalk
,
Oz
|
影響語言
|
---|
Ceylon
,
Fantom
,
F#
,
Kotlin
,
Lasso
,
Red
,
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
的工作?始??Scala。Funnel是把
函?式?程
思想和
佩特里?
相?合的一??程?言。
[12]
Odersky之前工作于
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的?件
[
??
]
特性
[
??
]
支持的?程范式
[
??
]
面向?象特性
[
??
]
Scala是一??
面向?象
的?言,每??都是
?象
。?象的?据?型以及行?由
?
和
特?
描述。?抽象机制的?展有??途?。一?途?是子?
?承
,?一?途?是?活的
混入
机制。???途?能避免多重?承的????。
函?式?程
[
??
]
Scala也是一?函?式?言,其函?也能?成??使用。Scala提供了?量?的?法用以定?匿名函?,支持高?函?,允?嵌套多?函?,?支持
柯里化
。Scala的
case class
及其?置的
模式匹配
相?于函?式?程?言中常用的
代??型
。
更?一步,程序?可以利用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具?
?型系?
,通??????,保?代?的安全性和一致性。?型系?具?支持以下特性:
- 泛型
類別,
- ??和逆?
,
- ?注
,
- ?型??的上下限?束,
- 把?別和抽象?型作??象成?,
- ?合?型,
- 引用自己??式指定?型,
- ??,
- 多?
方法。
?展性
[
??
]
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容器。
以下是用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.0
1.1
Scala 3.4.0
.
- ^
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).
- ^
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).
- ^
Scala Macros
.
[
2020-09-26
]
. (原始?容
存?
于2020-02-05).
- ^
8.0
8.1
8.2
8.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).
- ^
12.0
12.1
12.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).
??
[
??
]
外部?接
[
??
]