摘要
Scala 是一种融合了面向对象和函数式编程的静态类型语言,他被定位为构建组件及组件系统。本文是 Scala 语言的概述,适合于理解编程方法和熟悉程序语言设计的读者阅读。
<!---->1. <!---->简介
真正的组件系统,一直是软件业一个虚幻( elusive )的目标。从理想的角度看,软件应该可以使用组件库中预先设计好组件的构建,一如硬件可以用预制的芯片进行组装。然而现实中,任何软件中都有很大一部分是用“从头开始”( “ from scratch ” )的方式编写的,正因为如此,软件开发迄今为止仍然是一种工艺( Craft )而没有成为工业。
这里所说的组件是指软件的某种部件( parts ),他们可以被更大的部件或整个应用以某种形式所调用;组件可以有很多形式,如:模块( modules )、类( classes )、框架( frameworks )、过程( processes )或 web services 。其代码规模也可以从几行到成百上千行。他们可以与其他组件以很多方式相连接,包括聚合、参数传递、继承、远程调用及消息传递等。
我们始终认为,基于组件的软件开发一直以来缺乏进展,很大程度上是由于我们用来定义和集成各种组件的编程语言本身的缺陷。绝大部分编程语言为组件的抽象和编写( composite )提供的支持极为有限,这一点在 Java 或者 C# 这种静态类型语言中尤为明显,恰恰当今的大部分组件系统都是由他们写成的。
(瑞士)洛桑联邦理工学院( EPFL )的程序设计实验室从 2001 年开始研发 Scala ,并于 2004 年一月发布了基于 JVM 的版本, 6 月又发布了基于 .NET 的版本。 Scala 的第二版在 2006 年三月发布,这是一个改进的版本,也就是本文描述内容所基于的版本。
Scala 工作起源于研究更好地支持组件开发的编程语言,我们有两个假设希望通过 Scala 进行验证:首先,我们认为一种适合于组件系统的编程语言应该具有某种可扩展性( scalable ),也就是说:相同的概念可以既适用于描述小型部件,也同样适用于描述大型部件。因此,我们专注于组件的抽象、组成和分解的机制,而非加入一整套基本语法结构来描述组件,因为这样做很可能在某种规模的组件层面上有效,而在另一个规模的层面上却无效。其次,我们认为可扩展的组件支持可以来自于这样一种编程语言:它能够统一并进一步泛化( generalize )面向对象编程和函数式编程这两种编程模式。迄今为止,在静态类型语言中( Scala 属于其中之一),这两个范式差距是很大的。(很显然这里所说“ Scala 属于其中之一”并非是指 Scala 中这两种编程模式也存在很大差异,而是在表明把 Scala 设计成为静态类型语言的意义所在——译注)
为 验证我们的假设, Scala 需要能够真正用于设计组件和组件系统,因为只有得到用户社区的正式应用才能说明 Scala 语言所体现的这些概念是否在设计组件系统时真正有效。为了使用户更容易采用这种新语言,它必须能很好的与现有平台和组件相整合。因此 Scala 被设计成为能够与 Java 和 C# 很好的工作在一起,他采纳了这两种语言的主要语法和类型系统。当然,为了获得真正的进步,也必须抛弃很多固有的传统,这也就是为什么 Scala 并不是 Java 的超集:有些功能被去掉了,另一些概念被重新解释,以便获得一致性。
尽管 Scala 的语法刻意地遵守传统,但其类型系统至少在三方面有新的突破:首先,抽象类型定义和路径依赖类型( path-dependent types )将 vObj Calculus [36] 应用到了具体的语言设计上。其次,模块化的 mixin 组合方式( modular mixin composition )结合了 mixins 和 traits 的优势。第三,视图( views )的概念使组件得以按照模块化的方式被使用。(由于这三者都会在后面详细介绍,此处如果觉得这些名词和相应理论有些晦涩可以暂时忽略——译注)
本文其余部分给出了 Scala 的概述,按照下列几个关键方面进行组织:
- <!---->Scala 程序与 Java 在很多方面十分相像,并且可以与 Java 程序无缝衔接(第 2 节)
- <!---->Scala 有一个统一的对象模型,这意味着所有的值都是对象,所有的操作都是方法调用(第 3 节)
- <!----><!---->Scala 是一个函数式语言,这意味着函数是“一等公民”的值对象( first-class values )(第 4 节)
- <!---->Scala 有统一和强有力的抽象概念来描述类型和值(第 5 节)
- <!---->Scala 有灵活的,模块化的 mixin 组合构造用于编写类和特征( traits ) ( 第 6 节 )
- <!---->它允许使用模式匹配来对对象进行分解( decomposition )(第 7 节)
- <!---->模式( Pattern )和表达式被进一步泛化,用于对 XML 文档的自然处理(第 8 节)
- <!---->Scala 支持通过视图( views )对组件进行外部扩展(第 9 节)
最后第十节讨论相关工作,第十一节是结论。
本文是 Scala 语言的高层概括,主要面向对程序设计语言有一定知识的读者,它既不是简化版的 Scala 语言参考,也不是一个教程。完整的语言参考可以参见《 Scala 语言规范》 [35] ,教程则可参见 [34, 18] 等。
分享到:
相关推荐
Scala 概述(瑞士洛桑联邦理工) Scala 概述(瑞士洛桑联邦理工)
1. Scala概述:了解Scala的历史、目标和设计原则。 2. Scala的下载安装:确保安装了JDK 1.8或更高版本,然后下载Scala安装文件并配置环境变量。 3. IDEA中安装Scala插件:在IntelliJ IDEA中搜索并安装Scala插件,...
#### Scala概述 Scala是一种相对新兴的编程语言,旨在为Java虚拟机(JVM)以及后来的通用语言运行时(CLR)提供支持。它融合了函数式编程(Functional Programming, FP)与面向对象编程(Object-Oriented Programming, OOP...
#### 一、Scala简介与特性 **标题与描述解析:** - **标题**:“Scala 教程”明确指出这是一份关于Scala编程语言的学习指南。 - **描述**:“Scala 教程 .pdf”进一步强调这份教程是以PDF格式提供的。 **标签解析...
Scala是一种静态类型的编程语言,其设计旨在结合面向对象编程和函数式编程的优点,并且能在Java虚拟机(JVM)上运行。这意味着Scala能够充分利用现有的Java类库,并且能够与Java代码无缝集成。Scala不仅支持面向对象...
Scala概述.pptx 变量.pptx 运算符.pptx 程序流程控制.pptx 函数式编程基础.pptx 面向对象编程(基础部分).pptx 面向对象编程(中级部分).pptx 面向对象编程(高级特性).pptx 隐式转换和隐式参数.pptx 集合(上)-基本使用...
- **知识点概述**:REPL(Read-Eval-Print Loop)是一种交互式的编程环境,用户可以在其中输入代码,系统立即执行并显示结果。在Scala中,REPL提供了非常方便的方式来测试代码片段或学习语言特性。 - **详细解析**...
文档的概述部分还提到了Mahout数学矩阵模型1的概况,该模型从一开始就针对密集和稀疏数据结构进行类型建模和成本优化计算。文档尝试通过提供语义明确性来增强Mahout的内核和外核线性代数子程序的操作性,并结合Scala...
#### 一、概述 《Scala for Data Science》是一本专注于使用Scala进行数据科学项目开发的专业书籍。本书由Pascal Bugnion撰写,并于2016年由Packt Publishing出版。该书旨在帮助读者了解如何利用Scala的强大功能来...
"Scala Overview"可能是一个简洁的概述,旨在为读者提供Scala语言的整体视图。它可能会快速介绍Scala的关键特点,如它的面向表达式风格,函数式编程元素,以及如何利用其强大的类型系统来减少错误。这本书可能适合...
#### 一、Scala语言概述 **Scala**是一种强大的多范式编程语言,它将面向对象编程和函数式编程的最佳特性融合在一起。作为一种类Java的语言,Scala旨在提供比Java更简洁、更灵活且功能更丰富的编程体验。 - **面向...
#### 三、Scala概述 Scala是一种多功能的现代编程语言,它结合了面向对象编程和函数式编程的特点,旨在提高代码的可读性和可维护性。Scala运行在Java平台上,能够无缝地与其他Java技术集成,这使得它成为了一个非常...
#### 二、Scala概述 ##### 2.1 什么是Scala Scala是一种多范式编程语言,它结合了面向对象编程与函数式编程的特点。Scala语言的设计目标之一就是尽可能地提高代码的可读性和简洁性,同时保持高性能。由于Scala运行...
#### 一、引言与概述 Scala是一种静态类型的编程语言,设计用于Java平台上,旨在提供一种简洁且强大的编程体验。它融合了面向对象编程与函数式编程的最佳特性,使得开发者能够在编写高效、可维护的代码时,拥有更多...
Scala编程语言概述第二版马丁·奥德斯基,菲利普·阿尔瑟,文森特·克雷梅,伊利亚斯·德洛斯吉尔·杜波切,布尔卡·艾米尔,肖恩·麦克迪尔米德,斯特凡·米歇尔乌德,尼古拉·米海洛夫,米歇尔·辛茨,埃里克·...
### Spark+Scala 学习知识点概述 #### 一、Scala语言基础 **1. Scala语言简介** Scala是一种融合了面向对象编程与函数式编程特性的现代编程语言。它旨在简化编程,提供更简洁、强大的代码编写方式。Scala运行在...
### Scala in Action: 关键知识点概述 #### 一、标题:Scala in Action - **书名解析**:“Scala in Action”这一标题明确指出本书聚焦于Scala编程语言的应用实践。通过“in Action”的后缀,作者旨在传达一种实用...