Scala语言设计概述
Scala的设计受许多编程语言和研究思想的影响。事实上,仅很少的Scala的特点是全新的;大多数都已经被以另外的形式用在其他语言中了。Scala的革新主要来源于它是如何构造并放在一起的。在这部分里,我们罗列了对Scala设计的主要影响。列表并不全——因为围绕着编程语言的设计有太多的好点子,没办法全都列举在这里。

Scala语言设计的“蓝本”语言
在最表层,Scala采用了Java和C#语法的大部,而它们大部分借自于C和C++句法的改变。表达式,句子和代码块多数和Java一样,同样还有类,包和引用的语法。除语法之外,Scala还采用了Java的其他元素,诸如它的基本类型,类库和它的执行模式。
Scala也欠了其他语言的很多情。它的统一对象模型是由Smalltalk发起的,之后又被Ruby发扬光大。他的通用嵌套的思想(几乎所有的Scala里的构造都能被嵌套进其他构造)也出现在Algol,Simula,和最近的Beta与gbeta中。它的方法调用和字段选择的统一访问原则来自于Eiffel。它函数式编程的处理方式在骨子里与以SML,OCaml和F#为代表的ML家族语言很接近。许多Scala标准库里面的高阶函数同样也出现在ML或Haskell中。Scala的隐式参数灵感激发自Haskell的类型类;它们用一种更经典的面向对象设定获得了类似的结果。Scala的基于行动类的并发库几乎全是Erlang的思想。
Scala语言设计:特点的继承
Scala不是第一种强调伸展性和扩展性的语言。能够横跨不同应用领域的可扩展语言的历史根源是Peter Landin在1966年的论文“之后的700种编程语言” (这篇论文中描述的语言,Iswim,与Lisp一同为开先河的函数式语言)。把前缀的操作符视为函数的特别的思想可以被回溯到Iswim和Smalltalk。另一个重要的思想是允许函数式文本(或代码块)作为参数,从而能让库定义控制结构。同样可以追回到Iswim和Smalltalk。Smalltalk和Lisp两者都具有灵活的语法,广泛应用在建造内嵌的领域特化的语言。C++是另一种能通过操作符重载和他的模板系统被改造和扩展的可伸展语言;与Scala相较,它是建在低层级,更面向系统的内核上。
Scala也不是第一个集成函数式和面向对象编程的,尽管也许在这个方向上它走得最远。其他在OOP里集成了函数式编程的一些元素的包括Ruby,Smalltalk和Python。在Java平台上,Pizza,Nice和Multi-Java都用函数式思想扩展了类Java内核。还有一些接受了对象系统的以函数式为主的语言;OCaml,F#和PLT-Scheme是其中的例子。
Scala同样也对编程语言领域贡献了一些革新。举例来说,它的抽象类型提供了对泛型类型来说更面向对象的替代,它的特质允许灵活的控件组合,还有他的拆分器提供了独立于表达的方式去做模式匹配。这些革新已在近年编程语言会议中阐述在论文里了。

影响Scala语言设计的因素列表的更多相关文章

  1. 【一月一本技术书】-【Go语言设计与实现】- 9月

    Go : 2009.11.10 代表作:Docker.k8s.etcd 模仿C语言,目标:互联网的C语言 讲的晦涩难懂....硬板..放弃了好几次才读完.满分10分,打6分. 下个月:Python数据 ...

  2. Scala语言

    一.Scala概述 Scala简介 Scala是一种针对JVM将函数和面向对象技术组合在一起的编程语言.所以Scala必须要有JVM才能运行,和Python一样,Scala也是可以面向对象和面向函数的 ...

  3. 利用Scala语言开发Spark应用程序

    Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可 以阅读网络教程A Scala Tutorial for Ja ...

  4. 30大最有影响力的Web设计与开发英文博客

    1stwebdesigner的创始人Dainis Graveris挑选出30个高质量和具有影响力的Web设计与前端技术博客,其中很多我们都耳熟能详.但这么完整的列表,还是值得收藏的.另外,你大概不会了 ...

  5. Scala语言初识

    scala是一种集面向对象特性和函数式特性于一身并可运行在JVM上的强类型静态语言.因为可以运行在JVM上,并在设计时借鉴于大量的java语言特性,故可以和java互动并可以调用java相关类库,这让 ...

  6. 基于Spark环境对比Python和Scala语言利弊

    在数据挖掘中,Python和Scala语言都是极受欢迎的,本文总结两种语言在Spark环境各自特点. 本文翻译自  https://www.dezyre.com/article/Scala-vs-Py ...

  7. 影响HTTP性能的常见因素

    影响HTTP性能的常见因素 我们这里讨论HTTP性能是建立在一个最简单模型之上就是单台服务器的HTTP性能,当然对于大规模负载均衡集群也适用毕竟这种集群也是由多个HTTTP服务器的个体所组成.另外我们 ...

  8. Scala语言笔记 - 第一篇

    目录 Scala语言笔记 - 第一篇 1 基本类型和循环的使用 2 String相关 3 模式匹配相关 4 class相关 5 函数调用相关 Scala语言笔记 - 第一篇 ​ 最近研究了下scala ...

  9. Scala语言开发入门

    在本系列的第一篇文章 <使用递归的方式去思考>中,作者并没有首先介绍 Scala 的语法,这样做有两个原因:一是由于过多的陷入语法的细节其中,会分散读者的注意力.反而忽略了对于基本概念,基 ...

随机推荐

  1. 【译】Stackoverflow:Java Servlet 工作原理问答

    导读 本文来自stackoverflow的问答,讨论了Java Servlet的工作机制,如何进行实例化.共享变量和多线程处理. 问题:Servlet 是如何工作的?Servlet 如何实例化.共享变 ...

  2. 18.Django原生SQL语句查询返回字典

    在django中执行自定义语句的时候,返回的结果是一个tuple ,并我不是我所期望的dict.当结果是tuple 时,如果要取得数据,必须知道对应数据在结果集中的序号,用序号的方式去得到值. 如果是 ...

  3. 解决pod没有权限问题

    chmod 644 路径 echo $? 检测上一条命令的执行结果,如果是0则执行成功

  4. Oracle数据库体系结构(4)oracle控制文件

    控制文件的概述 1.控制文件是oracle数据库非常重要的物理文件,描述了整个数据库的物理结构信息,包括数据库名称.数据文件与重做日志文件的名称与位置,日志序列号等信息.数据库实例根据初始化参数CON ...

  5. StartUML如何画“不折弯”的直线

    将下图中line style改成 OBlique.快捷键Ctrl +B

  6. Android蓝牙开发浅析【转】

    本文转载自:http://blog.csdn.net/geekdonie/article/details/7487761 由于近期正在开发一个通过蓝牙进行数据传递的模块,在参考了有关资料,并详细阅读了 ...

  7. Hadoop 2.x 之 HA 简介

    HA结构图 HA是用来解决单点故障问题 DN: DataNode,启动时会往所有的NameNode汇报 NN: NameNode(主 Active(一个)   备 Standby(可以有多个)) Jo ...

  8. 在cmd中将FAT32转换为NTFS分区的命令是什么?

    将FAT32转换为NTFS分区的命令是什么? ========================================== 在cmd命令行模式下输入: convert x: /fs:ntfs ...

  9. CSS重置 reset.css

    1. [文件] reset.css ~/*------------------------------------------* site:ifnoif.net* Style author:ifnoi ...

  10. 在javascript中使用replace

    javascript中使用replace功能很强大,不仅可以替换为字符串,还可以利用正则表达式,对匹配到的字符串为所欲为的进行操作,首先我们来了解一下replace的基本语法 定义和用法 replac ...