12 种编程语言的起源故事

Wesley13
• 阅读 505

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

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 官方博客

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
00_设计模式之语言选择
设计模式之语言选择设计模式简介背景设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这