Scala编程语言的目的是什么?
我认为每一种语言都是为特定目的而创造的。 斯卡拉创造了什么,什么问题最好解决?
马丁·奥德斯基(Martin Odersky)在斯卡拉(Scala)的谈话中提到的其中一个问题就是它能够很好地解决各种问题。 他并不是从性能的angular度来谈论扩展,而是在于语言本身似乎可以通过图书馆来扩展 。 以便:
val lock = new ReentrantReadWriteLock lock withReadLock { //do stuff }
看起来有一些特殊的语法糖来处理juc
锁。 但事实并非如此,它只是以一种似乎是这样的方式来使用Scala语言。 代码更可读,不是吗?
特别是scala语言的各种parsing规则使得创build看起来像领域特定语言(或DSL)的库变得非常容易。 看看scala-test,例如:
describe("MyCoolClass") { it("should do cool stuff") { val c = new MyCoolClass c.prop should be ("cool") } }
(还有更多的例子 – 昨天我发现了这个 )。 在JDK7( 项目硬币 )中,有很多关于Java语言中哪些新特性正在进行的讨论。 许多这些function是特殊的语法糖来处理一些特定的问题。 斯卡拉已经devise了一些简单的规则,这意味着每个小烦恼的新关键字是不需要的。
Scala的另一个目标是弥合function语言和面向对象语言之间的差距。 它包含许多构造灵感(即复制!)function语言。 我是非常强大的模式匹配 , 基于actor的并发框架和(当然)一阶和更高阶的函数。
当然,你的问题说有一个特定的目的 ,我刚才给出了三个不同的理由。 你可能不得不问问马丁Odersky!
原来的另一个devise目标当然是创build一种在Java虚拟机上运行的语言,并且完全与Java类互操作。 这(至less)有两个好处:
- 您可以利用JVM的无处不在,稳定性,function和声誉。 (认为pipe理扩展,JIT编译,高级垃圾收集等)
- 你仍然可以使用所有你最喜欢的Java库,包括第三方和你自己的。 如果情况并非如此,那么在很多情况下(例如我的),在商业上使用Scala将会是一个很大的障碍。
同意以前的答案,但build议介绍一个概述的Scala编程语言 :
斯卡拉的工作源于一个研究努力开发更好的组件软件的语言支持。 有两个我们想用Scala实验validation的假设。 首先,我们假定组件软件的编程语言需要可扩展,因为相同的概念可以描述小的和大的部分。 因此,我们专注于抽象,合成和分解的机制,而不是增加一大组可能对某一级别的组件有用的基元,而不是其他级别的基元。 其次,我们假定对组件的可伸缩支持可以通过编程语言来提供,该编程语言将面向对象和函数式编程统一和推广。 对于静态types的语言,其中斯卡拉是一个实例,这两个范例迄今在很大程度上是分开的。 (Odersky的)
我个人将Scala和Python一起分类,解决哪些问题以及如何解决。 显着的差异和偶尔的抱怨是types的复杂性。 我同意斯卡拉的抽象是复杂的,有时似乎令人费解,但有几点:
- 他们也大多是可选的。
- Scala的编译器像循环复杂性和代码行升级一样免费testing和编写文档。
- 当适当的实现Scala可以执行其他所有但不可能的操作背后一致和一致的API。 来自Scala 2.8 Collections :
例如,一个String(或者更确切地说:它的后备类RichString)可以被看作是一个Chars序列,但它不是一个通用的集合types。 尽pipe如此,通过一个RichString将一个字符映射到字符映射也应该产生一个RichString,就像下面的与Scala REPL的交互一样:
scala> "abc" map (x => (x + 1).toChar) res1: scala.runtime.RichString = bcd
但是如果将一个从Char到Int的函数应用到一个string会发生什么? 在这种情况下,我们不能产生一个string作为结果,它必须是一些Int元素的序列。 确实有人得到:
"abc" map (x => (x + 1)) res2: scala.collection.immutable.Vector[Int] = Vector(98, 99, 100)
所以事实certificate,根据传递的函数参数的结果types,map会生成不同的types! (Odersky的)
由于它的function和使用演员(据我了解,请评论,如果我有这个错误),它可以很容易地扩展到几乎任何数量的CPU。
也就是说,我将Scala看作是新语言function的testing平台。 扔在厨房的水槽,看看会发生什么。
我个人的观点是,对于任何涉及3人以上团队的应用程序来说,使用非常简单和限制性语法的语言会提高工作效率,因为整个工作变得更多地与其他人互动,而不仅仅是编写计算机做一点事。
你添加的人越多,你花费的时间越多,解释什么? 和|| 适用于两个布尔(在Java中,你会发现很less有人知道)。