Java的来龙去脉

计算机的诞生

  • 二战时美国陆军的弹道研究实验室为了计算火炮弹道射击表,雇佣了很多女性员工(男人都去打仗了)来进行数据记录和计算,但是他们渐渐发现按照人工计算速度,可能等到项目负责人有孙子都还没能计算完成,因此他们迫切的需要一款计算机能够代替人工,提高计算速度。请添加图片描述

  • 研制工作十分幸运的是,当时任弹道研究所顾问、正在参加美国第一颗原子弹研制工作的数学家冯·诺依曼)带着原子弹研制)过程中遇到的大量计算问题,在研制过程中期加入了研制小组。原本的ENIAC存在两个问题没有存储器且它用布线接板进行控制,甚至要搭接几天,计算速度也就被这一工作抵消了。1945年,冯·诺依曼和他的研制小组在共同讨论的基础上,发表了一个全新的“存储程序通用电子计算机方案”——EDVAC(Electronic Discrete Variable Automatic Computer)。在此过程中他对ENIAC计算机的许多关键性问题的解决作出了重要贡献,从而保证了计算机的顺利问世。
    请添加图片描述

  • ENIAC重30吨,使用了约18800个真空电子管(每5秒就要坏掉一个),功率达174千瓦,占地约140平方米,使用十进制运算,每秒能运算5000次加法,但是它不像现在这样的电脑有输入控制设备,只能通过人工来扳动庞大面板上的各种开关来进行数据信息输入,虽然现在看来它真的很落后,但是在当时它代表着人类计算技术的最高成就,它奠定了电子计算机的发展基础,开辟了信息时代。

约翰·冯·诺伊曼和EDVAC
  • 冯·诺伊曼出生在布达佩斯富裕的犹太家庭,是诺依曼·米克萨(Neumann Miksa)和坎恩·玛吉特(Kann Margit)的3个孩子中最大的一个。他小时候外号“扬奇”(“Jancsi”,即"János"的昵称),当时已经显出惊人的记忆力。他6岁时已能用古希腊语同父亲闲谈,还可以心算8位数除法,8岁时自学微积分学。年少时的他不但对数学很有兴趣,亦喜欢阅读历史和社会方面的书籍,读过的书籍和论文能很快一句不漏地将内容复述出来,而且多年以后仍是如此。
  • 1913年,他的父亲马克斯·诺伊曼被授予世袭贵族头衔,这样在德国他的后代可以以“冯·诺伊曼”为姓,冯·诺伊曼晋身贵族。约翰加上头衔后的全名成为"Margittai Neumann János"。后来约翰把名字改成德语名"Johann von Neumann"。其名"John"(约翰)意为“主是仁慈的”,姓氏中的"von"是德语介词,而"Neumann"意为"neu"(new)+“Mann”(man),即“新人”。
  • 在第二次世界大战期间,冯·诺伊曼(von Neumann)与理论物理学家爱德华·泰勒(Edward Teller),数学家斯坦尼斯拉夫·乌兰姆(Stanislaw Ulam)等人一起研究了曼哈顿计划。由于在曼哈顿工程中需要大量的运算,从而使用了当时最先进的两台计算机Mark I和ENIAC。在使用Mark I和ENIAC的过程中,他意识到了存储程序的重要性,从而提出了存储程序逻辑结构,该结构指导了将存储设备与中央处理器分开的概念。
  • 1945年6月,他与戈德斯坦、勃克斯等人,联名发表了一篇长达101页纸的报告,即计算机史上著名的“101页报告”,是现代计算机科学发展里程碑式的文献。明确规定用二进制替代十进制运算,并将计算机分成5大组件,这一卓越的思想为电子计算机的逻辑结构设计奠定了基础,已成为计算机设计的基本原则。
    请添加图片描述
  • 1945年,冯·诺依曼和他的研制小组在共同讨论的基础上,发表了一个全新的“存储程序通用电子计算机方案”——EDVAC(Electronic Discrete Variable Automatic Computer)在此过程中他对计算机的许多关键性问题的解决作出了重要贡献,从而保证了计算机的顺利问世。1951年,EDVAC计算机宣告完成。

EDVAC计算机在体系结构上主要特点有:
以运算单元为中心
采用存储程序原理
存储器是按地址访问、线性编址的空间
控制流由指令流产生
指令由操作码和地址码组成
数据以二进制编码


计算机语言发展史

编程语言的历史从早期机械计算机的文档到现代软件开发工具。早期的编程语言高度专业化,依赖于数学符号和类似晦涩的语法。整个 20 世纪,编译器理论的研究导致了高级编程语言的创建,这些语言使用更易于访问的语法来传达指令。
第一种高级编程语言是Plankalkül,由Konrad Zuse在 1942 年至 1945 年间创建。第一种具有相关编译器的高级语言是Corrado Böhm在 1951 年为他的博士论文创建的。第一个商用语言是FORTRAN(公式翻译),由领导的研究小组于1956年开发的(第一手动出现在1956年,但在1954年首先开发),约翰·巴克斯在IBM。

早期历史

1842 年至1849年间,艾达·洛夫莱斯( Ada Lovelace)翻译了意大利数学家路易吉·梅纳布雷 (Luigi Menabrea)关于查尔斯·巴贝奇( Charles Babbage ) 最新提出的机器:分析机(Analytical Engine)的回忆录;她用注释补充了回忆录,详细说明了用引擎计算伯努利数的方法,大多数历史学家认为这是世界上第一个出版的计算机程序。
分析机

第一个计算机代码专门用于它们的应用:例如,Alonzo Church能够以公式化的方式表达lambda 演算,而图灵机是磁带标记机操作的抽象。

Jacquard Looms和 Charles Babbage 的差分机都有简单的语言来描述这些机器应该执行的动作,因此他们是第一种编程语言的创造者。

第一种编程语言

1940 年代,第一台公认的现代电动计算机问世。有限的速度和内存容量迫使程序员编写手动调整的汇编语言程序。人们最终意识到用汇编语言编程需要大量的智力努力。

高级编程语言的早期提议是Plankalkül,由Konrad Zuse于1943 年至 1945 年间为他的Z1 计算机开发,但当时并未实现。
Z1 计算机

第一个旨在向计算机传达指令的功能性编程语言是在 1950 年代早期编写的。John Mauchly于 1949 年提出的短代码是有史以来最早为电子计算机开发的高级语言之一。与机器代码不同,短代码语句以可理解的形式表示数学表达式。然而,该程序每次运行时都必须被翻译成机器代码,这使得该过程比运行等效的机器代码要慢得多。

1950 年代初期,Alick Glennie在曼彻斯特大学开发了Autocode,这可能是第一种编译型编程语言。1954 年,RA Brooker为 Mark 1 开发了该语言的第二次迭代,称为“Mark 1 Autocode” 。Brooker 还在1950 年代与曼彻斯特大学合作开发了Ferranti Mercury的自动代码。对于版本EDSAC 2被设计道格拉斯·哈特里的剑桥大学数学实验室的大学1961 年。被称为 EDSAC 2 Autocode,它是 Mercury Autocode 的直接开发,适用于当地情况,并以其当时先进的目标代码优化和源语言诊断而闻名。一个现代但独立的开发线程,Atlas Autocode是为曼彻斯特大学的Atlas 1机器开发的。
请添加图片描述

1954 年,由John Backus领导的团队在 IBM 发明了FORTRAN;它是第一个广泛使用的具有功能实现的高级通用编程语言,而不仅仅是纸上的设计。当 FORTRAN 首次被引入时,由于错误、开发延迟以及用汇编编写的“手工编码”程序的比较效率,人们对它持怀疑态度。然而,在快速发展的硬件市场中;该语言最终因其效率而闻名。它仍然是一种流行的高性能计算语言,并用于对世界上的基准和排名的程序最快的超级计算机。
请添加图片描述

另一种早期的编程语言是由美国的Grace Hopper设计的,称为FLOW-MATIC。它是在 1955 年至 1959 年期间为Remington Rand的UNIVAC I开发的。 Hopper 发现业务数据处理客户对数学符号感到不舒服,于是在 1955 年初,她和她的团队为英语编程语言编写了规范并实施一个原型。 FLOW-MATIC 编译器于 1958 年初公开可用,并在 1959 年基本完成。Flow-Matic 对COBOL的设计产生了重大影响,因为只有它和它的直接后代AIMACO当时在实际使用中。


今天仍在使用的其他语言包括LISP (1958),由John McCarthy发明和COBOL (1959),由短程委员会创建。1950 年代后期的另一个里程碑是由美国和欧洲计算机科学家组成的委员会发表了“一种新的算法语言”。在ALGOL 60的报告(以下简称“ ALGO rithmic大号anguage”)。这份报告整合了当时流行的许多想法,并突出了三个关键的语言创新:

  • 嵌套块结构:代码序列和相关的声明可以组合成块,而不必变成单独的、显式命名的过程;
  • 词法范围:一个块可以有它自己的私有变量、过程和函数,对块外的代码是不可见的,即信息隐藏。

与此相关的另一项创新是语言的描述方式:

  • 一种数学上精确的符号,巴科斯-诺尔形式(BNF),被用来描述语言的语法。几乎所有后续的编程语言都使用 BNF 的变体来描述其语法的上下文无关部分。
    Algol 60 在后来的语言设计中特别有影响力,其中一些语言很快变得流行起来。的巴勒斯大型系统设计中的Algol的扩展子集进行编程。

延续了 Algol 的关键思想,产生了ALGOL 68:

  • 语法和语义变得更加正交,具有匿名例程、具有高阶函数的递归类型系统等;
  • 不仅上下文无关部分,而且完整的语言句法和语义都被正式定义,根据Van Wijngaarden 语法,一种专门为此目的而设计的形式主义。
建立基本范式

从 1960 年代后期到 1970 年代后期,编程语言大放异彩。现在使用的大多数主要语言范式都是在这个时期发明的。

1980 年代:整合、模块、性能

1980 年代是命令式语言相对整合的年代。所有这些运动都没有发明新的范式,而是详细阐述了过去十年发明的思想。C++结合了面向对象和系统编程。美国政府标准化了Ada,这是一种供国防承包商使用的系统编程语言。在日本和其他地方,大量资金用于研究包含逻辑编程结构的所谓第五代编程语言。函数式语言社区开始标准化 ML 和 Lisp。研究米兰达,具有功能性的语言懒惰评估,开始冒头在这十年。

语言设计的一个重要新趋势是越来越关注通过使用模块或大规模代码组织单元为大规模系统编程。Modula、Ada 和 ML 都在 1980 年代开发了著名的模块系统。模块系统通常与泛型编程结构联系在一起——泛型本质上是参数化模块。

尽管命令式编程语言的主要新范式并未出现,但许多研究人员扩展了先前语言的思想并将其调整到新的上下文中。例如,Argus和Emerald系统的语言将面向对象的编程应用于分布式系统。

1980 年代还带来了编程语言实现的进步。计算机体系结构中的RISC运动假定硬件应该为编译器而不是为人类汇编程序员设计。借助处理器速度的提高,编译技术变得越来越激进,RISC 运动激发了人们对高级语言编译技术的更大兴趣。

语言技术沿着这些路线一直延续到 1990 年代。

1990 年代:互联网时代

1990 年代中期互联网的快速发展是编程语言的下一个重大历史事件。通过为计算机系统开辟一个全新的平台,互联网为采用新语言创造了机会。特别是,JavaScript编程语言因其早期与 Netscape Navigator 网络浏览器的集成而变得流行起来。各种其他脚本语言在为 Web 服务器(如 PHP)开发定制应用程序方面得到了广泛应用。1990 年代在命令式语言中没有看到根本性的新奇事物,而是对旧思想进行了大量重组和成熟。这个时代开始了函数式语言的传播. 一个重要的驱动哲学是程序员的生产力。出现了许多“快速应用程序开发”(RAD) 语言,它们通常带有IDE、垃圾收集,并且是旧语言的后代。所有这些语言都是面向对象的。其中包括Object Pascal、Visual Basic和Java。Java 尤其受到了很多关注。

比 RAD 语言更激进和创新的是新的脚本语言。这些并不是直接从其他语言继承而来的,并且具有新的语法和更自由的特征组合。许多人认为这些脚本语言甚至比 RAD 语言更有效率,但通常是因为这些选择使小程序更简单,但大程序更难编写和维护。

当前趋势

在工业和研究中,编程语言的发展仍在继续。最近的一些趋势包括:

  • 增加对商业使用的主流语言中的函数式编程的支持,包括使代码更易于推理和更易于并行化的纯函数式编程(在微观和宏观层面)
  • 构造以支持并发和分布式编程。
  • 为语言添加安全性和可靠性验证的机制:扩展静态检查、依赖类型、信息流控制、静态线程安全。
  • 可组合性和模块化的替代机制:mixins、traits、typeclasses、delegates、aspect。
  • 面向组件的软件开发。
  • 元编程、反射或访问抽象语法树
    • AOP 或面向方面的编程允许开发人员在“连接点”处将代码插入另一个模块或类中
    • 领域特定语言和代码生成
      • 图形界面的 XML ( XUL , XAML )
  • 对分销和流动性的兴趣增加。
  • 与数据库集成,包括XML和关系数据库。
  • 开源作为语言的开发哲学,包括 GNU Compiler Collection 和PHP、Python、Ruby和Scala 等语言。
  • 对Scratch、LabVIEW和PWCT等可视化编程语言更感兴趣
  • 用于编码 2000 个处理器 GPU 图形处理单元和超级计算机阵列(包括OpenCL)的大规模并行语言
  • 对(尚未实现的)量子计算编程语言的早期研究
  • 应用人工智能技术生成代码的早期研究,如使用GPT-3

Java语言发展史

Java是一种高级的、基于类的、面向对象的 编程语言,它被设计为具有尽可能少的实现依赖性。它是一种通用编程语言,旨在让应用程序开发人员 编写一次,随处运行(WORA),意味着编译后的Java 代码可以在所有支持 Java 的平台上运行,而无需重新编译。 Java 应用程序通常被编译为字节码,可以在任何Java 虚拟机(JVM)上运行,而不管底层是什么计算机体系结构。Java的语法与C和C++类似,但其低级设施比它们中的任何一个都少。Java 运行时提供了传统编译语言通常不具备的动态功能(例如反射和运行时代码修改)。根据GitHub,截至 2019 年,Java 是最受欢迎的编程语言之一,特别是对于客户端 - 服务器Web 应用程序,据报道有 900 万开发人员。

Java是最初由开发詹姆斯·高斯林在Sun Microsystems公司(这已经被Oracle收购),并于1995年发布了作为Sun公司的一个核心组成部分Java平台。原始和参考实现Java编译器、虚拟机和类库最初由 Sun 在专有许可下发布。截至 2007 年 5 月,按照Java Community Process的规范,Sun 已根据GPL-2.0-only许可重新许可其大部分 Java 技术。Oracle 提供自己的HotSpotJava 虚拟机,但是官方参考实现是OpenJDK JVM,它是免费的开源软件,被大多数开发人员使用,并且是几乎所有 Linux 发行版的默认 JVM。

作为2021三月,最新的版本是Java的16,与Java 11,目前支持的长期支持(LTS)版本,9月25日公布,2018年甲骨文发布了最后一个零成本的公共更新原有版本的Java 8 LTS 于 2019 年 1 月用于商业用途,尽管它仍将无限期地支持 Java 8,并提供公共更新供个人使用。其他供应商已经开始提供OpenJDK 8 和 11 的零成本构建,它们仍在接受安全性和其他升级。

Oracle(和其他公司)强烈建议卸载过时的 Java 版本,因为未解决的安全问题会带来严重的风险。[22]由于不再支持 Java 9、10、12、13、14 和 15,Oracle 建议其用户立即过渡到最新版本(当前为 Java 16)或 LTS 版本。

历史

James Gosling、Mike Sheridan 和Patrick Naughton于 1991 年 6 月发起了 Java 语言项目。 Java 最初是为交互式电视设计的,但对于当时的数字有线电视行业来说它太先进了。该语言最初以高斯林办公室外的一棵oak命名为 Oak 。后来该项目以 Green 命名,最终更名为 Java ,源自 Java coffee,一种来自印度尼西亚的咖啡。Gosling 用C / C++设计了 Java系统和应用程序程序员会发现熟悉的风格语法。

Sun Microsystems 于 1996 年发布了第一个公开实现,即 Java 1.0。它承诺一次编写,随处运行( WORA ) 功能,在流行平台上提供免费运行时间。相当安全并具有可配置的安全性,它允许网络和文件访问限制。主要的网络浏览器很快整合了在网页中运行Java 小程序的能力,Java 迅速流行起来。Java 1.0 编译器由Arthur van Hoff用Java重新编写,以严格遵守 Java 1.0 语言规范。随着 Java 2(最初在 1998 年 12 月至 1999 年 12 月作为 J2SE 1.2 发布)的出现,新版本为不同类型的平台构建了多种配置。J2EE 包括用于通常在服务器环境中运行的企业应用程序的技术和 API,而 J2ME 则以针对移动应用程序优化的 API 为特色。桌面版更名为 J2SE。2006 年,出于营销目的,Sun 将新的 J2 版本分别重命名为Java EE、Java ME和Java SE。

1997 年,Sun Microsystems 与ISO/IEC JTC 1标准机构以及后来的Ecma International 接触以正式化 Java,但很快就退出了该过程。Java 仍然是事实上的标准,通过Java Community Process 进行控制。曾几何时,Sun 免费提供大部分 Java 实现,尽管它们是专有软件。Sun 通过销售 Java Enterprise System 等专用产品的许可证从 Java 中获得收入。

2006 年 11 月 13 日,Sun根据GPL-2.0-only许可条款发布了大部分 Java 虚拟机 (JVM) 作为免费和开源软件(FOSS) 。2007 年 5 月 8 日,Sun 完成了这个过程,除了一小部分 Sun 不拥有版权的代码外,所有 JVM 的核心代码都可以在自由软件/开源分发条款下使用。

Sun 的副总裁 Rich Green 表示,Sun 在 Java 方面的理想角色是作为一名传道者。在甲骨文公司在 2009-10 年收购 Sun Microsystems 之后,甲骨文将自己描述为 Java 技术的管理者,并不懈地致力于培养参与和透明度的社区。这并没有阻止 Oracle 在此之后不久就在Android SDK 中使用 Java 对 Google 提起诉讼。

2010 年 4 月 2 日,James Gosling 从Oracle辞职。

2016 年 1 月,Oracle 宣布基于 JDK 9 的 Java 运行时环境将停止使用浏览器插件。

Java 软件运行在从笔记本电脑到数据中心、游戏机到科学超级计算机的所有设备上。

  • 原则
    Java 语言的创建有五个主要目标:
    1. 它必须简单、面向对象且熟悉。
    2. 它必须是健壮和安全的。
    3. 它必须是架构中立和可移植的。
    4. 它必须以高性能执行。
    5. 它必须是可解释的、线程化的和动态的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值