高级编程语言
在计算机科学中,高级编程语言是一种编程语言,从计算机的细节中具有很强的抽象。与低级编程语言相反,它可以使用自然语言元素,更易于使用,或者可以自动化(甚至完全隐藏)计算系统的重要领域(例如内存管理),从而使开发程序更简单,更简单,并且比使用低级语言更容易理解。提供的抽象量定义了编程语言的“高级”。
在1960年代,使用编译器的高级编程语言通常称为Autocode 。 Autocodes的示例是COBOL和FORTRAN 。
专为计算机设计的第一种高级编程语言是由Konrad Zuse创建的Plankalkül 。但是,它没有在他的时代实施,除了该语言对亨氏·鲁蒂斯豪瑟( Heinz Rutishauser)和某种程度的阿尔戈尔(Algol)对语言对“超级计划”语言的影响之外,他的最初贡献在很大程度上与其他发展的发展隔离了。第一个显著广泛的高级语言是Fortran ,这是IBM早期自动码系统的机器独立的开发。阿尔戈尔家族(Algol Family),阿尔戈尔(Algol)58在1958年定义,欧美计算机科学家委员会在1960年定义的阿尔戈尔( Algol)60 ,在词汇范围下引入了递归以及嵌套功能。 Algol 60也是第一语言,在价值和名称参数及其相应的语义之间具有明显的区别。 Algol还引入了几个结构化编程概念,例如while-do
和if-then-else
构建体及其语法是第一个以形式符号( Backus -Naur形式(BNF))描述的。在大约同一时期, COBOL引入了记录(也称为结构),而LISP首次以编程语言引入了完全一般的Lambda抽象。
特征
“高级语言”是指机器语言的较高抽像水平。高级语言与其处理寄存器,内存地址和调用堆栈,不如涉及变量,数组,对象,复杂算术或布尔表达式,子例程和功能,循环,线程,锁和其他抽象的计算机科学概念,专注于最佳计划效率的可用性。与低级汇编语言不同,高级语言几乎没有直接转化为机器本机opcodes的语言元素。其他功能,例如字符串处理程序,面向对象的语言功能以及文件输入/输出也可能存在。关于高级编程语言,要注意的一件事是,这些语言允许程序员与机器分离并分离。也就是说,与诸如汇编或机器语言之类的低级语言不同,高级编程可以扩大程序员的说明,并在不知情的情况下在后台触发许多数据移动。执行说明的责任和权力已移交给程序员的机器。
抽象惩罚
高级语言打算提供标准化常见任务,允许丰富的调试并维持建筑不可知论的功能;尽管低级语言通常通过优化特定的系统体系结构产生更有效的代码。抽象惩罚是高级编程技术无法优化性能或使用某些硬件所支付的成本,因为它们没有利用某些低级建筑资源。高级编程展示了更多通用数据结构和操作,运行时解释和中间代码文件等功能;这通常会导致执行远远超过必要的操作,更高的内存消耗以及更大的二进制程序大小。因此,即使高级语言使编码更容易,需要特别快速运行的代码可能需要使用较低级别的语言。在许多情况下,程序的关键部分主要是用高级语言进行的,可以用汇编语言进行手工编码,从而导致更快,更高效或简单地可靠地运行优化程序。
但是,随着现代微处理器架构的日益增长的复杂性,高级语言的精心设计的编译器通常会产生与大多数低级程序员可以手工生产的效率可比性的代码,并且更高的抽象可以提供更强大的技术,从而提供更好的技术。在特定设置中,其总体结果比其低级对应物。高级语言的设计独立于特定的计算系统体系结构。这有助于在任何计算系统上用这种语言编写的程序执行对解释或JIT程序的兼容支持。随着设计师的发展改进,高级语言可以改善。在其他情况下,新的高级语言是从一种或多种其他一种或多种语言演变而来的,目的是汇总具有新的或改进功能的最受欢迎的构造。一个例子是Scala ,它与Java保持向后兼容,这意味着即使编程商店切换到Scala,在Java中编写的程序和库也将继续可用。这使过渡更加轻松,并且这种高级编码的寿命是无限的。相比之下,低级程序很少能超越他们为没有重大修订的系统架构而生存。这是“抽象惩罚”的工程“权衡”。
相对含义
当今有效使用中高级编程语言的示例包括Python , JavaScript , Visual Basic , Delphi , Perl , Php ,Php, Ecmascript , Ruby , C# , Java等。
高级和低级术语本质上是相对的。几十年前, C语言和类似语言通常被认为是“高级”,因为它支持诸如表达评估,参数化递归功能和数据类型和结构之类的概念,而汇编语言则被视为“低级” ” 。如今,许多程序员可能将C称为低级,因为它缺乏较大的运行时系统(无垃圾收集等),基本上仅支持标量操作,并提供直接的内存寻址。因此,它很容易与汇编语言以及CPU和微控制器的机器级别融合。同样,在C编程语言(第二版)的引言中,C,C被认为是一种相对“低级别”的语言。
汇编语言本身可能被视为更高级别(但通常仍然使用宏代码,通常仍然一对一)表示机器代码的表示,因为它支持诸如常数和(有限)表达式(有限),有时甚至变量,过程和数据等概念结构。反过来,机器代码本质上比许多处理器内部使用的微型或微功能均具有稍高的水平。
执行模式
现代高级语言有三种一般执行方式:
- 解释
- 当解释用语言编写的代码时,其语法将被读取然后直接执行,而没有汇编阶段。一个名为解释器的程序读取每个程序语句,然后遵循程序流,然后决定该怎么做,然后做。解释器和编译器的混合体将将语句编译到机器代码中并执行;然后将机器代码丢弃,如果再次执行该行,则可以重新解释。与此处列出的其他两个变体相比,解释者通常是语言行为的最简单实现。
- 编译
- 当编译语言编写的代码时,其语法会在运行前将其转换为可执行的表单。汇编有两种类型:
- 源源翻译或转换
- 用一种语言编写的代码可以翻译成本机代码编译器已经很常见的低级语言的术语。 JavaScript和语言C是此类翻译人员的常见目标。参见CoffeeScript , Chicken Spone和Eiffel作为例子。具体而言,在任何编译的Eiffel项目的Eifgens目录中使用EiffelStudio IDE时,可以看到生成的C和C ++代码(从EIFFEL语言生成)。在艾菲尔(Eiffel)中,翻译的过程称为“移动或迁移”,而埃菲尔(Eiffel)编译器则称为迁移器或源代码编译器。
请注意,语言不是严格解释的语言或编译语言。相反,语言行为的实现使用解释或编译。例如, Algol 60和Fortran都已被解释(即使它们通常是更常规的编译)。同样,Java显示了尝试将这些标签应用于语言而不是实现的困难。 Java被编译为字节码,然后通过解释( Java Virtual Machine (JVM))或编译(通常在JVM中再次使用Hotspot )来执行该字节。此外,编译,进行编译和解释并不严格仅限于编译器伪像的描述(二进制可执行文件或IL组装)。
高级语言计算机架构
另外,高级语言可以由计算机直接实现 - 计算机直接执行HLL代码。这被称为高级语言计算机体系结构-计算机体系结构本身旨在以特定的高级语言为目标。例如, Burroughs大型系统是Algol 60的目标机器。