文档章节

12 种编程语言的起源故事

OneAPM蓝海讯通
 OneAPM蓝海讯通
发布于 2016/05/19 10:43
字数 5404
阅读 61
收藏 3

过去的几十年间,大量的编程语言被发明、被替换、被修改或组合在一起。每种语言总在争论中诞生,又在进化中消亡。而这些语言的的创造者,无一不是编程世界中的标志性人物,高举探索的旗帜不断前行。敬仰之情促使了这篇文章的诞生,这里收集并分享了这五十年来最成功、最流行的十二门编程语言和它们的创造者的故事。

12 种编程语言的起源故事

##1、Java 的起源 1990 年代初,任职于 Sun 公司的詹姆斯·高斯林等人开始开发 Java 语言的雏形,最初被命名为 Oak,目标设置在家用电器等小型系统的程序语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通讯。由于这些智能化家电的市场需求没有预期的高, Sun 公司放弃了该项计划。随着 1990 年代互联网的发展, Sun 公司看见 Oak 在互联网上应用的前景,于是改造了 Oak,于1995年5月以 Java 的名称正式发布。Java 伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

与传统型态不同, Sun 公司在推出 Java 时就将其作为开放的技术。全球数以万计的 Java 开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同,此外,微软公司后来推出了与之竞争的 .NET 平台以及模仿 Java 的 C# 语言。后来 Sun 公司被甲骨文公司并购,Java 也随之成为甲骨文公司的产品。

Java 的创造是为了完成 WORA(Write once, run anywhere 一次编写到处运行)的理念,它的平台独立性使它在企业应用中获得了巨大成功。到目前为止,它已经成为了最流行的一门应用程序编程语言,被广泛应用于企业级Web应用开发和移动应用开发。

##2、C++ 的起源 这个构思起源于 Stroustrup 做博士论文时的一些程序撰写经验。他发现 Simula 具备很利于大型软件开发的特点,但 Simula 的运行速度太慢,无法对现实需求发挥功效;BCPL 虽快得多,但它过于低级的特性,使其不适于大型软件的开发。当 Stroustrup 开始在贝尔实验室工作时,他有分析 UNIX 核心关于分布式计算的问题。回想起他的博士论文经验,Stroustrup 开始为 C 语言增强一些类似 Simula 的特点。之所以选择 C,是因为它适于各种用途、快速和可移植性。除了 C 和 Simula 之外,同时也从其它语言中获取灵感,如 ALGOL 68、Ada、CLU 以及 ML。刚开始时,类、派生类、存储类型检查、内联和默认参数特性,都是通过 Cfront 引入 C 语言之中。1985 年 10 月出现了第一个商业化发布。

1983 年,C with Classes 改命名为 C++。加入了新的特性,其中包括虚函数、函数名和运算符重载、参考、常数、用户可控制的自由空间存储区控制、改良的类型检查,以及新的双斜线(//)单行注解风格。1985年,发布第一版《C++程序设计语言》,提供一个重点的语言参考,至此还不是官方标准。1989年,发布了Release 2.0。引入了多重继承、抽象类、静态成员函数、常数成员函数,以及成员保护。1990年,出版了The Annotated C++ Reference Manual。这本书后来成为标准化的基础。稍后还引入了模板、异常处理、名字空间、新的强制类型转换,以及布尔类型。

C++ 这个名字是 Rick Mascitti 于 1983 年中所建议的,并于 1983 年 12 月首次使用。更早以前,尚在研究阶段的发展中语言曾被称为“new C”,之后是“C with Classes”。在计算机科学中,C++ 仍被称为 C 语言的上层结构。它最后得名于 C 语言中的“++”操作符(其对变量的值进行递增)。而且在共同的命名约定中,使用“+”以表示增强的程序。Stroustrup 说:“这个名字象征着源自于C语言变化的自然演进”。C+ 是一个和 C/C++ 无关的早期编程语言。

##3、ASP.NET 的起源 1997 年时,微软开始针对 ASP 的缺点(尤其是意大利面型的程序开发方法)准备开始一个新项目来开发,当时 ASP.NET 的主要领导人 Scott Guthrie 刚从杜克大学毕业,他和 IIS 团队的 Mark Anders 经理一起合作两个月,开发出了下一代 ASP 技术的原型,这个原型在 1997 年的圣诞节时被发展出来,并给予一个名称:XSP,这个原型产品使用的是 Java 语言。不过它马上就被纳入当时还在开发中的 CLR 平台,Scott Guthrie事后也认为将这个技术移植到当时的 CLR 平台,确实有很大的风险,但当时的 XSP 团队却是以 CLR 开发应用的第一个团队。

为了将 XSP 移植到 CLR 中,XSP 团队将 XSP 的核心程序全部以 C# 语言重新撰写(在内部的项目代号是 "Project Cool",但是当时对公开场合是保密的),并且改名为 ASP+,作为 ASP 技术的后继者,并且也会提供一个简单的移转方法给 ASP 开发人员。ASP+ Beta 版本以及应用在 PDC 2000 中亮相,由 Bill Gates 主讲,由富士通公司展示使用 COBOL 语言撰写 ASP+ 应用程序,并且宣布它可以使用 Visual Basic .NET、C#、Perl、Nemerle 与 Python 语言来开发。

在 2000 年第二季时,微软正式推动 .NET 策略,ASP+ 也顺理成章的改名为 ASP.NET,经过四年的开发,第一个版本的 ASP.NET 在 2002 年 1 月 5 日亮相(和.NET Framework 1.0),Scott Guthrie 也成为ASP.NET的产品经理(到现在已经开发了数个微软产品,像 ASP.NET AJAX 和 Microsoft Silverlight)。

##4、PHP 的起源 PHP 原本的简称为 Personal Home Page,是拉斯姆斯·勒多夫为了要维护个人网页,而用 C 语言开发的一些CGI 工具程序集,来替换原先使用的 Perl 程序。最初这些工具程序用来显示拉斯姆斯·勒多夫的个人履历,以及统计网页流量。他将这些程序和一些窗体解释器集成起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。拉斯姆斯·勒多夫在 1995 年 6 月 8 日将 PHP/FI 公开发布,希望可以通过社区来加速程序开发与查找错误。这个发布的版本命名为 PHP 2,已经有今日 PHP 的一些雏型,像是类似 Perl 的变量命名方式、窗体处理功能、以及嵌入到 HTML 中运行的能力。程序语法上也类似 Perl,有较多的限制,不过更简单、更有弹性。

在 1997 年,任职于 Technion IIT 公司的两个以色列程序员:Zeev Suraski 和 Andi Gutmans,重写了PHP 的语法分析器,成为 PHP 3 的基础,而 PHP 也在这个时候改称为 PHP: Hypertext Preprocessor.。经过几个月测试,开发团队在 1997 年 11 月发布了 PHP/FI 2,随后就开始 PHP 3 的开放测试,最后在 1998 年 6 月正式发布 PHP 3。Zeev Suraski 和 Andi Gutmans 在 PHP 3 发布后开始改写 PHP 的核心,这个在 1999 年发布的语法分析器称为 Zend Engine,他们也在以色列的 Ramat Gan 成立了 Zend Technologies 来管理 PHP 的开发。

在 2000 年 5 月 22 日,以 Zend Engine 1.0 为基础的 PHP 4 正式发布,2004 年 7 月 13 日则发布了 PHP 5,PHP 5 则使用了第二代的 Zend Engine。PHP 包含了许多新特色,像是强化的面向对象功能、引入 PDO(PHP Data Objects,一个访问数据库的延伸库)、以及许多性能上的增强。目前 PHP 4 已经不会继续更新,以鼓励用户转移到 PHP 5。

2008 年 PHP 5 成为了 PHP 唯一维护中的稳定版本。现在已经有超过 2000 万个网站和 100 万个Web服务器使用了这门语言,Facebook、Wikipedia、Wordpress 以及 Joomla 这些互联网巨头都在使用它。

##5、JavaScript 的起源 最初由 Netscape 的 Brendan Eich 设计。 是甲骨文公司的注册商标。ECMA 国际以 为基础制定了 ECMAScript 标准。 也可以用于其他场合,如服务器端编程。完整的 实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。

Netscape 在最初将其脚本语言命名为 LiveScript,后来 Netscape 在与 Sun 合作之后将其改名为 。 最初受 Java 启发而开始设计的,目的之一就是“看上去像 Java”,因此语法上有类似之处,一些名称和命名规范也借自 Java。但 的主要设计原则源自 Self 和 Scheme。 与 Java 名称上的近似,是当时 Netscape 为了营销考虑与 Sun 微系统达成协议的结果。为了取得技术优势,微软推出了 JScript 来迎战 的脚本语言。为了互用性,Ecma 国际(前身为欧洲计算机制造商协会)创建了 ECMA-262 标准(ECMAScript)。两者都属于 ECMAScript 的实现。尽管 作为给非程序人员的脚本语言,而非作为给程序人员的脚本语言来推广和宣传,但是 具有非常丰富的特性。

##6、「红宝石」语言的起源 1993年,松本行弘开始 Ruby 语言的研发工作,试图集成脚本语言中最好的特点,基于 C 语言开发,但比 Perl 更强大,比 Python 更面向对象。1994 年,松本行弘独立完成 Ruby 的第一个 Alpha 版,那年他才28岁。松本行弘把它取名 Ruby,也因这名字是一种美丽珍贵的红宝石之意。Ruby 本身也极具魅力——这种解释型脚本语言,既有脚本语言强大的字符串处理能力和正则表达式,又不失解释型语言的动态性。

此外,松本行弘还借鉴了 Perl 语言在文字处理方面的优势,由 Ruby 编写的程序不需事先编译即可直接运行,因此利于实现开发过程中的快速反馈,极大地方便了程序的调试。1995 年 Ruby 脚本语言的第一个版本发布后,因其大大提高了开发者的工作效率,让编程更有乐趣,很快在日本非常流行。

1997 年开始,松本行弘在“株式会社 Network 应用通信研究所”担任特别研究员,专注于 Ruby 的开发。2000年,Dave Thomas 首次将这 Ruby 介绍到了英文社区,很快掀起了 Ruby 语言的热潮。Ruby 的灵活特性给动态编程语言注入了新的活力,逐渐获得全世界范围的程序设计者的喜爱。

世界上没有一种完美的语言,Ruby 也一样。尽管 Ruby 很棒,但很多人还是觉得他的性能效率较低。不过好在后来开发者也通过一些扩展来弥补 Ruby 的瓶颈。2004年,丹麦人 David Heinemeier Hansson 用 Ruby 语言开发的一种 Web 框架 Ruby on Rails,可达到 J2EE 开发速度的 10 倍以上,被很多人视为“软件开发的银弹”,Ruby 开始在全球范围内流行。

##7、Scala 的起源 Scala 是一门多范式的编程语言,一种类似 Java 的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。

2001 年,洛桑联邦理工学院的马丁·奥德斯基开始基于 Funnel 的工作开始设计 Scala。Funnel 是把函数式编程思想和佩特里网相结合的一种编程语言。 奥德斯基之前工作于 Generic Java 和 javac。Java 平台的Scala 于 2003 年底/ 2004 年初发布。.NET 平台的 Scala 发布于 2004 年 6 月。该语言第二个版本,v2.0,发布于 2006 年 3 月。2009 年 4 月,Twitter 宣布他们已经把大部分后端程序从 Ruby 迁移到Scala,其余部分也打算要迁移。此外, Wattzon 已经公开宣称,其整个平台都已经是基于 Scala 基础设施编写的。

2014 年,马丁·奥德斯基宣布 Scala 2.12 将要简化语法,推出 Scala "Don Giovanni" 项目的时候,表示:“Scala 现在是为聪明人创造的,以后也是为聪明人服务的。” 不同于 Python 让程序员用一种方法做所有事情,Scala 提供一整套工具,让程序员自由选择,无论是 mutable 数据结构,immutable 数据结构,并行(parallel)数据结构。然后在这些选择中,Scala 再针对他们进行算法层面的特殊优化。Scala 相信程序员的聪明才智,让程序员自行选择合适的结构,以针对变化万千的任务需求,这点是 Scala 做得好的地方。

##8、Python 的起源 1989 年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为 ABC 语言的一种继承。之所以选中 Python 作为程序的名字,是因为他是 BBC 电视剧——蒙提·派森的飞行马戏团(Monty Python's Flying Circus)的爱好者。ABC 是由吉多参加设计的一种教学语言。就吉多本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是 ABC 语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在 Python 中避免这一错误,并获取了非常好的效果,完美结合了 C 和其他一些语言。

就这样,Python 在吉多手中诞生了。实际上,第一个实现是在 Mac 机上。可以说,Python 是从 ABC 发展起来,主要受到了 Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了 Unix shell 和C 的习惯。目前吉多仍然是 Python 的主要开发者,决定整个 Python 语言的发展方向。Python 社区经常称呼他是仁慈的独裁者(BDFL),意思是他仍然关注 Python 的开发进程,并在必要的时刻做出决定。

Python 的设计哲学是“优雅”、“明确”、“简单”。Python 开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。在设计 Python 语言时,如果面临多种选择,Python 开发者一般会拒绝花俏的语法,而选择明确没有或者很少有歧义的语法。这些准则被称为“Python 格言”。

##9、Go 的起源 Go,又称 golang,是 Google 开发的一种静态强类型、编译型,并发型,并具有垃圾回收功能的编程语言。

罗伯特·格瑞史莫,罗勃·派克(Rob Pike)及肯·汤普逊于 2007 年 9 月开始设计 Go 语言,稍后 Ian Lance Taylor, Russ Cox 加入项目中。谷歌把 Go 作为一个 20% 项目开始研发,即让员工抽出本职工作之外时间的 20%, 投入在该项目上。除了派克外,该项目的成员还有其他谷歌工程师也参与研发。对于开发这门语言的起因,派克说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。

Go 语言是基于 Inferno 操作系统所开发的。Go 语言于 2009 年 11 月正式宣布推出,成为开放源代码项目,并在 Linux 及 MacOS X 平台上进行了实现,后追加 Windows 系统下的实现。2010 年 1 月 10 日,Go 语言摘得了 TIOBE 公布的 2009 年年度大奖,该奖项授予在 2009 年市场份额增长最多的编程语言

##10、Android 的起源 2003 年 10 月,安迪·鲁宾(Andy Rubin)在美国创建了 Android 科技公司(Android Inc.),并与利奇·米纳尔(Rich Miner)、尼克·席尔斯(Nick Sears)、克里斯·怀特(Chris White)共同发展这家公司。Android 系统最初由安迪·鲁宾(Andy Rubin)等人开发制作,最初开发这个系统的目的是创建一个数码相机的先进操作系统,但是后来发现市场需求不够大,加上智能手机市场快速成长,于是 Android 被改造为一款面向智能手机的操作系统。谈到创建 Android 科技公司的原因,鲁宾说:“聪明的移动设备能更好的意识到用户的爱好和要求。”尽管 Android 科技公司的创始人和员工过去都具有各自的科技成就,但是 Android 科技公司的经营只显露出它在智能手机软件的方面,这时鲁宾为 Android 科技公司花光所有钱。

2005 年 8 月 17 日,Google 低调收购了成立仅 22 个月的高科技企业 Android 及其团队。安迪鲁宾成为Google 公司工程部副总裁,继续负责 Android 项目。2007 年 11 月 5 日,谷歌公司正式向外界展示了这款名为 Android 的操作系统,并且在这天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与 84 家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟(Open Handset Alliance)来共同研发改良 Android 系统。

2013 年 09 月 24 日谷歌开发的操作系统 Android 迎来了 5 岁生日,全世界采用这款系统的设备数量已经达到 10 亿台。

##11、Swift 的起源 2010 年 7 月,苹果开发者工具部门总监克里斯·拉特纳开始着手 Swift 编程语言的设计工作,以一年时间,完成基本架构后,他领导了一个设计团队大力参与其中。Swift 大约历经4年的开发期,2014 年 6 月发表。

苹果宣称 Swift 的特点是:快速、现代、安全、互动,而且明显优于 Objective-C 语言。Swift 以 LLVM 编译,可以使用现有的 Cocoa 和 Cocoa Touch 框架。Xcode Playgrounds 功能是 Swift 为苹果开发工具带来的最大创新,该功能提供强大的互动效果,能让 Swift 源代码在撰写过程中能即时显示出其运行结果。拉特纳本人强调,Playgrounds 很大程度是受到布雷特·维克多(Bret Victor)理念的启发。

2015 年 6 月 8 日,苹果于 WWDC 2015 上宣布,Swift 将开放源代码,包括编译器和标准库。

2015 年 12 月 3 日,苹果宣布开源 Swift,并支持 Linux,苹果在新网站 swift.org 和托管网站 Github 上开源了 Swift,但苹果的 app store 并不支持开源的 Swift,只支持苹果官方的 Swift 版本,官方版本会在新网站 swift.org 上定期与开源版本同步。

##12、Node.js 的起源 Node.js 由 Ryan Dahl 和一些其他的开发者于2009年在 Joyent 工作时发明。Node.js 在2009年初次发布于Linux。 开发和维护工作由 Dahl 主持,其工作单位 Joyent 同时赞助这些工作。

Dahl 设计 Node.js 的灵感来自于 Flickr 上的一款上传进度栏,浏览器并不清楚多少文件内容已被上传,除非向服务器进行查询。Dahl 于是设计了一个更简便的方法。这个集成了 Google V8 JavaScript 引擎和一个底层 I/O API 的项目由 Dahl 在 inaugural European JSConf 向公众进行展示。

Node.js 已经有数十万模块,它们可以通过一个名为 npm 的管理器免费下载。

本文系 OneAPM 工程师整理呈现。OneAPM 能为您提供端到端的应用性能解决方案,我们支持所有常见的框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,性能监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

© 著作权归作者所有

OneAPM蓝海讯通
粉丝 94
博文 631
码字总数 1266889
作品 0
海淀
私信 提问
运营女的搭讪经历

以下内容由本人编写,如有巧合,纯属雷同. [www.oneapm.com][1] ![运营女的搭讪经历 技术分享 第1张][2] 写这篇文章之前,我特意查了一下软文的概念:顾名思义是相对于硬性广告而言,由企业的市场...

OneAPM蓝海讯通
2016/05/25
113
0
从 BASIC 到 Ruby:入门编程语言的体悟

为什么 BASIC 是一种备受喜爱的入门语言?下一代该如何学习编程? 《Command Line Heroes》 第三季的第二集今天抵达了,它对我的入门编程的怀旧让我回到了过去。 (LCTT 译注:《Command Lin...

作者: Matthew Broberg
07/14
0
0
数据挖掘工程师如何选择数据可视化工具?

如何选择数据可视化工具? 如何选用数据可视化工具?在回答这个问题之前现需要回答另外一个问题,你需要用这些数据可视化工具来做什么,实现什么目的。 也许你有一个完整的想法,已经通过验证...

huangbo929
2017/07/03
0
0
第1章 开始 Lisp 之旅 GETTING STARTED WITH LISP

第1章 开始 Lisp 之旅 GETTING STARTED WITH LISP 翻译者:FreeBlues github版本:https://github.com/FreeBlues/Land-of-lisp-CN 开源中国版本:http://my.oschina.net/freeblues/blog?cata......

FreeBlues
2014/07/08
498
0
辩证的观点定夺喜爱的编程语言好不好

【IT168 评论】我的《Python is important》这篇博客引来如此多的评论,让我颇为意外。大多数的评论是正面的,但同时多少也都带点不太积极的色彩。我发现,这些评论反映出的一个很突出的问题...

作者:外刊评论
2012/03/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

程序设计基础(C)第06讲例程

1summing.c /* summing.c -- 根据用户键入的整数求和 */#include <stdio.h>int main(void){ long num; long sum = 0L; /* 把sum 初始化为0 */ int status; p......

树人大学数字媒体吴凡
23分钟前
6
0
聊聊nacos config的publishConfig

序 本文主要研究一下nacos config的publishConfig ConfigController nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/controller/ConfigController.java @Controller@R......

go4it
50分钟前
5
0
Eureka应用注册与集群数据同步源码解析

在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean register() t...

Java学习录
今天
11
0
Java描述设计模式(15):责任链模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景描述 1、请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批当 3<day<=5 天,部门经理审批当 day>5 天...

知了一笑
今天
10
0
总结:数组与链表

1、内存申请:数组在内存上是连续的空间;链表,内存地址上可以是不连续的。 2、查询速度:数组可以随机访问,链表必须顺序访问,即从首个元素开始遍历,逐个查找,所以数组查询很快。 3、写入...

浮躁的码农
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部