编程语言(英文:programming language)是一种计算机和人都能识别的语言。程序员通过编程语言给计算机发出指令,计算机按照相应指令完成工作。编程语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下所应当采取的行动。
编程语言基本概念
编辑编程语言是一种计算机和人都能识别的语言,程序员依靠编程语言能够准确地定位计算机所需要使用的数据,并精确地定义不同情况下所采取的行动。它是由一系列的语法和语义规则组成的。编程语言的执行过程分为编译和解释两种方式。程序中的数据传递方式是通过程序控制结构进行的。编程语言的源程序是由函数组成,通过对函数的调用实现特定的功能,开发人员通过算法将多个函数组合起来实现的所需功能。
编程语言发展历程
编辑机器语言时期
1801年,约瑟夫·玛丽·雅卡尔(Joseph Marie Jacquard)用打孔卡为一台织布机编写指令,织出了“hello world”的字样,这并没有引起热烈反响。1836年,计算机科学家查尔斯·巴比奇(C++harles Babbage)制造了一台木齿铁轮计算机,巴比奇利用了雅卡尔穿孔纸带原理进行计算机编程。他提出了为计算机编程的思想理念,这一理念启发了20世纪的计算机科学家们。1842年,爱达·勒芙蕾丝(Ada lovelace)在1842年至1843年间花费了九个月,将意大利数学家Luigi Menabrea关于查尔斯·巴贝奇新发表机器分析机的回忆录翻译完成。分析机由于其设计思想过于先进,在当时没有被制造出来。1889年美国统计学家赫尔曼·霍尔瑞斯(Herman Hollerith)根据雅卡尔提花织布机的原理,利用穿孔卡片,开发了穿孔卡片制表系统,被认为是现代计算机的雏形。1935年IBM公司在穿孔卡片制表系统的基础上,开发出了型号为IBM601的穿孔卡片式计算机。
雅卡尔织布机
IBM601穿孔卡片式计算机
汇编语言时期
1936年,阿兰·图灵(Alan Turing)和Alonzo Church同时发明了世间一切程序语言的最终形态——Turing completeness和λ演算,定义了什么样的语言可以被称作是程序语言。德国科学家Konrad Zuse最早提出了用汇编语言来指挥计算机工作的思想,其于1941年完成的数字计算机Z3被公认为是世界上第一台机电式、程序控制的非存储程序计算机。再到1946年,世界上第一台电子计算机问世,这个阶段的计算机的各项控制主要由人工操作来实现的,便利性严重不足,软件工程师和计算机从业者开启了人类和机器的交流语言的研究。
高级语言时期
1957年,前IBM计算机科学家约翰·贝克斯(John Backus)开发了FORTRAN编程语言,是第一个计算机高级语言,接近人们习惯使用的自然语言和数学语言,FORTRAN语言被认为是全球第一款广泛应用的计算机编程语言,约翰·巴克斯被誉为“FORTRAN语言之父”,并因此获得了1977年度图灵奖。
约翰·贝克斯
结构化编程的产生与发展
1970年,瑞士联邦技术学院尼克劳斯·沃尔斯(Niklaus Wirth)教授开发了多种语言,最后流行起来的是以压强单位帕斯卡命名Pascal,是第一个结构化的编程语言,因此被称为编程语言里一个重要的里程碑,不仅用作教学语言,而且也用作编写系统软件,如操作系统、编译程序等,他提出的著名公式“算法 + 数据结构 = 程序”,这个公式对计算机科学的影响程度足以类似物理学中爱因斯坦的“
”,他也因此获得1984年度图灵奖。
Pascal之父
1972年,在贝尔实验室工作的邓尼斯·里奇(Dennis Ritchie)写出带有花括号的C语言,取得了巨大成功,随后与同在贝尔实验室的同事肯·汤姆森(Ken. Thompson)决定给C语言做个演示程序,于是在二人的协作下,UNIX语言诞生了。C语言的设计哲学是“Keep It Simple,Stupid”,意为“保持简单,傻瓜”,程序员可以轻易掌握整个C语言的逻辑结构,众多的开发者倒向了C语言怀抱,C语言作为结构化编程语言迅速并广泛地传播开来。二者因此获得了1983年度的图灵奖。
肯·汤姆森(左)和邓尼斯·里奇(右)
面向对象编程的出现
面向对象编程语言出现于1980年,艾伦·凯(Alan Kay)发明了一门面向对象语言,他把这门语言叫做Smalltalk,被称为面向对象编程之父,因此获得了2003年度图灵奖。1983年,美国贝尔实验室的Bjarne Stroustrup博士及其同事在C语言的基础上,创造出了面向对象编程语言C++,C++语言的诞生,让编程高效、直接映射到硬件和零代价的抽象成为可能。1986年,Brad Cox博士希望C语言能够有一些Smalltalk语言的特性,于是和同事在ITT公司编写了C语言扩展 ,这一扩展创造了Objective-C。
Guido van Rossum
为了解决移植困难的难题,开发者开始了跨平台语言的发展。1994年,Rasmus Lerdorf用一组C编程语言编写了一个简单的通用网关接口(Commom Gateway Interface)二进制文件,并将这套脚本套件命名为“Personal Home Page Tools”,是PHP的第一个化身,1995年10月,Rasmus发布了完全重写的代码,称为“Personal Home Page Construction Kit”,简称PHP,是第一个拥有先进脚本接口的版本,PHP在结构上类似C语言。随后Rasmus将代码彻底改造,实现了将PHP从一套工具发展为一种独立的语言。1995年Brendan Eich 利用周末时间设计了一种语言,用于为世界各地的网页浏览器提供支持,并将这门语言命名为 LiveScript,经过JavaScript和ECMAScript两次更名最后命名为JavaScript。
Java编写“Hello World!”
微软公司于1997年正式发布ASP1.0版本,ASP技术降低了网站编程的难度,随后于1998年发布了ASP2.0版本,直至2001年,ASP.NET推出,增添了许多增强的新特性,使它更适用于创建强大的、交互式的基于网络的分布式应用程序。2001年, Anders Hejlsberg发明了C#语言。C#是一个相对繁冗的、带垃圾收集的、基于类的、静态类型的、单分派的面向对象语言,拥有单实现继承和多接口继承。2004年,由Martin Odersky创造的Scala第一个公开版本发布,是一种采用静态类型系统的编译型语言,可扩展性强,设计初衷是涵盖集成面向对象编程和函数式编程的各种特性。Scala 的编译模型与 Java 和 C# 一样,并兼容已有的 Java 程序。
简化的编程语言
2009年,七牛云创始人 许式伟发布了GO+1.0版本,Go+的核心特性是简化语法、低代码、去复杂化以及低门槛化,融合工程开发的Go、数据科学领域的Python、编程教学领域的Scratch,提出了“STEM教育、工程开发、数据科学”三位一体的理念。
随着移动设备的普及,适用于移动应用的编程语言相继推出。2011年,JetBrains公司推出一门基于Java虚拟机平台的编程语言Kotlin,谷歌公司在Google I/O大会上宣布Kotlin成为Android移动开发的首选。2014年,Apple公司推出了新的编程语言Swift,可用来为iOS、Mac、Apple YV和Apple Watch开发app,Swift采用可视化编程设计,可以进行实时预览,提高了编程的效率。
2019年6月,V语言发布,它是GO语言个Rust语言的结合,可以快速编译,还能够和C/C++转换。2020年,微软研究院开源了一个名为Verona的项目,是一个面向研究的编程语言,旨在解决内存管理和计算机安全方面的问题。2022年7月,谷歌工程师宣布谷歌内部正在打造一种新的编程语言——Carbon,是建立在现代编程原则的基础上,包含一个泛型系统,不需要为每个实例检查和再核对代码。
编程语言分类
编辑编程语言处在不断的发展和变化中,从最初的机器语言发展到2500种以上的高级语言,每种语言都有其特定的用途和不同的发展轨迹。编程语言并不像人类自然语言发展变化一样的缓慢而又持久,其发展是相当快速的,这主要是计算机硬件、互联网和IT业的发展促进了编程语言的发展。按照人与机器的交互程度,可以分为三大类:机器语言、汇编语言和高级语言。
机器语言
机器语言又叫低级语言或面向机器的语言,属于第一代计算机语言,计算机的内部电路是由开关和其他电子器件组成,这些器件只有两种状态,即开或关。一般情况下,“开”状态用“1”表示,“关”状态用“0”表示,计算机所使用的是由“0”和“1”组成的二进制数,也是计算机语言的基础,用“0”和“1”组成的一串代码是机器语言使用的二进制代码指令表达方式。
机器语言和程序
汇编语言
汇编语言又叫符号语言,是第二代计算机语言,用一些简洁的英文字母、符号串来替代一个特定的指令的二进制符号串,比如“ADD”代表数字逻辑上的加减,“MOV”代表数据传递等。
汇编语言程序
汇编语言通常由三部分组成:指令、伪指令和宏指令,由它编写的源程序不能直接被计算机识别,必须将它编译成由机器指令组成的程序后,才能够被计算机识别并执行。汇编程序的每一句指令只能对应实际操作过程中的一个很细微的动作,如移动、代数运算、自增等,因此汇编语言编写的程序一般比较冗长、复杂、容易出错,汇编语言同样依赖于机器硬件,移植性不强,且汇编仍需自己去调用存储器存储数据,出现BUG几率大。调试不易。汇编语言可扩展性高,可以轻松的读取存储器状态以及硬件I/O接口情况,编写的代码因为少了很多编译的环节,可以能够准确的被执行。针对计算机特定硬件而编制的汇编程序,能准确发挥计算机硬件的功能和特长,程序精练且质量高。
高级语言
高级语言是第三代计算机语言,它更接近人类的自然语言,便于人们理解、记忆和使用,故称其为高级语言。高级语言是一种用符号编写、独立于具体计算机的编程语言,将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,大大简化了程序中的指令。高级语言容易学习,通用性强,书写出来的程序比较短,更便于推广和交流,是一种很理想的程序设计语言。用高级语言所编写的程序,不能直接被计算机识别,需要“翻译”成机器语言形式的可执行程序,才能为计算机系统所执行高级语言是相对于计算器和汇编语言而言的,不是特指某一种具体的语言,而是包括了很多编程语言,这些语言的语法、命令格式都互不相同,各有特点,以适应不同编程、不同的计算机应用人群的需要。
高级语言程序
第一个编程语言问世后,产生出几百种高级编程语言,很多语言成为了编程语言发展道路上的里程碑,影响很大。比如:FORTRAN、BASIC、JAVA、C、C++、python等。高级编程语言也从早期的控制信号变成了现在的有结构有格式的程序编写工具,C++等语言的出现更是开启了面向对象编程语言的新章。同时伴随着软件编写效率的提高,软件开发也逐渐变成了有规模、有产业的商业项目。具TIOBE公布的榜单显示,比较流行的高级语言有:Java、C++、C语言,C#和Python等。
编程范式
编辑编程范式指的是一种程序或者程序语言的组织风格、方式。每一种程序范式都包含了代码结构、特征以及处理常见编程问题的方式。编程范式有面向过程编程,面向对象编程、函数式编程、声明式编程以及并行编程等等。随着软件和硬件的发展,新的编程范式也会随之出现,特定的范式适合解决特定问题。
面向过程编程
面向过程是以过程为中心的编程思想,也可称之为“面向记录”的编程思想,不支持“面向对象”的继承和多态等特性,是基于结构化程序设计思想,强调程序结构规范为顺序、选择和循环三种基本结构,利用这三种结构的组合、嵌套,可以实现复杂的设计程序。这种结构化分析方法是从功能角度来看待系统的,展示系统端到端的处理过程,是一种自上而下的功能分解,而当同时需要将各个不同层次的系统信息时,较低层的模型可能先被描述,然后经过抽象产生一个最终模型,对于这种大型的项目,需求不明确、结构复杂、因果关系无法分辨清楚,面向过程就不再适用。早期创造的C语言和Fortran语言都是面向过程的编程语言。
面向对象编程
面向对象以对象为核心,认为程序由一系列对象组成。基本思想是从现实世界中客观存在的对象出发,更加强调运用人类的自然思维方式中经常采用的思想发放与原则,例如抽象、分类、继承、聚合、封装等。在面向对象程序设计中,类是对现实世界的抽象,包括表示静态属性的数据和对数据的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。面向对象在软件开发的不同阶段的表示方式基本一样,在分析阶段,站在系统的高层次进行分析,采用对象模型+功能模型+动态模型展示,填补了面向过程程序设计的短缺。C++、C#、Java、Smalltalk、PHP等都是面向对象的编程语言。
函数式编程
1977年,约翰·巴克斯(John Backus)以非冯诺依曼式的计算机为设计背景的提出函数式编程语言,函数式编程语言将计算机的计算作为相应函数的计算,最重要的基础是λ演算,λ演算的函数可以接受函数当作输入和输出值出,从而将函数的定义和调用作为计算程序,所以它相对于其他命令式编程语言有更强的数学表达性。函数式编程范式解耦了数据和处理数据的函数,将数据在不同处理函数之间的流动过程展现给用户,是用户能够对自己的业务逻辑始终保持专注,避免了面向对象抽象过程中数据和方法的耦合以及类继承的复杂性。Haskell、Clean、Meta Language和F#等都是函数式编程语言。
声明式编程
声明式编程表示逻辑运算时不需要说明程序的控制流程,只试图通过描述程序应该完成什么而不是怎样完成来降低程序语言表达式或函数产生的副作用。声明式编程认为程序是在逻辑空间中一系列的形式逻辑与计算最终的推论结果,只需要做些简单的声明性工作,告诉程序做什么,有效地避免重复性编码,使代码更清晰,易读。一些著名的声明式领域专属语言包括yacc语法分析器,编译说明语言Make,Puppet管理配置语言,正则表达式和SQL的一些子集。
并行编程
并行编程是指同时多个任务、多条指令或多个数据项同时进行处理,能够充分利用底层硬件所提供的并行执行能力从而提高程序的运行效率。传统并行编程模型可分为两类:数据并行模式和消息传递模型,其中,数据并行模式的典型代表是HPF,消息传递模型的典型代表是MPI和PVM。数据并行模型级别较高,编程相对简单,但是仅适用于解决数据并行问题,使用消息传递模型编写并行程序时,用户需要显式的进行数据与任务量的划分、任务之间的通信与同步、死锁检测等,编程负担较重。
流行的编程语言
编辑为了使得计算机方面的软件技术获得更高的应用质量,相关科研人员在对计算机中的编程语言进行持续的完善和创新,以此来提升计算机编程语言的直观性和易学性,高校和社会面较为广泛的编程语言包括Java、C++、PHP、Python、C#以及C语言等,不同编程语言在应用优势方面也各不相同。
Java
Java语言定位于网络计算,它的面向对象、跨平台、分布应用等特点给编程人员带来了崭新的计算概念。自1995年正式问世以来,Java已经逐步从一种单纯的计算机高级编程语言发展为一种重要的Internet平台。Java语言不受地区、行业、部门、爱好的限制,Java语言开发的软件具有可视化、可听化、可操作化的效果,可将用户的需求进行动态的、可视化描述,满足设计者更加直观的要求,对多媒体的应用也比较广泛。Java语言应用的比较广泛,根据不同级别的应用开发区分了不同的应用版本,Java SE(Java standard edition,Java标准版),Java EE(Java enterprise edition,Java企业版)以及Java ME(Java micro edition,Java微型版)。Java的出现解决了WWW仅可以传送文本和图片,实现了页面的互动,是一次伟大的革命。
Java
C++
C++语言是广泛用于软件研发的大型语言,支持多种编程思想的程序设计语言,包括过程式程序设计、基于对象的程序设计、面向对象的程序设计以及泛型程序设计。C++在C语言的基础上做出了很大的改进,增加了新的运算符和引用类型,提出内嵌概念,允许函数重载和运算符重载等。C++语言的效率高,拥有先进的数值计算库、成熟的用于网络通信的库、重量级的ACE库,还有跨平台特性、泛型编程等优势,基于这些特点C++能够很好的应用于游戏、科学计算、网络软件、操作系统和设备驱动程序。
C++
C语言
C语言在众多的编程语言中比较频繁,也是应用场景比较多的一种计算机编程语言,C语言相较于其他的编程语言来说,编写语法相对简单,编写难度比较小,而且运算符号和编程结构更加的多样化,能够适应更多的计算机编程场景,C语言非常明显的特点是编程代码和数据结构是彼此分离的,使得其具有更强的兼容能力,可以实现将一个计算机软件移植到另一个计算机上,并且不会导致软件崩溃。
C语言
Python
Python 是一类面向对象的解释型的计算机编程语言,是一种高级脚本语言,结合了可解释性、交互性、编译性与面向对象性。Python 语言在中国的引入时间落后于Java、C++等编程语言,普及程度相对偏低,但Python语言的前景广阔。
在Web应用开发方面,Python语言凭借于自身具有的开源性和跨平台性的特点,方便程序员开发和管理复杂程度较高的Web程序,Python与Django(Web框架)相结合的架构,能够在短时间内为用户搭建起想要的Web服务。在数据分析方面,Python语言相较于C语言更加简单、编辑,更适合于具体数据的分析与统计操作,不仅能实现各种数学运算,还能够进行2D与3D图像的绘制,画面质量高,能够处理多种类型的数据与文件信息。在人工智能方面,Python满足人工智能的即时性需求,提供许多AI库以及机器学习库,被用于机器学习,库中的数据信息囊括了数据预处理、降维等机器学习中常用的计算方法与模式。
Python能用于不同方向的技术编程,凭借自身的库可以完成各种技术编程操作,这一功能使得Python广泛应用于云计算、自动化运维、常规软件开发领域。
Python
C#
C#是微软公司作为Visual Studio.Net的一部分推出的新一代的面向对象的编程语言,微软宣称:C#是开发.Net框架应用程序的最好语言,它将成为用于编写NGWS(Next Generation Windows Services,下一代窗口服务)应用程序的主要语言。C#来源于C和C++,具有现代、简单、新型、面向对象而且类型安全等特点。作为一种全新的语言,C#具有许多新特性,最主要的有自动内存管理、同一类型系统、版本控制及网络编程新标准的支持等。
C#
编程语言优缺点
编程语言 | 优点 | 缺点 |
Java | 面向对象、跨平台、分布应用,开发的软件具有可视化、可操作化的效果。支持垃圾回收,后端开发有一套庞大的生态系统 | 并发性差,错误处理机制不够完善,没有为不可变性数据结构提供内置支持 |
C++ | 支持多种编程思想,拥有先进的数值计算库、成熟的用于网络通信的库、重量级的ACE库,还有跨平台、范式编程的特性 | 编译时间长,错误提示信息对新手不友好,并发性差 |
C语言 | 语法相对简单,编写难度比较小,运算符号和编程结构更加的多样化,兼容能力强 | 开发周期长,危险性高,可移植性差 |
C# | 具有现代、简单、新型、面向对象而且类型安全等特点 | 不具备跨平台的能力,新手接受程度差 |
Python | 有一个支持一切的库,易于学习和掌握,结合了可解释性、交互性、编译性与面向对象性 | 依赖管理和并发性差,错误处理机制不完善,编译速度慢 |
应用领域
编辑不同的编程语言具有的特性优势不同,在具体应用期间, 需要结合自身需求,选择具有较高适应性和针对性的编程语言,达到应用开发性能效率最大化。
Web开发
PHP语言作为通用脚本语言的一种被应用在Web的开发领域之中。从PHP语言的形式来看,其语法特点是比较特殊的,其中有一部分是C,Java,Perl的语言形式,另外一部分是PHP语言独有的语法,而这部分独有的语法形式,也是其能够更加快速应用于动态网页之中的原因。在实际进行网页编程的时候,PHP语言是通过一种嵌入式的方式实现的,其执行和运行效率,要比其他方式编写的计算机语言更加迅速,因此代码运行的速度也会更快。在一些动态网站的编写之中,PHP语言的优势更加明显。
数据科学
Java语言作为一种面向对象编程语言,关注的重点在于数据应用和操作的具体算法,是高性能互联网架构的重要组成部分。具有诸多优势,如语法简捷、 内存能够进行自动化管理、可以进行跨平台移植、异常处理可靠性高以及字节码具有完善的安全机制,结合经济性考虑,Java语言在大数据领域以及超级计算机方面的应用广泛,并且在互联网、游戏控制、个人PC以及多媒体方面也有重要作用。除此之外,Python拥有比较完善的数据处理、数据分析以及可视化的生态系统,数据处理的模块,底层是C语言实现的,Python直接进行调用,用户可以根据数据分析的具体需要灵活使用,Python在数据科学应用领域也比较受欢迎。
人工智能
Python在人工智能应用领域也占有优势,因为它具备了强大的人工智能支持库,比如sklearn、keras、nltk等模块,而且Tensorflow、 caffe 之类的深度学习框架,主体是用Python 实现, 提供的原生接口也是 Python。北京大学计算机科学技术研究所研究员万小军,与今日头条实验室联合研发于2016年推出国内第一款人工智能写稿机器人——张小明,他表示:“写稿机器人实际上是一款利用编程语言实现的智能写稿软件”,原理是利用数据库或规则和数据撰写稿件。
“张小明”所写新闻稿
发展趋势
编辑量子计算
随着互联网的迅猛发展和大数据时代的到来,人们对信息处理的需求与日俱增,加剧了个人及社会对算力的依赖,在这种背景下,作为后摩尔时代的新型计算模式,量子计算展现出巨大的计算潜力。其实早在1982年,理查德·费曼(R.Feynman)便指出经典计算机难以模拟量子环境的生成与演化,并首次提出量子计算机的概念。微软于2017年宣布推出一款运用于量子计算机上的新型编程语言,并将量子计算定位为未来微软三项重要的新兴技术之一。2018 年,Google 团队展示的“量子霸权”成为了量子计算领域的一个重要里程碑。量子计算编程参照经典机编程发展的做法,编辑能够在量子计算机上运行的指令序列的过程,量子指令集用于将高级算法转换为可以在量子处理器上执行的物理指令,
区块链技术
随着数字经济的快速发展,区块链技术成为一种引人注目的解决方案。它不仅可以改变金融行业的传统方式,还可以应用于各种领域,如供应链管理、医疗保健、物联网和智能合约等。区块链平台开发在实现这些应用的过程中发挥着关键作用。区块链技术的核心是由一系列区块组成的分布式账本,这些区块按照时间戳的顺序链接在一起,形成一个不可篡改的记录。在区块链平台的开发过程中,智能合约是一个不可或缺的组成部分。智能合约是一种以代码形式编写的合约,它定义了各方在区块链上进行交互时应遵守的规则。通过智能合约,区块链平台可以实现自动化的交易和合约执行,大大提高了交易的效率和安全性。
低代码平台
在计算机编程语言的发展中,总体发展趋势是提高语言的抽象层次和表达能力、容易学习和使用以及能支持更灵活的定制,从而提高程序员编写代码的效率,即用更少的代码完成更多的工作。 经济和市场环境的快速变化使企业纷纷意识到数字技术在赋能转型升级和降本提效方面的重要价值,而低代码基于其大幅提升应用开发效率的特性,正在成为各类企业数字化转型过程中的重要选择。各领域企业对低代码的需求不断提高,行业市场规模也持续扩大。截止2021年,全球有77%的受访企业已经开始使用低代码开发平台。
2022年低代码平台排行
拜语言
2023年2月1日,中国企业拜椰特发布了面向数据科技时代的计算机编程语言——拜语言。拜语言区别于传统面向对象语言,是用数据化(库与表)来描述所有的数据类型,用数据化编程创造性的解决在不修改逻辑代码的情况下复用该逻辑代码,从而可以进行大规模数据处理,也能大幅提高数据处理和软件开发的效率。拜语言将极大的提升软件开发效率和降低开发成本,改变软件产业发展步伐,加速各类企业实现数字化转型。
百科词条作者:小小编,如若转载,请注明出处:https://glopedia.cn/111299/