编程语言进化史

news2024/12/26 6:21:57

编程语言多到你想象不到。

图片来自: 程序设计语言概念

发展历史

  • 自从1946年冯诺依曼原理被提出,计算机数据和指令是通过二进制形式以及后来的汇编语言(二进制助记符),但依然没有改变容易出错的本质。
  • 1951年Rutishauser提出的用编译程序实现高级语言的思想,为Fortran的诞生奠定基础。
  • 1954年,第一个脱离机器的高级语言Fortran诞生,它的产生为了解决汇编语言的缺点,主要用于科学计算。Fortran先后提出了所有程序语言的基础概念:
    • 变量、表达式、赋值、函数调用、输入输出
    • 条件比较、顺序、选择和循环结构
    • 用于数值计算的整数、实数、复数、数组
  • 1958年,ALGOL诞生,也称为ALGOL58,1960年更新为ALGOL60,当时IBM主推Fortran, 不支持ALGOL,ALGOL未能流行,但ALGOL的思想影响了后来的绝大部分编程语言。
  • 1960年,COBOL语言发布,用于商务处理。COBOL的目标是哪怕只能看懂英文的人也能看懂COBOL. 它提出了记录的概念(如今的struct)、表和文件,但很繁琐。
  • 也是50年代末期,用于人工智能研究的LISP语言被提出。它只被科学家使用,没有广泛普及。
  • 尽管如上,50年代工程端依然是汇编语言的市场。
  • 1962年,APL语言被提出,主要面向数学。
  • 同样是1962年,用于文本处理的SNOBOL诞生。80年代ICON是它的后裔。
  • 1963~64年,IBM试图设计一款集Fortran/COBOL和ALGOL优点于一体的编程语言,命名为PL/1, 但由于太庞大未能普及。
  • 1964年,ALGOL 60的改进版ALGOL W诞生。
  • 1967年,为普及程序教育未初学者量身打造的BASIC诞生。
  • 同样1967年,为青少年启蒙的LOGO语言诞生。
  • 1967年,SIMULA67诞生。它以ALGOL 60为基础,首次提出了”类”的概念。
  • 1968年,ALGOL 68在ALGOL W的基础上继续发展。ALGOL 68集语言和技术的大成,提出了很多重要的思想,对C语言产生了重大影响。但其学术气太重,难以掌握,未能流行。
  • 1971年,Pascal诞生。最初本着精简、有效、可靠的设计思想,引入了丰富的数据类型和完全结构化的控制结构,迅速普及,为后来的程序语言有里程碑的影响。
  • 1971~72年,Bliss语言诞生,属于无类型的结构化语言。
  • 1972年,C语言诞生。C语言原型是BCPL语言,BCPL又被改造成B语言,接着改造成C语言。C语言重写Unix操作系统,操作系统和编程语言互相促进,很快就把Pascal抛在后面。
  • 1972年,非面向过程的Prolog语言诞生,利用谓词可实现逻辑推理,为人工智能研究提供重要基础。
  • 1972~74年,Mesa语言诞生。
  • 1974年左右,Clu编程语言诞生,同样有类概念,它的语法来自ALGOL,没有继承的概念。Clu提出了模板、异常处理和迭代器、多任务(超过一个变量在赋值运算符左侧),影响了C++、Python、Ruby和Lua的设计。
  • 1975年Modula发布,1977年,正式发布为Modula-2.
  • 1976年,Euclid语言诞生,基于Pascal语言。
  • 70年代,美国军方招标开发新语言,就是后来的Ada,后面发展为Ada-83和Ada-95.
  • 70年代末到80年代初值得一提的还有FORTH语言。
  • 1980年,Smalltalk-80发布,类概念来自SIMULA 67,又提出了类继承概念。面向对象思想影响很大,Object Pascal、Objective-C、Objext Assembler(68000汇编程序改造)。Object LOGO、Object FROTH均采用消息编程模式。
  • 1981年,Edison语言诞生,有并发语言和控制功能。
  • 1983年,LISP的面向对象版本LOOPS诞生,1985年Common LOOPS诞生。CLOS?
  • 1985年,C++诞生。
  • 1985年,SPOOL作为Prolog面向对象的扩展诞生。
  • 1985年,Eiffel诞生。
  • 1987年,Borland Turbo Pascal 5.5诞生。
  • 1988年,查询类语言SQL语言诞生。
  • 80年代,操作系统统一界面语言开始形成,如Shell.
  • Oberon是1990年代左右完成。
  • 微软于1991年发布Visual Basic 1.0, 经过十年演变逐渐演变为VB6.0,在.NET发布之后的2002年更新为Visual Basic.NET(7.0). 相比VB6.0,增加了面向对象的设计。

    ……


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开放平台: 签名密钥、回调地址、ip白名单管理。

文章目录 引言I 渠道信息管理(签名密钥)表设计渠道信息管理服务商API配置导出II 签名校验兼容图片上传接口验签规则方案2III 工具类开放平台字典服务接口txt文件的下载see also引言 需求: 提供给下游的开放平台,需要对接口做签名密钥、回调地址、ip白名单管理。 涉及的功…

JS实现一键点击按钮复制文本

JS实现一键点击按钮复制文本 背景描述JS代码实现 背景描述 现在有这样一个需求,想要在页面实现点击按钮,一键复制指定列表字段内容的操作,就像这样的效果 复制成功之后的内容在Notepad 粘贴可以看到 正式列表中链接地址字段的内容&#xf…

【学习笔记】Day 15

一、进度概述 1、《地震勘探原理》第八、九章 二、详情 对于第八章,主要讨论地震资料岩性解释的基本方法,对于利用地震信息进行储层的物性预测于解释、储层的含油性分析与解释、地震地层学解释、层序地层学解释、地球物理资料综合解释等内容。 第五、六…

【图解秒杀系列】秒杀技术点——静态化

【图解秒杀系列】秒杀技术点——静态化 什么是静态化、静态化的作用如何实现静态化FreeMarker、Thymleaf处理流程问题 OpenResty Lualua_shared_dict & lua-resty-template处理流程具体操作 什么是静态化、静态化的作用 静态化就是指通过某种静态化技术,将原本…

【动态规划、dp】P1091 [NOIP2004 提高组] 合唱队形 题解

题意 n n n 位同学站成一排,音乐老师要请其中的 n − k n−k n−k 位同学出列,使得剩下的 k k k 位同学排成合唱队形。 合唱队形是指这样的一种队形:设 k k k 位同学从左到右依次编号为 1 , 2 , … , k 1,2, …,k 1,2,…,k,他…

Qt-创建第一个Qt项目(3)

目录 新建项目 设置路径 选择构建工具 父类的选择 各个父类的介绍 国际化相关的选项 选择SDK Summary选择 项目初见 新建项目 这一点和在VS里面是一样的,我们首先都得创建一个项目出来 进去之后就是选择项目模板了 我们使用默认的就行了,左边…

顺丰科技25届秋季校园招聘常见问题答疑及校招网申测评笔试题型分析SHL题库Verify测评

Q:顺丰科技2025届校园招聘面向对象是? A:2025届应届毕业生,毕业时间段为2024年10月1日至2025年9月30日(不满足以上毕业时间的同学可以关注顺丰科技社会招聘或实习生招聘)。 Q:我可以投递几个岗…

涉密载体管控系统DW-S402|实现载体管控新模式

涉密载体管控系统DW-S402是用于对各种涉密载体进行有效管理的智能柜(智能管理系统),基于物联网技术实现对载体的智能化、规范化、标准化管理,广泛应用于保密、机要单位以及企事业单位等有载体保管需求的行业。 载体管控软件对涉密…

可用性检查和短缺部件检查

可用性检查 可用性检查有两种类型: “库存管理”中库存类型的可用性检查(静态可用性检查)从“物料需求计划”的角度检查可用库存(动态可用性检查) 库存类型的可用性检查(静态可用性检查) 此项…

全面解析ETL:数据仓库架构中的关键处理过程

目录 一、数据仓库架构中的ETL 二、数据抽取 (1)逻辑抽取 (2)物理抽取 (3)变化数据捕获 三、数据转换 四、数据装载 (1)提高装载效率 (2)处理装载失败 五、ET…

MacOS 下运行 GPT-SoVITS

系统环境: # 安装 ffmpeg brew install ffmpeg # 查看版本 ffmpeg -version # 拉取项目代码 git clone --depth1 https://github.com/RVC-Boss/GPT-SoVITS cd GPT-SoVITS # 安装好 Miniconda 之后,先创建一个虚拟环境: conda create -n GPT…

关于Qt的系统总结

查看详情http://100bcw.com/qt6.htm 编译环境与开发流程 开发QT有两种IDE可以使用,一种是使用 VS + Qt 的插件,另一种就是使用QtCreator工具。前一种是微软的工具,用的都比较多容易上手,缺点是信号槽的支持不太好,需要手写,不能自动生成,另外可能有中文编码的问题。后一…

PSINS工具箱函数介绍——trjfile

文章目录 关于工具箱使用方法运行代码运行方法运行结果输出数据的解释 源代码 关于工具箱 trjfile是导入轨迹数据的函数,在文件夹"psins \base\io"里面,用于导入轨迹相关的mat文件。 本文所述的代码需要基于PSINS工具箱,工具箱的讲…

Centos7.9 Kickstart自动应答,无人值守安装

有时候安装一两台服务器是轻松的事,但是如果要安装2,3百台的时候那就不是很轻松了,这时候无人值守的操作系统安装就变得非常重要。通过网络自动安装是非常方便而且快捷的。 先关闭防火墙吧 systemctl stop firewalld systemctl disable fire…

安卓蓝牙日志的获取方法

有过蓝牙调试经历的同学们可能都知道,在安卓系统中,在手机的设置–>开发人员页面下有一个开启蓝牙HCI信息收集日志选项开关,如下图中标红处, 打开该开关,就可以收集本机发送和接收的蓝牙HCI包。蓝牙包的数据会保存在…

Java算法解析一:二分算法及其衍生出来的问题

这个算法的前提是,数组是升序排列的 算法描述: i和j是指针可以表示查找范围 m为中间值 当目标值targat比m大时,设置查找范围在m右边:i m-1 当目标值targat比m小时,设置查找范围在m左边:j m1 当targat的…

苹果手机垃圾清理:释放存储空间的终极指南

随着iPhone成为我们日常生活的重要组成部分,我们越来越多地依赖它来处理个人和工作相关的事务。然而,长时间的使用会让iPhone积累大量不必要的数据和文件,这些所谓的“手机垃圾”不仅占用了宝贵的存储空间,还可能影响设备的性能。…

【Vite】模块热替换 HMR

概述 Vite 提供了一套原生 ESM 的 HMR API。 具有 HMR 功能的框架可以利用该 API 提供即时、准确的更新,而无需重新加载页面或清除应用程序状态。当通过 create-vite 创建应用程序时,所选模板已经预先配置了相关的集成。 HMR API Vite 通过特殊的 imp…

C++初学(12)

前段时间去旅游了&#xff0c;回来继续写。 12、指针、数组和指针算术 对上一篇进行的补充 #include <iostream> int main() {using namespace std;double wages[3] { 10000.0,20000.0,30000.0 };short stacks[3] { 3,2,1 };double* pw wages;short* ps &stack…

实时监控Windows服务器:使用Prometheus和Grafana的终极方案

1. 下载并安装 Prometheus 下载 Prometheus&#xff1a; 访问 Prometheus 下载页面。下载适用于 Windows 的压缩包&#xff08;.zip 文件&#xff09;。prometheus-2.53.2.windows-amd64.zip 下载其中一个就行 安装 Prometheus&#xff1a; 解压下载的压缩包到你选择的目录&a…