编年史

1951 – Regional Assembly Language 
1952 – Autocode 
1954 – IPL (LISP语言的祖先) 
1955 – FLOW-MATIC (COBOL语言的祖先) 
1957 – FORTRAN (第一个编译型语言) 
1957 – COMTRAN (COBOL语言的祖先) 
1958 – LISP 
1958 – ALGOL 58 
1959 – FACT (COBOL语言的祖先) 
1959 – COBOL 
1959 – RPG 
1962 – APL 
1962 – Simula 
1962 – SNOBOL 
1963 – CPL (C语言的祖先) 
1964 – BASIC 
1964 – PL/I 
1966 – JOSS 
1967 – BCPL (C语言的祖先) 
1968 – Logo 
1969 – B (C语言的祖先) 
1970 – Pascal 
1970 – Forth 
1972 – C 
1972 – Smalltalk 
1972 – Prolog 
1973 – ML 
1975 – Scheme 
1978 – SQL 
1980 – C++ (既有类的C语言,更名于1983年7月) 
1983 – Ada 
1984 – Common Lisp 
1984 – MATLAB 
1985 – Eiffel 
1986 – Objective-C 
1986 – Erlang 
1987 – Perl 
1988 – Tcl 
1988 – Mathematica 
1989 – FL 
1990 – Haskell 
1991 – Python 
1991 – Visual Basic 
1993 – Ruby 
1993 – Lua 
1994 – CLOS (ANSI Common Lisp的一部分) 
1995 – Java 
1995 – Delphi (Object Pascal) 
1995 – JavaScript 
1995 – PHP 
1996 – WebDNA 
1997 – Rebol 
1999 – D 
2000 – ActionScript 
2001 – C# 
2001 – Visual Basic .NET 
2002 – F# 
2003 – Groovy 
2003 – Scala 
2007 – Clojure 
2009 – Go 
2011 – Dart

从1951年2014年,人类一共发明了256种编程语言,每一种语言的出现都带有某些新特征。编程语言不断的在革新,很快就会有超出这个清单的新编程语言出现


1801 - Joseph Marie Jacquard用打孔卡为一台织布机编写指令,在挂毯上织出了“hello, world”字样。当时的reddit网友对这项工作的反响并不热烈,因为它既缺少尾递归调用,又不支持并发,而且甚至都没有注意在拼写时恰当地区分大小写。

Jacquard织布机是第一台可进行程序控制的织布机。用打孔卡进行编程的概念,直到电子计算机被发明出来之后仍然被广泛运用。

最早的Hello World程序(出自K&R C)打印的是全小写的字符串:”hello, world”。

在许多英文技术社区里,不正确地使用大小写发贴会被视作是小白的行为。(如把“Python”拼作“python”,把“FreeBSD”拼作“freebsd”,把“Qt”拼作“QT”)


1842 - Ada Lovelace写了世界上第一个程序。她的努力只遇到了一点点小小的麻烦,那就是:实际上并没有任何计算机能够用来运行她的程序。后来的企业架构师们重新吸收了她的这个技能,用来学习如何更好地使用UML进行编程。

Ada Lovelace为Charles Babbage的分析机写了一个计算伯努利数的算法实现,因此被后世公认为是世界上第一个程序员。实际上,分析机由于其设计思想过于先进,在当时根本没有 被制造出来。(Babbage的分析机一般被认为是现代电子通用计算机的先驱)

讽刺现在的某些“软件架构师”顶多只会纸上谈兵地画画UML。


1936 - Alan Turing发明了世间一切程序语言的最终形态,但很快他就被英国军情六处“请”去当007了,以至于他根本来不及为这些语言申请专利。

与通用图灵机(Universal Turing machine)等价的语言被称为图灵完备的(Turing 
completeness),它定义了“什么样的语言可以被称作是程序语言”。

二战期间Turing曾秘密地为英国军方工作,破解德军的Enigma密码机,并在战后被授予大英帝国勋章。但这项事实直到多年以后才向公众公开


1936 - Alonzo Church同时也发明了世间一切程序语言的最终形态,甚至做得更好。但他的λ演算被绝大部分人忽视了,因为它与C语言“不够像”。尽管存在着这样的批评,但事实上,C在当时还没有被发明出来。

Church是Turing在Princeton的博士生导师,他在λ演算方面的工作先于Turing指出了不存在一个对可判定性问题的通用解法,这后来证明和Turing针对停机问题提出的图灵机模型是等价的。即著名的Church-Turing论题。

说Church“甚至做得更好”,因为λ演算为后世所有的函数式语言提供了理论基础。

现在一种常见的关于函数式编程的批评就是:“它们与C语言不够像”。


1940年代 - 一些直接采用布线和开关来进行程序控制的“计算机”出现了。工程师们当时这么做,据说是为了避开“用空格还是用制表符缩进”这样的论战。

据说当时负责设计ENIAC的工程师中间曾经发生过这样的争论:

  • 空格比制表符好。

  • 制表符比空格好。

  • 4个空格比8个空格好。

  • 什么?用2个空格的统统烧死。

关于这台具有里程碑意义的人类史上第一台电子计算机ENIAC上应该预装何种编辑器,工程师们还发生过这样的争吵:

  • Vim比Emacs好!

  • Emacs比Vim好!

  • 强烈推荐Sublime Text。

  • 你丫用编辑器的都是找虐,IDE才是王道。

  • 没错,要用就用世界上最好的公司微软开发出来的世界上最好的IDE:Visual Studio。

  • 我早就看透了无谓的编辑器论战什么的了,我要告诉楼上吵架的,你们全都是傻逼!

最后,工程师们一致决定使用布线和开关来为他们即将发明的计算机进行编程,机智地避开了所有这些无谓的争吵,最终齐心协力创造出了人类历史上第一台电子计算机:ENIAC。(鼓掌)

两位ENIAC程序员在运用敏捷开发方法进行愉快的结对编程。“自从抛弃伴随我多年的Emacs和HHKB Pro、改用布线和开关进行编程之后,我的左手小指麻痹奇迹般地痊愈了。”其中一位接受采访时如是说。另一位则表示:“新的编程方式让曾经专注颈椎病20年的我得到了彻底的康复,不用再整天盯着显示屏,身心同时得到了极大的放松,值得大力推广!”)


1957 - John Backus和IBM发明了FORTRAN语言。关于IBM或FORTRAN并没有什么特别好笑的地方。除了,写FORTRAN程序的时候不系蓝领带将被编译器视作是一个syntax error。

蓝领带、白衬衫、深色西装似乎是IBM公司20世纪经典的dress code。

早期FORTRAN(FORTRAN 77)对程序书写格式的要求那是相当严格。(例如,蛋疼的固定格式缩进)


1958 - John McCarthy和Paul Graham发明了LISP。由于冷战期间的战略括号资源储备所造成的巨大成本,LISP从未流行过。尽管欠缺足够的流行度,LISP(现在叫做 “Lisp”,有时叫“Arc”)仍然被视作一门有影响力的语言,在关键的算法思想诸如递归(recursion)和提升逼格 (condescension)上尤为典范。

LISP发明的那一年Paul Graham其实还没有出生。据说是因为某本叫做《Haste and 
Waste》的伪程装黑圣典实在太有名了,以至于许多编程小白们把写这本书的传奇人物同Lisp之间画上了等号。

提升逼格确实是一种与递归调用同样关键的算法思想。嗯,你懂的。


1959 - 在输掉了和L. Ron Hubbard之间的一场打赌之后,Grace Hopper和其他几个抖S发明了所谓的“面向Boilerplate的全大写化语言(Capitalization Of Boilerplate Oriented Language,COBOL)”。多年以后,由于一些被误导的、性别歧视主义者对Adm. Hopper关于COBOL的工作的报复,在Ruby技术会议上不时会看到一些厌女主义乃至仇视女性的材料出现。

L. Ron Hubbard是山达基教(Scientology)的创始人,二战期间曾与Grace 
Hopper同样供职于美国海军。(尚不清楚这两人之间有无其他联系)

COBOL语言以代码极其冗长和通篇大写字母的书写风格而闻名。

Adm. Hopper:Grace Murray Hopper女士的军衔是Rear Admiral Lower Half,即美国海军准将。


1964 - John Kemeny和Thomas Kurtz创造了BASIC,一个为非计算机科学家设计的非结构化的程序语言。

1965 - Kemeny和Kurtz两人goto到了1964。

调侃BASIC语言对行号和goto的无节制滥用。


1970 - Guy Steele和Gerald Sussman创造了Scheme。他们的工作导致了一系列以《Lambda之究极(Lambda the Ultimate)……》为标题开头的论文发表,并在《Lambda之究极厨房神器》这一篇中达到了最高潮。以这篇论文为基础,开始了一个长年累月的、收 视率究极失败的晚间电视购物节目。Lambda们因为其概念相对难以理解而被大众所忽视,直到未来的某一天,Java语言终于让它们变得有名了起来。通过 不包含它们这件事情。


1970 - Niklaus Wirth创造了Pascal,一个过程式的语言。很快就有人开始声讨Pascal,因为它使用了类似“x := x + y”这样的语法,而不是更为人熟知的类C语法“x = x + y”。尽管存在着这样的批评,而事实上当时C还没有被发明出来。


1972 - Dennis Ritchie发明了一把射击时能同时向前和向后两个方向发射子弹的绝世好枪。但他对此发明造成的致死和终身残疾数量感到还不够满意,所以他又发明了C语言和Unix。


1972 - Alain Colmerauer设计了逻辑编程语言Prolog。他的目标是创造一个具有两岁小孩智商的程序语言。为了证明他成功达到了这个目标,他展示了一个Prolog程序,它对于每条查询都会机智地给出相同的回答:“No”。


1973 - Robin Milner创造了ML,一个建立在M&M类型理论基础上的语言。由ML衍生而来的SML加上了一套形式语义的规范。当被要求给这个形式语义本身 书写一套形式语义时,Milner的脑子爆掉了。其他ML家族的著名语言还包括OCaml,F#,和,Visual Basic。


1980 - Alan Kay创造了Smalltalk并发明了“面向对象”这个词。当被问到它的含义时,他回答道:“Smalltalk程序本身就是对象。”当被问到对象是由 什么组成时,他回答到:“对象。”当再一次被问到这个问题时,他说“看,它从里到外都是对象。直到你抽出一只乌龟。”

Smalltalk的设计从很大程度上受到了Logo的影响。


1983 - 为了纪念伟大的先辈程序员Ada Lovelace那能够写出永远也无法被执行的代码的彪悍技能,Jean Ichbiah和美国国防部创造了Ada语言。尽管缺乏证据显示有任何重要的Ada程序曾经被完成过,历史学家仍然确信Ada是个成功的公益项目,它让数 以千计的国防承包商免于沦落为与黑帮为伍。

Ada曾经是美国国防部指定的嵌入式计算机系统唯一开发语言,在其研发上耗资巨大。(国防承包商们于是不用靠贩卖军火给黑帮来维持生计了)

虽然有充分的证据显示Ada的整型范围溢出检查失败导致弄坏了欧空局的一枚Ariane 5运载火箭,不过美国国防部发言人对此表示:关我P事。


1983 - Bjarne Stroustrup把他所听说过的一切都试图嫁接到C上,创造出了C++。最后得到的语言是如此地复杂,以至于程序必须被送到未来去让“天网”人工智能 进行编译。编译时间难以容忍。天网开展这项服务的动机仍然不为人知,但来自未来的发言人说道:“没什么好担心的,宝贝。”带着一口奥地利腔的机械口音。有 一些来自坊间的推测,所谓的天网只不过是个自命不凡的缓冲区溢出而已。


1986 - Brad Cox和Tom Love创造了Objective-C,宣称“该语言完美地结合了C的内存安全性与Smalltalk的神奇效率”。现在的历史学家怀疑这两人其实是诵读障碍症患者。

“C的内存安全性…”

Smalltalk编译出来的程序以低效缓慢著称。


1987 - Larry Wall在电脑前打了个盹,Larry Wall的脑门子压到了键盘上。醒来之后,Larry Wall深信 ,在Larry Wall的显示器上出现的神秘字符串并非是随机的,那是某种编程语言之程序样例的神谕。那必是上帝要他的先知,Larry Wall,去设计的。Perl语言就此诞生了。


1990 - 一个由Simon Peyton-Jones、Paul Hudak、Philip Wadler、Ashton Kutcher和善待动物组织(PETA)组成的委员会创造了Haskell,一种纯函数式的、非严求值的语言。Haskell由于使用了Monad这种 较费解的概念来控制副作用而遭到了一些批评意见。Wadler试图平息这些质疑,他解释说:“一个单子(Monad)说白了不过就是自函子范畴上的一个幺 半群而已,这有什么难以理解的?”


1991 - 荷兰程序员Guido van Rossum为了一次神秘的手术而进行了一次阿根廷之旅。回来后他带着一个巨大的颅疤,发明了Python,而被数以军团计的追随者们加冕为“终生大独裁 者”,并向全世界宣布“要办到一件事情,只可有唯一的一种方法!”。整个波兰陷入了恐慌。

BDFL(Benevolent Dictator for 
Life):开源社区一种流行的说法,“仁慈的”终生大独裁者。这个说法最早指的就是Guido van Rossum。

希特勒在提出建立“纯正的雅利安人国家”“统一的大德意志帝国”并实现了德奥合并之后,翌年便入侵了波兰,引发了第二次世界大战。“我一个人征服了整个欧洲!”(感觉好棒好棒的)


1995 - 在家门口附近的一个意大利饭馆用餐时,Rasmus Lerdorf意识到他吃的那盘意面正好是一个用来理解WWW万维网的极好模型,而所有的Web应用都应该仿照它们的媒介那样去做。在他的餐巾的背后,他 设计出了著名的“可编程超链接Pasta(Programmable Hyperlinked Pasta,PHP)”语言。PHP的文档至今仍然保留在那片餐巾上。

PHP最显著的特点就是:代码是可以直接嵌在HTML文档中的。


1995 - 松本“Mad Matz”行弘创造出了Ruby语言,用来辟谣一些意味不明的、有关澳洲将会变成一片由莫霍克族战士和Tina Turner统治的荒漠的末世预言。该语言后来被它的真正发明者David Heinemeier Hansson重新命名为Ruby on Rails。(关于某个叫松本行弘的人发明了一种叫做Ruby的语言这件事情从未发生过,最好在这篇文章的下一个版本中删掉。 - DHH表示)

最早关于Ruby的国际会议不是RubyConf,而是每年在澳大利亚举办的OSDConf。

这里应该是在吐槽Ruby的杀手级应用Ruby on Rails实在太有名了,以至于超越了原来的Ruby语言本身。

Matz并没有为“Ruby”这个名字注册商标——本着开源的黑客精神。

而DHH(RoR的作者)却把“Ruby on 
Rails”这个(包含了“Ruby”字样的)名称注册成了商标,并且阻止别人未经授权使用“Rails”这个名字。

(虽然抢注商标对开源来说未必是一件坏事情——Python基金会今年在欧洲还卷入了一场商标之争了不是)


1995 - Brendan Eich读完了历史上所有在程序语言设计中曾经出现过的错误,自己又发明了一些更多的错误,然后用它们创造出了LiveScript。之后,为了紧跟 Java语言的时髦潮流,它被重新命名为JavaScript。再然后,为了追随一种皮肤病的时髦潮流,这语言又被命名为ECMAScript。


1996 - James Gosling发明了Java。Java是一个相对繁冗的、带垃圾收集的、基于类的、静态类型的、单分派的面向对象语言,拥有单实现继承和多接口继承。Sun不遗余力地宣传着Java的独一无二不同凡响之处。


2001 - Anders Hejlsberg发明了C#。C#是一个相对繁冗的、带垃圾收集的、基于类的、静态类型的、单分派的面向对象语言,拥有单实现继承和多接口继承。微软不遗余力地宣传着C#的独一无二不同凡响之处。


2003 - 一个叫Martin Odersky的醉汉看见了好时瑞森花生酱杯的广告,展示了某个人的花生酱倒入另一个人的巧克力的场景,他忽然有了个点子。他创造了Scala,一种结合 了面向对象和函数式编程的语言。这同时激怒了两个阵营的忠实信徒,他们立刻宣布要发动圣战烧死异教徒。


2005年

David Hanselmeyer Hansen创建了一个名为Ruby on Rails的Web框架,人们不再记得这两者是分开的东西。

 

2006年

约翰·雷西格(John Resig)为JavaScript编写了一个帮助程序库,每个人都认为这是一种语言,并且从互联网上复制和粘贴jQuery代码。


2009年

肯·汤普森(Ken Thompson)和罗伯·派克(Rob Pike)决定制作一种像C这样的语言,但是用于更多的安全设备和更适销的产品,并以Gophers作为吉祥物,他们称之为Go。

Graydon Hoare也想要像C这样的语言,他称之为Rust。大家都要求每一个软件都要立即在Rust里面重写。Graydon想要更炫的东西,并开始在Swift上为Apple工作。


2012

安德斯·海尔斯伯格(Anders Hjelsberg)想在浏览器中编写C#,他设计了TypeScript,它是JavaScript,但是其中包含更多的Java。(这人又出现了)

 

2013

杰里米·阿什基纳斯(Jeremy Ashkenas)想要像Ruby开发者一样快乐,他创建了CoffeeScript,编译成JavaScript,但看起来更像Ruby。


2014

2010年7月开始,克里斯·拉特纳(Chris Lattner)开始设计Swift。完成基础架构后,带领开发小组陆续完成语法设计、编译器、运行时、框架、IDE和文档等相关工作。这个语言在2014年WWDC大会上公开。


未来的趋势

由于未来人工智能的大热,我认为适合人工智能的语言将会成功,我比较倾向于自然语言如Python。

  • 转载自微信公众号 STEAM解密

atan2(y,x)和pow(x,y)


atan2(x,y):atan2()区别于atan()函数,返回-pi~+pi范围的角度;
使用过程中发现在MATLAB和Excel中该函数的表达形式不一致,故记录如下。
- Excel
定义atan2(x,y)返回点(x,y)与x轴正向的夹角;
即在第一象限中atan2(x,y)=atan(y/x).
- Matlab与CFX CEL
定义atan2(y,x)返回点(x,y)与x轴正向的夹角;
即在第一象限中atan2(y,x)=atan(y/x).pow(x,y):pow函数是求次方的函数,

函数原型是double pow(double a,double b);使用时应包含math.h头文件。

函数pow(x,y)实现运算x^y,即x的y次方,这里x和y都为整数。

算法的基本思想是,减少乘法次数,重复利用结算结果,例如:
x^4,如果逐个相乘的话,需要四次乘法。如果我们这样分解(x^2)*(x^2)就只需要2两次乘法,因为x^2的结果我们可以重复利用。所以我们最好做对称的分解指数y,然后求x^(y/2)的平方。


转载于:https://www.cnblogs.com/zero-vic/p/9906227.html

history of program atan2(y,x)和pow(x,y)相关推荐

  1. 实验2.4 使用系统函数pow(x,y)计算xy的值

    题目 使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h AC的C++代码如下: #include<iostream> #include<math.h> us ...

  2. Math.pow(x,y)使用注意事项

    首先明确Math.pow(x,y)的作用就是计算x的y次方,其计算后是浮点数,这里先看一个例子: 例1:153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1*1*1+5*5*5+3*3* ...

  3. python几次方函数_Python标准库math中用来计算x的y次方的函数是pow(x,y)。

    [判断题]Python表达式int("110", 2)的值为6. [单选题]关于 Python 的复数类型,以下选项中描述错误的是( ). [判断题]现代物流管理以实现顾客满意为第 ...

  4. 给定平面上任意三个点的坐标(x​1,y​1)、(x​2​​ ,y​2​​)、(x​3​​ ,y​3​​),检验它们能否构成三角形

    给定平面上任意三个点的坐标(x​1,y​1).(x​2​​ ,y​2​​).(x​3​​ ,y​3​​),检验它们能否构成三角形. 输入:在一行中顺序给出六个[−100,100]范围内的数字,即三个点 ...

  5. R语言ggplot2可视化使用不连续的y轴、中断的Y轴来可视化数值分布差异很大的数据实战:把数据轴分为两个区间或者多个区间来匹配不同区间数据的可视化(因为有的数据可能10附近,有的数值可能1W附近)

    R语言ggplot2可视化使用不连续的y轴.中断的Y轴来可视化数值分布差异很大的数据实战:把数据轴分为两个区间或者多个区间来匹配不同区间数据的可视化(因为有的数据可能10附近,有的数值可能1W附近) ...

  6. R语言使用latticeExtra包可视化双Y轴线图实战(Dual Y axis):单y轴线图、双y轴图线图、双y轴图线图(添加图例)

    R语言使用latticeExtra包可视化双Y轴线图实战(Dual Y axis):单y轴线图.双y轴图线图.双y轴图线图(添加图例) 目录

  7. 用matlab绘制抛物线y的x平方,我刚刚学习MATLAB,想画一下(x^2+y^2-1)^3=x^2*y^3这个曲线的图像,该怎么画呢,谢谢大家了。...

    syms x y zezsurf(x,y,1-x-2*y)如果希望去除网格可以再加上shading interp如果想让坐标轴显示比例相等,可以再加上axis equalwww.mh456.com防采 ...

  8. c语言程序设计多数求最大值,C语言编程问题存在三个整数,使x²+y²+z²=625,求x+y+z的最大值。这是大一C语言实验书的习题,请不要用过于复杂的算法语句...

    设计:625的方根是25,所以x,y,z最大值是25(不考虑负数情况) 设定一个数组变量max[4], max[0]保存x+y+z的最大值,max[1]-max[3]保存此最大数的x,y,z值. 程序 ...

  9. 2019\National _C_C++_B\1.求2019<X<Y ,使2019*2019,X*X,Y*Y组成等差数列且X+Y最小.

    求2019<X<Y ,使20192019,XX,Y*Y组成等差数列且X+Y最小. 暴力 直接暴力循环出结果. Python def solve():for x in range(2020, ...

最新文章

  1. 关于过滤空格问题(未经测试)
  2. arduino项目_quot;Arduino智能车项目quot;实战班开班!
  3. Locality Sensitive Hashing
  4. java druid jdbc例子_JDBC【使用Druid连接数据库,DBUtils工具类的使用】
  5. 阿里云部署django项目流程【centos7+python3+mysql】
  6. 5s突然一直信号无服务器,手机突然没信号了怎么回事?
  7. vscode shift+ arl + f 格式化统一(笔记)
  8. 数据库连接池问题[转]
  9. DbUtils操作数据库的用法
  10. 异常笔记:运行hdfs copyFromLocal 上传文件报错
  11. tomcat 多实例的Sys V风格脚本
  12. iOS比较当前日期与指定日期大小
  13. 青年与计算机比赛,我市首届青少年电脑机器人竞赛精彩上演
  14. WINVNC源码分析(四)-vnchooks
  15. 东北大学计算机硬件题库,东北大学20春学期《计算机硬件技术基础》在线平时作业123答案100...
  16. 怎样用比较器实现信号的衰减和饱和_水下技术 无人水下航行器在水电站隧洞检查中的应用探讨...
  17. 《数学之美》一些知识
  18. SWUSTOJ #617 班级课程成绩计算
  19. mysql登录报错“Access denied for user ‘root‘@‘localhost‘ (using password: YES”的处理方法
  20. 动态头像 Android 实现,Android开发中实现一个头像滑动变大变小功能

热门文章

  1. 大素数判定以及大整数分解
  2. 股票量化分析系统浅析之(三)归一化与标准化
  3. [小程序模板] 化妆品商城小程序模板 商城APP模板 化妆品商城小程序前端源码+免费分享
  4. 机器学习中在线学习、批量学习、迁移学习、主动学习的区别
  5. 集合类框架的常用类比
  6. 查看pg 用户组_PostgreSQL 角色用户管理
  7. matlab 天线设计 泰勒加权_泰勒加权功分器
  8. LED和LCD,LED和OLED,AMOLED和OLED有什么区别
  9. 数字IC设计工程师笔试面试经典100题-有答案
  10. 瑞波加入超级账本区块链联盟