影响Scala语言设计的因素列表
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语言设计的因素列表的更多相关文章
- 【一月一本技术书】-【Go语言设计与实现】- 9月
Go : 2009.11.10 代表作:Docker.k8s.etcd 模仿C语言,目标:互联网的C语言 讲的晦涩难懂....硬板..放弃了好几次才读完.满分10分,打6分. 下个月:Python数据 ...
- Scala语言
一.Scala概述 Scala简介 Scala是一种针对JVM将函数和面向对象技术组合在一起的编程语言.所以Scala必须要有JVM才能运行,和Python一样,Scala也是可以面向对象和面向函数的 ...
- 利用Scala语言开发Spark应用程序
Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情.如果你对Scala语言还不太熟悉,可 以阅读网络教程A Scala Tutorial for Ja ...
- 30大最有影响力的Web设计与开发英文博客
1stwebdesigner的创始人Dainis Graveris挑选出30个高质量和具有影响力的Web设计与前端技术博客,其中很多我们都耳熟能详.但这么完整的列表,还是值得收藏的.另外,你大概不会了 ...
- Scala语言初识
scala是一种集面向对象特性和函数式特性于一身并可运行在JVM上的强类型静态语言.因为可以运行在JVM上,并在设计时借鉴于大量的java语言特性,故可以和java互动并可以调用java相关类库,这让 ...
- 基于Spark环境对比Python和Scala语言利弊
在数据挖掘中,Python和Scala语言都是极受欢迎的,本文总结两种语言在Spark环境各自特点. 本文翻译自 https://www.dezyre.com/article/Scala-vs-Py ...
- 影响HTTP性能的常见因素
影响HTTP性能的常见因素 我们这里讨论HTTP性能是建立在一个最简单模型之上就是单台服务器的HTTP性能,当然对于大规模负载均衡集群也适用毕竟这种集群也是由多个HTTTP服务器的个体所组成.另外我们 ...
- Scala语言笔记 - 第一篇
目录 Scala语言笔记 - 第一篇 1 基本类型和循环的使用 2 String相关 3 模式匹配相关 4 class相关 5 函数调用相关 Scala语言笔记 - 第一篇 最近研究了下scala ...
- Scala语言开发入门
在本系列的第一篇文章 <使用递归的方式去思考>中,作者并没有首先介绍 Scala 的语法,这样做有两个原因:一是由于过多的陷入语法的细节其中,会分散读者的注意力.反而忽略了对于基本概念,基 ...
随机推荐
- CSS 布局实例系列(四)如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?
Hello,小朋友们,还记得我是谁吗?对了,我就是~超威~好啦,言归正传,今天的布局实例是: 实现一个浮动布局,红色容器中每一行的蓝色容器数量随着浏览器宽度的变化而变化,就如下图: 肯定有人心里犯嘀咕 ...
- Android笔记之使用ZXing扫描二维码
ZXing发布版下载地址:https://github.com/zxing/zxing/releases 为了能让官方Demo跑起来,先把ZXing核心部分core复制到自己的工程里 还要把andro ...
- hibernate 多对多操作(级联操作)
一.级联保存 分别在用户和角色配置文件中在set标签中加入cascade="save-update": 示例:添加同时添加用户对象和角色对象并关联两个对象: 只需将角色放入用户对象 ...
- php 验证邮箱的方法
在开发 web系统时,经常在注册或者登陆或者邮箱保护的时候会需要验证邮箱,现在我来分享邮箱验证的一些小tips.(多说一句,现在基本用手机号注册登录是趋势了,匹配手机号我后面再讲了). 1.最开始也是 ...
- Web Service概念辨析
Web Service包含两个概念. 其一是Web Service标准体系,由SOAP.WSDL.UDDI三要素组成,是平台和语言无关的.在这个概念里和WCF做比较是错误的,因为前者是行业标准,后者是 ...
- C#使用SQL语句时候的万用密码问题
实际上万用密码就是因为SQL里面的语句--是注释,利用bug添加用户名和密码. 例如,用户名为 adada’ or 1=1-- 第一个种写法登录成功了 第二种写法登录失败(正确) 第三种写法登录失败( ...
- mysql 中 all any some 用法
-- 建表语句 CREATE TABLE score( id INT PRIMARY KEY AUTO_INCREMENT, NAME ), SUBJECT ), score INT); -- 添加数 ...
- PAT 天梯赛 L2-005. 集合相似度 【SET】
题目链接 https://www.patest.cn/contests/gplt/L2-005 思路 因为集合中的元素 是不重复的 所以用SET 来保存 集合 然后最后 查找一下 两个集合中共有元素 ...
- iOS UILabel 省略号 不变色 问题处理
在我们公司 应用 4.1版本 我发现一个很有趣的问题 , 当我修改 label 的 textColor (默认单行情况)为黑色之外的颜色 省略号依然为黑色, 这个在iOS 7 iOS8.1 i ...
- 【leetcode刷题笔记】Rotate List
Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1 ...