博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
History of Program
阅读量:5924 次
发布时间:2019-06-19

本文共 3903 字,大约阅读时间需要 13 分钟。

1950与1960年代

有三个现代编程语言于1950年代被设计出来,这三者所派生的语言直到今日仍旧广泛地被采用:

  •  (1955),名称取自"FORmula TRANslator"(公式翻译器),由等人所发明;
  • ,名称取自"LISProcessor"(枚举处理器),由等人所发明;
  • ,名称取自"COmmon Business Oriented Language"(通用商业导向语言),由被深刻影响的所发明。

另一个1950年代晚期的里程碑是由美国与欧洲计算器学者针对"算法的新语言"所组成的委员会出版的报告(名称取自"ALGOrithmic Language"(算法语言))。这份报告强化了当时许多关于计算的想法,并提出了两个语言上的创新功能:

  • 嵌套区块结构:可以将有意义的代码片段组群成一个(),而非转成分散且特定命名的程序。
  • ():区块可以有区块外部无法透过名称访问,属于区块本身的变量、程序以及函数。

另一个创新则是关于语言的描述方式:

  • 一种名为 (BNF)的数学化精确符号被用于描述语言的语法。之后的编程语言几乎全部都采用类似BNF的方式来描述程序语法中的部分。

Algol 60对之后语言的设计上带来了特殊的影响,部分的语言很快的就被广泛采用。后续为了开发Algol的扩展子集合,设计了一个名为()的大型系统。

延续Algol的关键构想所产生的成果就是:

  • 语法跟语义变的更加正交(orthogonal),采用匿名的历程(routines),采用高端(higher-order)功能的递归式输入(typing)系统等等。
  • 整个语言及语义的部分都透过为了描述语言而特别设计的来进行正式的定义,而不仅止于上下文无关的部分。

Algol 68一些较少被使用到的语言功能(如同步与并行区块)、语法快捷方式的复杂系统,以及类型自动强制转换(coercions),使得实现者兴趣缺缺,也让Algol 68获得了很难用(diffcult)的名声。就干脆离开该设计委员会,另外再开发出更简单的语言。

在这段期间被开发出来的重要语言包括有:

  • 1951 - 
  • 1952 - 
  • 1954 - 
  • 1954 -  (LISP的先驱)
  • 1955 -  (COBOL的先驱)
  • 1957 -  (COBOL的先驱)
  • 1958 - 
  • 1958 - 
  • 1959 -  (COBOL的先驱)
  • 1959 - 
  • 1962 - 
  • 1962 - 
  • 1962 - 
  • 1963 -  (C的先驱)
  • 1964 - 
  • 1964 - 
  • 1967 -  (C的先驱)

1967-1978:确立了基础范式

1960年代晚期至1970年代晚期的期间中,编程语言的发展也有了重大的成果。大多数现在所使用的主要都是在这段期间中发明的:

  • ,于1960年代晚期由与以Algol 60超集合的方式发展,同时也是第一个设计支持进行开发的编程语言。
  • ,于1969至1973年间由的研究人员与所开发,是一种早期的()语言。
  • ,于1970年代中期所开发,是一个完全从零开始(ground-up)设计的面向对象编程语言。
  • ,于1972年由、,以及所设计,是第一个语言。
  • ,于1973年由所发明,是一个基于Lisp所建构的多态(polymorphic)类型系统,同时也是的先驱。

这些语言都各自演展出自己的家族分支,现今多数现代编程语言的祖先都可以追溯他们其中至少一个以上。

在1960年代以及1970年代中的优点也带来许多的争议,特别是在程序开发的过程中完全不使用。这项争议跟语言本身的设计非常有关系:某些语言并没有包含GOTO,这也强迫程序员必须结构化地编写程序。尽管这个争议在当时吵翻了天,但几乎所有的程序员都同意就算语言本身有提供GOTO的功能,在除了少数罕见的情况下去使用GOTO是种不良的。结果是之后世代的编程语言设计者发觉到结构化编程语言的争议实在既乏味又令人眼花缭乱。

在这段期间被开发出来的重要语言包括有:

  • 1968 - 
  • 1970 - 
  • 1970 - 
  • 1972 - 
  • 1972 - 
  • 1972 - 
  • 1973 - 
  • 1975 - 
  • 1978 -  (起先只是一种查询语言,扩展之后也具备了程序结构)

1980年代:增强、模块、性能

1980年代的编程语言与之前相较显得更为强大。合并了面向对象以及系统程序设计。美国政府标准化一种名为的系统编程语言并提供给国防承包商使用。日本以及其他地方运用了大量的资金对采用逻辑编程语言结构的进行研究。函数编程语言社群则把焦点转移到标准化ML及Lisp身上。这些活动都不是在开发新的范式,而是在将上个世代发明的构想进一步发扬光大。

然而,在语言设计上有个重大的新趋势,就是研究运用模块或大型组织化的程序单元来进行大型系统的开发。、Ada,以及ML都在1980年代发展出值得注意的模块化系统。模块化系统常拘泥于采用结构:泛型存在(generics being)、本质(essence),参数化模块(parameterized modules)。(参阅)

尽管没有出现新的主要编程语言范式,许多研究人员仍就扩展之前语言的构想并将它们运用到新的内容上。举例来说,以及系统的语言配合面向对象语言运用到上。

1980年代的编程语言实现情况也有所进展。中的进展假定硬件应当为设计,而非身为人类的汇编语言程序员。借由速度增快的帮助,编译技术也越来越积极,RISC的进展对高级语言编译技术带来不小的关注。

语言技术持续这些发展并迈入了1990年代。

在这段期间被开发出来的重要语言包括有:

  • 1980 - 
  • 1983 -  (就像有类别的C)
  • 1984 - 
  • 1985 - 
  • 1986 - 
  • 1987 - 
  • 1988 - 
  • 1989 -  (Backus)

1990年代:互联网时代

1990年代未见到有什么重大的创新,大多都是以前构想的重组或变化。这段期间主要在推动的哲学是提升程序员的生产力。许多"" (RAD) 语言也应运而生,这些语言大多都有相应的、等机制,且大多是先前语言的派生语言。这类型的语言也大多是的编程语言,包含有、,以及。则是更加保守的语言,也具备垃圾回收机制。与其他类似语言相比,也受到更多的观注。新的则比RAD语言更新更好。这种语言并非直接从其他语言派生,而且新的语法更加开放地(liberal)与功能契合。虽然脚本语言比RAD语言来的更有生产力,但大多会有因为小程序较为简单,但是大型程序则难以使用脚本语言撰写并维护的顾虑。尽管如此,脚本语言还是网上层面的应用上大放异彩。

在这段期间被开发出来的重要语言包括有:

  • 1990 - 
  • 1991 - 
  • 1991 - 
  • 1993 - 
  • 1993 - 
  • 1994 -  (part of ANSI )
  • 1995 - 
  • 1995 - 
  • 1995 - 
  • 1995 - 
  • 1997 - 
  • 1999 - 

现今的趋势

编程语言持续在学术及企业两个层面中发展进化,目前的一些趋势包含有:

  • 在语言中增加安全性与可靠性验证机制:额外的堆栈检查、信息流(information flow)控制,以及静态。
  • 提供模块化的替代机制:()、(),以及。
  • 组件导向(component-oriented)软件开发
  • 、或是访问()
  • 更重视分布式及移动式的应用。
  • 与数据库的集成,包含及。
  • 支持使用编写程序,所以不会受到字符集的限制,而可以使用像是非系的脚本或延伸标点符号。
  • 图形用户界面所使用的XML(、)。

在这段期间被开发出来的重要语言包括有:

  • 2001 - 
  • 2001 - 
  • 2002 - 
  • 2003 - 
  • 2003 - 
  • 2006 - 
  • 2007 - 
  • 2009 - 
  • 2014 - 

 

参考:  

作者:陈天
链接:https://zhuanlan.zhihu.com/p/19960178
 
 

atan2是一个函数,在C语言里返回的是指方位角,也可以理解为计算复数 x+yi 的辐角,计算时atan2 比 atan 稳定。

C 语言里 double atan2(double y,double x) 返回的是原点至点(x,y)的方位角,即与 x 轴的夹角。也可以理解为复数 x+yi 的辐角。返回值的单位为弧度,取值范围为
Excel 里 ATAN2(x,y)返回的是原点至点(x,y)的方位角。返回值的单位为弧度,取值范围为
注意:
1、C 函数与 Excel 函数的参数顺序正好相反;
2、C 函数允许 x、y 同时为零,Excel 不允许 x、y 同时为零。
与 atan 的不同
atan2 比 atan 稳定。
如:atan(y/x),当 y 远远大于 x 时,计算结果是不稳定的。
atan2(y,x)的做法:当 x 的绝对值比 y 的绝对值大时使用 atan(y/x);反之使用 atan(x/y)。这样就保证了数值稳定性。

说明

在数学坐标系中,结果为正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度。
ATAN2(a, b) 与 ATAN(a/b)稍有不同,ATAN2(a,b)的取值范围介于 -pi 到 pi 之间(不包括 -pi),
而ATAN(a/b)的取值范围介于-pi/2到pi/2之间(不包括±pi/2)。
若要用度表示反正切值,请将结果再乘以 180/3.14159。
另外要注意的是,函数atan2(y,x)中参数的顺序是倒置的,atan2(y,x)计算的值相当于点(x,y)的角度值。
 
 
pow() 方法返回 x
y(x的y次方) 的值。
 

转载于:https://www.cnblogs.com/privking/p/9984809.html

你可能感兴趣的文章
厉害了,15 行代码让 iPhone 崩溃。。
查看>>
kubelet TLS
查看>>
PgSQL · 应用案例 · PostgreSQL 图像搜索实践
查看>>
SpringMVC+Swagger详细整合
查看>>
swift4.0 data转json
查看>>
2.1、mysql-5.7.16 和 mysql-8.0.12 忘记密码修改
查看>>
如何实现Windows宿主系统和虚拟机ubuntu系统文件互相访问
查看>>
《学技术练英语》PPT分享
查看>>
别了,JavaScript;你好,WebAssembly
查看>>
Ocelot简易教程之Ocelot是什么
查看>>
【附PPT】上海、苏州源创会圆满落幕,分享精彩回顾
查看>>
计算机视觉领域最全汇总(第2部分)
查看>>
走进webpack(2)--第三方框架(类库)的引入及抽离
查看>>
原生开发移动web单页面(step by step)3——App对象
查看>>
如何维护名誉?区块链取证了解一下
查看>>
开启Python3自带的http服务
查看>>
WPF获得全局窗体句柄,并响应全局键盘事件
查看>>
业务中台如何提升研发效率
查看>>
BeetlSQL 2.11.1 发布,Java Dao 工具
查看>>
Flutter 07: 图解基础【登录】页面并学习相关 widget
查看>>